Germ of a function at a filter #
The germ of a function f : α → β at a filter l : Filter α is the equivalence class of f
with respect to the equivalence relation EventuallyEq l: f ≈ g means ∀ᶠ x in l, f x = g x.
Main definitions #
We define
Filter.Germ l βto be the space of germs of functionsα → βat a filterl : Filter α;- coercion from
α → βtoGerm l β:(f : Germ l β)is the germ off : α → βatl : Filter α; this coercion is declared asCoeTC; (const l c : Germ l β)is the germ of the constant functionfun x : α ↦ cat a filterl;- coercion from
βtoGerm l β:(↑c : Germ l β)is the germ of the constant functionfun x : α ↦ cat a filterl; this coercion is declared asCoeTC; map (F : β → γ) (f : Germ l β)to be the composition of a functionFand a germf;map₂ (F : β → γ → δ) (f : Germ l β) (g : Germ l γ)to be the germ offun x ↦ F (f x) (g x)atl;f.Tendsto lb: we say that a germf : Germ l βtends to a filterlbif its representatives tend tolbalongl;f.compTendsto g hgandf.compTendsto' g hg: givenf : Germ l βand a functiong : γ → α(resp., a germg : Germ lc α), ifgtends tolalonglc, then the compositionf ∘ gis a well-defined germ atlc;Germ.liftPred,Germ.liftRel: lift a predicate or a relation to the space of germs:(f : Germ l β).liftPred pmeans∀ᶠ x in l, p (f x), and similarly for a relation.
We also define map (F : β → γ) : Germ l β → Germ l γ sending each germ f to F ∘ f.
For each of the following structures we prove that if β has this structure, then so does
Germ l β:
- one-operation algebraic structures up to
CommGroup; MulZeroClass,Distrib,Semiring,CommSemiring,Ring,CommRing;MulAction,DistribMulAction,Module;Preorder,PartialOrder, andLatticestructures, as well asBoundedOrder;
Tags #
filter, germ
Setoid used to define the space of germs.
Equations
- l.germSetoid β = { r := l.EventuallyEq, iseqv := ⋯ }
Instances For
The space of germs of functions α → β at a filter l.
Equations
- l.Germ β = Quotient (l.germSetoid β)
Instances For
Setoid used to define the filter product. This is a dependent version of
Filter.germSetoid.
Equations
Instances For
The filter product (a : α) → ε a at a filter l. This is a dependent version of
Filter.Germ.
Equations
- l.Product ε = Quotient (l.productSetoid ε)
Instances For
Equations
- Filter.Product.coeTC = { coe := Quotient.mk' }
Equations
- Filter.Product.instInhabited = { default := Quotient.mk' fun (a : α) => default }
The germ corresponding to a global function.
Equations
Instances For
Equations
Equations
- Filter.Germ.coeTail = { coe := Filter.Germ.const }
Alias of Filter.Germ.coeTail.
Equations
Instances For
A germ P of functions α → β is constant w.r.t. l.
Equations
- P.IsConstant = Quotient.liftOn P (fun (f : α → β) => ∃ (b : β), f =ᶠ[l] fun (x : α) => b) ⋯
Instances For
If f : α → β is constant w.r.t. l and g : β → γ, then g ∘ f : α → γ also is.
Given a map F : (α → β) → (γ → δ) that sends functions eventually equal at l to functions
eventually equal at lc, returns a map from Germ l β to Germ lc δ.
Equations
- Filter.Germ.map' F hF = Quotient.map' F hF
Instances For
Given a germ f : Germ l β and a function F : (α → β) → γ sending eventually equal functions
to the same value, returns the value F takes on functions having germ f at l.
Equations
- f.liftOn F hF = Quotient.liftOn' f F hF
Instances For
Alias of the reverse direction of Filter.Germ.coe_eq.
Lift a function β → γ to a function Germ l β → Germ l γ.
Equations
- Filter.Germ.map op = Filter.Germ.map' (fun (x : α → β) => op ∘ x) ⋯
Instances For
Lift a binary function β → γ → δ to a function Germ l β → Germ l γ → Germ l δ.
Equations
- Filter.Germ.map₂ op = Quotient.map₂ (fun (f : α → β) (g : α → γ) (x : α) => op (f x) (g x)) ⋯
Instances For
A germ at l of maps from α to β tends to lb : Filter β if it is represented by a map
which tends to lb along l.
Equations
- f.Tendsto lb = f.liftOn (fun (f : α → β) => Filter.Tendsto f l lb) ⋯
Instances For
Alias of the reverse direction of Filter.Germ.coe_tendsto.
Given two germs f : Germ l β, and g : Germ lc α, where l : Filter α, if g tends to l,
then the composition f ∘ g is well-defined as a germ at lc.
Equations
- f.compTendsto' g hg = f.liftOn (fun (f : α → β) => Filter.Germ.map f g) ⋯
Instances For
Given a germ f : Germ l β and a function g : γ → α, where l : Filter α, if g tends
to l along lc : Filter γ, then the composition f ∘ g is well-defined as a germ at lc.
Equations
- f.compTendsto g hg = f.compTendsto' ↑g ⋯
Instances For
If a germ f : Germ l β is constant, where l : Filter α,
and a function g : γ → α tends to l along lc : Filter γ,
the germ of the composition f ∘ g is also constant.
Lift a relation r : β → γ → Prop to Germ l β → Germ l γ → Prop.
Equations
- Filter.Germ.LiftRel r f g = Quotient.liftOn₂' f g (fun (f : α → β) (g : α → γ) => ∀ᶠ (x : α) in l, r (f x) (g x)) ⋯
Instances For
Equations
- Filter.Germ.instMul = { mul := Filter.Germ.map₂ fun (x1 x2 : M) => x1 * x2 }
Equations
- Filter.Germ.instAdd = { add := Filter.Germ.map₂ fun (x1 x2 : M) => x1 + x2 }
Equations
- Filter.Germ.instSemigroup = { toMul := Filter.Germ.instMul, mul_assoc := ⋯ }
Equations
- Filter.Germ.instAddSemigroup = { toAdd := Filter.Germ.instAdd, add_assoc := ⋯ }
Equations
- Filter.Germ.instCommSemigroup = { toSemigroup := Filter.Germ.instSemigroup, mul_comm := ⋯ }
Equations
- Filter.Germ.instAddCommSemigroup = { toAddSemigroup := Filter.Germ.instAddSemigroup, add_comm := ⋯ }
Equations
- Filter.Germ.instLeftCancelSemigroup = { toSemigroup := Filter.Germ.instSemigroup, toIsLeftCancelMul := ⋯ }
Equations
- Filter.Germ.instAddLeftCancelSemigroup = { toAddSemigroup := Filter.Germ.instAddSemigroup, toIsLeftCancelAdd := ⋯ }
Equations
- Filter.Germ.instRightCancelSemigroup = { toSemigroup := Filter.Germ.instSemigroup, toIsRightCancelMul := ⋯ }
Equations
- Filter.Germ.instAddRightCancelSemigroup = { toAddSemigroup := Filter.Germ.instAddSemigroup, toIsRightCancelAdd := ⋯ }
Equations
- Filter.Germ.instMulOneClass = { toOne := Filter.Germ.instOne, toMul := Filter.Germ.instMul, one_mul := ⋯, mul_one := ⋯ }
Equations
- Filter.Germ.instAddZeroClass = { toZero := Filter.Germ.instZero, toAdd := Filter.Germ.instAdd, zero_add := ⋯, add_zero := ⋯ }
Equations
- Filter.Germ.instSMul = { smul := fun (n : M) => Filter.Germ.map fun (x : G) => n • x }
Equations
- Filter.Germ.instVAdd = { vadd := fun (n : M) => Filter.Germ.map fun (x : G) => n +ᵥ x }
Coercion from functions to germs as a monoid homomorphism.
Equations
- Filter.Germ.coeMulHom l = { toFun := Filter.Germ.ofFun, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Coercion from functions to germs as an additive monoid homomorphism.
Equations
- Filter.Germ.coeAddHom l = { toFun := Filter.Germ.ofFun, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equations
- Filter.Germ.instCommMonoid = { toMonoid := Filter.Germ.instMonoid, mul_comm := ⋯ }
Equations
- Filter.Germ.instAddCommMonoid = { toAddMonoid := Filter.Germ.instAddMonoid, add_comm := ⋯ }
Equations
- Filter.Germ.instAddMonoidWithOne = { toNatCast := Filter.Germ.instNatCast, toAddMonoid := Filter.Germ.instAddMonoid, toOne := Filter.Germ.instOne, natCast_zero := ⋯, natCast_succ := ⋯ }
Equations
- Filter.Germ.instAddCommMonoidWithOne = { toAddMonoidWithOne := Filter.Germ.instAddMonoidWithOne, add_comm := ⋯ }
Equations
- Filter.Germ.instInv = { inv := Filter.Germ.map Inv.inv }
Equations
- Filter.Germ.instNeg = { neg := Filter.Germ.map Neg.neg }
Equations
- Filter.Germ.instDiv = { div := Filter.Germ.map₂ fun (x1 x2 : M) => x1 / x2 }
Equations
- Filter.Germ.instSub = { sub := Filter.Germ.map₂ fun (x1 x2 : M) => x1 - x2 }
Equations
- Filter.Germ.instInvolutiveInv = { toInv := Filter.Germ.instInv, inv_inv := ⋯ }
Equations
- Filter.Germ.instInvolutiveNeg = { toNeg := Filter.Germ.instNeg, neg_neg := ⋯ }
Equations
- Filter.Germ.instHasDistribNeg = { toInvolutiveNeg := Filter.Germ.instInvolutiveNeg, neg_mul := ⋯, mul_neg := ⋯ }
Equations
- Filter.Germ.instInvOneClass = { toOne := Filter.Germ.instOne, toInv := Filter.Germ.instInv, inv_one := ⋯ }
Equations
- Filter.Germ.instNegZeroClass = { toZero := Filter.Germ.instZero, toNeg := Filter.Germ.instNeg, neg_zero := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instDivisionMonoid = { toDivInvMonoid := Filter.Germ.instDivInvMonoid, inv_inv := ⋯, mul_inv_rev := ⋯, inv_eq_of_mul := ⋯ }
Equations
- Filter.Germ.instSubtractionMonoid = { toSubNegMonoid := Filter.Germ.subNegMonoid, neg_neg := ⋯, neg_add_rev := ⋯, neg_eq_of_add := ⋯ }
Equations
- Filter.Germ.instGroup = { toDivInvMonoid := Filter.Germ.instDivInvMonoid, inv_mul_cancel := ⋯ }
Equations
- Filter.Germ.instAddGroup = { toSubNegMonoid := Filter.Germ.subNegMonoid, neg_add_cancel := ⋯ }
Equations
- Filter.Germ.instCommGroup = { toGroup := Filter.Germ.instGroup, mul_comm := ⋯ }
Equations
- Filter.Germ.instAddCommGroup = { toAddGroup := Filter.Germ.instAddGroup, add_comm := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instMulZeroClass = { toMul := Filter.Germ.instMul, toZero := Filter.Germ.instZero, zero_mul := ⋯, mul_zero := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instMonoidWithZero = { toMonoid := Filter.Germ.instMonoid, toZero := Filter.Germ.instMulZeroClass.toZero, zero_mul := ⋯, mul_zero := ⋯ }
Equations
- Filter.Germ.instDistrib = { toMul := Filter.Germ.instMul, toAdd := Filter.Germ.instAdd, left_distrib := ⋯, right_distrib := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instNonUnitalSemiring = { toNonUnitalNonAssocSemiring := Filter.Germ.instNonUnitalNonAssocSemiring, mul_assoc := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instNonUnitalRing = { toNonUnitalNonAssocRing := Filter.Germ.instNonUnitalNonAssocRing, mul_assoc := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.instNonUnitalCommSemiring = { toNonUnitalSemiring := Filter.Germ.instNonUnitalSemiring, mul_comm := ⋯ }
Equations
- Filter.Germ.instCommSemiring = { toSemiring := Filter.Germ.instSemiring, mul_comm := ⋯ }
Equations
- Filter.Germ.instNonUnitalCommRing = { toNonUnitalRing := Filter.Germ.instNonUnitalRing, mul_comm := ⋯ }
Equations
- Filter.Germ.instCommRing = { toRing := Filter.Germ.instRing, mul_comm := ⋯ }
Coercion (α → R) → Germ l R as a RingHom.
Equations
- Filter.Germ.coeRingHom l = { toFun := Filter.Germ.ofFun, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equations
- Filter.Germ.instMulAction = { toSMul := Filter.Germ.instSMul, one_smul := ⋯, mul_smul := ⋯ }
Equations
- Filter.Germ.instAddAction = { toVAdd := Filter.Germ.instVAdd, zero_vadd := ⋯, add_vadd := ⋯ }
Equations
- Filter.Germ.instDistribMulAction = { toMulAction := Filter.Germ.instMulAction, smul_zero := ⋯, smul_add := ⋯ }
Equations
- Filter.Germ.instDistribMulAction' = { toMulAction := Filter.Germ.instMulAction', smul_zero := ⋯, smul_add := ⋯ }
Equations
- Filter.Germ.instModule = { toDistribMulAction := Filter.Germ.instDistribMulAction, add_smul := ⋯, zero_smul := ⋯ }
Equations
- Filter.Germ.instModule' = { toDistribMulAction := Filter.Germ.instDistribMulAction', add_smul := ⋯, zero_smul := ⋯ }
Equations
- Filter.Germ.instLE = { le := Filter.Germ.LiftRel fun (x1 x2 : β) => x1 ≤ x2 }
Equations
- Filter.Germ.instPartialOrder = { toPreorder := Filter.Germ.instPreorder, le_antisymm := ⋯ }
Equations
- Filter.Germ.instOrderBot = { toBot := Filter.Germ.instBot, bot_le := ⋯ }
Equations
- Filter.Germ.instOrderTop = { toTop := Filter.Germ.instTop, le_top := ⋯ }
Equations
- Filter.Germ.instBoundedOrder = { toOrderTop := Filter.Germ.instOrderTop, toOrderBot := Filter.Germ.instOrderBot }
Equations
- Filter.Germ.instSup = { max := Filter.Germ.map₂ fun (x1 x2 : β) => x1 ⊔ x2 }
Equations
- Filter.Germ.instInf = { min := Filter.Germ.map₂ fun (x1 x2 : β) => x1 ⊓ x2 }
Equations
- Filter.Germ.instSemilatticeSup = { toPartialOrder := Filter.Germ.instPartialOrder, sup := max, le_sup_left := ⋯, le_sup_right := ⋯, sup_le := ⋯ }
Equations
- Filter.Germ.instSemilatticeInf = { toPartialOrder := Filter.Germ.instPartialOrder, inf := min, inf_le_left := ⋯, inf_le_right := ⋯, le_inf := ⋯ }
Equations
- Filter.Germ.instLattice = { toSemilatticeSup := Filter.Germ.instSemilatticeSup, inf := SemilatticeInf.inf, inf_le_left := ⋯, inf_le_right := ⋯, le_inf := ⋯ }
Equations
- Filter.Germ.instDistribLattice = { toLattice := Filter.Germ.instLattice, le_sup_inf := ⋯ }