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 : α ↦ c
at a filterl
;- coercion from
β
toGerm l β
:(↑c : Germ l β)
is the germ of the constant functionfun x : α ↦ c
at a filterl
; this coercion is declared asCoeTC
; map (F : β → γ) (f : Germ l β)
to be the composition of a functionF
and 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 filterlb
if its representatives tend tolb
alongl
;f.compTendsto g hg
andf.compTendsto' g hg
: givenf : Germ l β
and a functiong : γ → α
(resp., a germg : Germ lc α
), ifg
tends tol
alonglc
, then the compositionf ∘ g
is a well-defined germ atlc
;Germ.liftPred
,Germ.liftRel
: lift a predicate or a relation to the space of germs:(f : Germ l β).liftPred p
means∀ᶠ 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
, andLattice
structures, as well asBoundedOrder
;OrderedCancelCommMonoid
andOrderedCancelAddCommMonoid
.
Tags #
filter, germ
Setoid used to define the space of germs.
Equations
- Filter.germSetoid l β = { r := Filter.EventuallyEq l, iseqv := ⋯ }
Instances For
The space of germs of functions α → β
at a filter l
.
Equations
- Filter.Germ l β = Quotient (Filter.germSetoid l β)
Instances For
Setoid used to define the filter product. This is a dependent version of
Filter.germSetoid
.
Equations
- Filter.productSetoid l ε = { r := fun (f g : (a : α) → ε a) => ∀ᶠ (a : α) in l, f a = g a, iseqv := ⋯ }
Instances For
The filter product (a : α) → ε a
at a filter l
. This is a dependent version of
Filter.Germ
.
Equations
- Filter.Product l ε = Quotient (Filter.productSetoid l ε)
Instances For
Equations
- Filter.Product.coeTC = { coe := Quotient.mk' }
Equations
- Filter.Product.inhabited = { default := Quotient.mk' fun (a : α) => default }
Equations
- Filter.Germ.ofFun = Quotient.mk'
Instances For
Equations
- Filter.Germ.instCoeTCForAllGerm = { coe := Filter.Germ.ofFun }
Equations
- ↑b = ↑fun (x : α) => b
Instances For
Equations
- Filter.Germ.coeTC = { coe := Filter.Germ.const }
A germ P
of functions α → β
is constant w.r.t. l
.
Equations
- Filter.Germ.IsConstant P = 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
- Filter.Germ.liftOn f 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
- Filter.Germ.Tendsto f lb = Filter.Germ.liftOn f (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
- Filter.Germ.compTendsto' f g hg = Filter.Germ.liftOn f (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
- Filter.Germ.compTendsto f g hg = Filter.Germ.compTendsto' f ↑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 predicate on β
to Germ l β
.
Equations
- Filter.Germ.LiftPred p f = Filter.Germ.liftOn f (fun (f : α → β) => ∀ᶠ (x : α) in l, p (f x)) ⋯
Instances For
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.inhabited = { default := ↑default }
Equations
- Filter.Germ.add = { add := Filter.Germ.map₂ fun (x x_1 : M) => x + x_1 }
Equations
- Filter.Germ.mul = { mul := Filter.Germ.map₂ fun (x x_1 : M) => x * x_1 }
Equations
- Filter.Germ.zero = { zero := ↑0 }
Equations
- Filter.Germ.one = { one := ↑1 }
Equations
- Filter.Germ.addSemigroup = AddSemigroup.mk ⋯
Equations
- Filter.Germ.semigroup = Semigroup.mk ⋯
Equations
- Filter.Germ.addCommSemigroup = AddCommSemigroup.mk ⋯
Equations
- Filter.Germ.commSemigroup = CommSemigroup.mk ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Filter.Germ.addLeftCancelSemigroup = let __src := Filter.Germ.addSemigroup; AddLeftCancelSemigroup.mk ⋯
Equations
- Filter.Germ.leftCancelSemigroup = let __src := Filter.Germ.semigroup; LeftCancelSemigroup.mk ⋯
Equations
- Filter.Germ.addRightCancelSemigroup = let __src := Filter.Germ.addSemigroup; AddRightCancelSemigroup.mk ⋯
Equations
- Filter.Germ.rightCancelSemigroup = let __src := Filter.Germ.semigroup; RightCancelSemigroup.mk ⋯
Equations
- Filter.Germ.addZeroClass = AddZeroClass.mk ⋯ ⋯
Equations
- Filter.Germ.mulOneClass = MulOneClass.mk ⋯ ⋯
Equations
- Filter.Germ.vadd = { vadd := fun (n : M) => Filter.Germ.map fun (x : G) => n +ᵥ x }
Equations
- Filter.Germ.smul = { smul := fun (n : M) => Filter.Germ.map fun (x : G) => n • x }
Equations
- Filter.Germ.pow = { pow := fun (f : Filter.Germ l G) (n : M) => Filter.Germ.map (fun (x : G) => x ^ n) f }
Equations
- Filter.Germ.addMonoid = let __src := Function.Surjective.addMonoid Filter.Germ.ofFun ⋯ ⋯ ⋯ ⋯; AddMonoid.mk ⋯ ⋯ (fun (n : ℕ) (a : Filter.Germ l M) => n • a) ⋯ ⋯
Equations
- Filter.Germ.monoid = let __src := Function.Surjective.monoid Filter.Germ.ofFun ⋯ ⋯ ⋯ ⋯; Monoid.mk ⋯ ⋯ (fun (n : ℕ) (a : Filter.Germ l M) => a ^ n) ⋯ ⋯
Coercion from functions to germs as an additive monoid homomorphism.
Equations
- Filter.Germ.coeAddHom l = { toZeroHom := { toFun := Filter.Germ.ofFun, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Coercion from functions to germs as a monoid homomorphism.
Equations
- Filter.Germ.coeMulHom l = { toOneHom := { toFun := Filter.Germ.ofFun, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Equations
- Filter.Germ.addCommMonoid = AddCommMonoid.mk ⋯
Equations
- Filter.Germ.commMonoid = CommMonoid.mk ⋯
Equations
- Filter.Germ.addMonoidWithOne = let __src := Filter.Germ.natCast; let __src_1 := Filter.Germ.addMonoid; let __src_2 := Filter.Germ.one; AddMonoidWithOne.mk ⋯ ⋯
Equations
- Filter.Germ.addCommMonoidWithOne = AddCommMonoidWithOne.mk ⋯
Equations
- Filter.Germ.neg = { neg := Filter.Germ.map Neg.neg }
Equations
- Filter.Germ.inv = { inv := Filter.Germ.map Inv.inv }
Equations
- Filter.Germ.sub = { sub := Filter.Germ.map₂ fun (x x_1 : M) => x - x_1 }
Equations
- Filter.Germ.div = { div := Filter.Germ.map₂ fun (x x_1 : M) => x / x_1 }
Equations
- Filter.Germ.involutiveNeg = InvolutiveNeg.mk ⋯
Equations
- Filter.Germ.involutiveInv = InvolutiveInv.mk ⋯
Equations
- Filter.Germ.hasDistribNeg = HasDistribNeg.mk ⋯ ⋯
Equations
- Filter.Germ.negZeroClass = NegZeroClass.mk ⋯
Equations
- Filter.Germ.invOneClass = InvOneClass.mk ⋯
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.divisionAddMonoid = SubtractionMonoid.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.divisionMonoid = DivisionMonoid.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.addGroup = AddGroup.mk ⋯
Equations
- Filter.Germ.addCommGroup = AddCommGroup.mk ⋯
Equations
- Filter.Germ.commGroup = CommGroup.mk ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- ⋯ = ⋯
Equations
- Filter.Germ.mulZeroClass = MulZeroClass.mk ⋯ ⋯
Equations
- Filter.Germ.mulZeroOneClass = let __src := Filter.Germ.mulZeroClass; let __src_1 := Filter.Germ.mulOneClass; MulZeroOneClass.mk ⋯ ⋯
Equations
- Filter.Germ.monoidWithZero = let __src := Filter.Germ.monoid; let __src_1 := Filter.Germ.mulZeroClass; MonoidWithZero.mk ⋯ ⋯
Equations
- Filter.Germ.distrib = Distrib.mk ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.nonUnitalSemiring = NonUnitalSemiring.mk ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- Filter.Germ.nonUnitalNonAssocRing = let __src := Filter.Germ.addCommGroup; let __src_1 := Filter.Germ.nonUnitalNonAssocSemiring; NonUnitalNonAssocRing.mk ⋯ ⋯ ⋯ ⋯
Equations
- Filter.Germ.nonUnitalRing = NonUnitalRing.mk ⋯
Equations
- Filter.Germ.nonAssocRing = let __src := Filter.Germ.nonUnitalNonAssocRing; let __src_1 := Filter.Germ.nonAssocSemiring; let __src_2 := Filter.Germ.addGroupWithOne; NonAssocRing.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Filter.Germ.semiring = let __src := Filter.Germ.nonUnitalSemiring; let __src_1 := Filter.Germ.nonAssocSemiring; let __src_2 := Filter.Germ.monoidWithZero; Semiring.mk ⋯ ⋯ ⋯ ⋯ Monoid.npow ⋯ ⋯
Equations
- Filter.Germ.nonUnitalCommSemiring = NonUnitalCommSemiring.mk ⋯
Equations
- Filter.Germ.commSemiring = CommSemiring.mk ⋯
Equations
- Filter.Germ.nonUnitalCommRing = let __src := Filter.Germ.nonUnitalRing; let __src_1 := Filter.Germ.commSemigroup; NonUnitalCommRing.mk ⋯
Equations
- Filter.Germ.commRing = CommRing.mk ⋯
Coercion (α → R) → Germ l R
as a RingHom
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Filter.Germ.instVAdd' = { vadd := Filter.Germ.map₂ fun (x : M) (x_1 : β) => x +ᵥ x_1 }
Equations
- Filter.Germ.instSMul' = { smul := Filter.Germ.map₂ fun (x : M) (x_1 : β) => x • x_1 }
Equations
- Filter.Germ.addAction = AddAction.mk ⋯ ⋯
Equations
- Filter.Germ.mulAction = MulAction.mk ⋯ ⋯
Equations
- Filter.Germ.addAction' = AddAction.mk ⋯ ⋯
Equations
- Filter.Germ.mulAction' = MulAction.mk ⋯ ⋯
Equations
- Filter.Germ.distribMulAction = DistribMulAction.mk ⋯ ⋯
Equations
- Filter.Germ.distribMulAction' = DistribMulAction.mk ⋯ ⋯
Equations
- Filter.Germ.le = { le := Filter.Germ.LiftRel fun (x x_1 : β) => x ≤ x_1 }
Equations
- Filter.Germ.preorder = Preorder.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.partialOrder = let __src := Filter.Germ.preorder; PartialOrder.mk ⋯
Equations
- Filter.Germ.orderBot = OrderBot.mk ⋯
Equations
- Filter.Germ.orderTop = OrderTop.mk ⋯
Equations
- Filter.Germ.instBoundedOrderGermLe = let __src := Filter.Germ.orderBot; let __src_1 := Filter.Germ.orderTop; BoundedOrder.mk
Equations
- Filter.Germ.sup = { sup := Filter.Germ.map₂ fun (x x_1 : β) => x ⊔ x_1 }
Equations
- Filter.Germ.inf = { inf := Filter.Germ.map₂ fun (x x_1 : β) => x ⊓ x_1 }
Equations
- Filter.Germ.semilatticeSup = let __src := Filter.Germ.partialOrder; SemilatticeSup.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.semilatticeInf = let __src := Filter.Germ.partialOrder; SemilatticeInf.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.lattice = let __src := Filter.Germ.semilatticeSup; let __src_1 := Filter.Germ.semilatticeInf; Lattice.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.distribLattice = let __src := Filter.Germ.semilatticeSup; let __src_1 := Filter.Germ.semilatticeInf; DistribLattice.mk ⋯
Equations
- Filter.Germ.orderedAddCommMonoid = let __src := Filter.Germ.partialOrder; let __src_1 := Filter.Germ.addCommMonoid; OrderedAddCommMonoid.mk ⋯
Equations
- Filter.Germ.orderedCommMonoid = let __src := Filter.Germ.partialOrder; let __src_1 := Filter.Germ.commMonoid; OrderedCommMonoid.mk ⋯
Equations
- Filter.Germ.orderedAddCancelCommMonoid = let __src := Filter.Germ.orderedAddCommMonoid; OrderedCancelAddCommMonoid.mk ⋯
Equations
- Filter.Germ.orderedCancelCommMonoid = let __src := Filter.Germ.orderedCommMonoid; OrderedCancelCommMonoid.mk ⋯
Equations
- Filter.Germ.orderedAddCommGroup = let __src := Filter.Germ.orderedAddCancelCommMonoid; let __src_1 := Filter.Germ.addCommGroup; OrderedAddCommGroup.mk ⋯
Equations
- Filter.Germ.orderedCommGroup = let __src := Filter.Germ.orderedCancelCommMonoid; let __src_1 := Filter.Germ.commGroup; OrderedCommGroup.mk ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Filter.Germ.CanonicallyOrderedAddCommMonoid = let __src := Filter.Germ.orderedAddCommMonoid; let __src_1 := Filter.Germ.orderBot; let __src_2 := ⋯; CanonicallyOrderedAddCommMonoid.mk ⋯ ⋯
Equations
- Filter.Germ.CanonicallyOrderedCommMonoid = let __src := Filter.Germ.orderedCommMonoid; let __src_1 := Filter.Germ.orderBot; let __src_2 := ⋯; CanonicallyOrderedCommMonoid.mk ⋯ ⋯
Equations
- Filter.Germ.orderedSemiring = let __src := Filter.Germ.semiring; let __src_1 := Filter.Germ.orderedAddCommMonoid; OrderedSemiring.mk ⋯ ⋯ ⋯ ⋯
Equations
- Filter.Germ.orderedCommSemiring = let __src := Filter.Germ.orderedSemiring; let __src_1 := Filter.Germ.commSemiring; OrderedCommSemiring.mk ⋯
Equations
- Filter.Germ.orderedRing = let __src := Filter.Germ.ring; let __src_1 := Filter.Germ.orderedAddCommGroup; OrderedRing.mk ⋯ ⋯ ⋯
Equations
- Filter.Germ.orderedCommRing = let __src := Filter.Germ.orderedRing; let __src_1 := Filter.Germ.orderedCommSemiring; OrderedCommRing.mk ⋯