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 eventually_eq l: f ≈ g means ∀ᶠ x in l, f x = g x.
Main definitions
We define
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 ashas_coe_t, so it does not require an explicit up arrow↑; - coercion from
βtogerm l β:(↑c : germ l β)is the germ of the constant functionλ x:α, cat a filterl; this coercion is declared ashas_lift_t, so it requires an explicit up arrow↑, see TPiL for details. 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 ofλ 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.comp_tendsto g hgandf.comp_tendsto' 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.lift_pred,germ.lift_rel: lift a predicate or a relation to the space of germs:(f : germ l β).lift_pred pmeans∀ᶠ x in l, p (f x), and similarly for a relation. We also definemap (F : β → γ) : germ l β → germ l γsending each germftoF ∘ 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
comm_group; mul_zero_class,distrib,semiring,comm_semiring,ring,comm_ring;mul_action,distrib_mul_action,semimodule;preorder,partial_order, andlatticestructures up tobounded_lattice;ordered_cancel_comm_monoidandordered_cancel_add_comm_monoid.
Tags
filter, germ
Setoid used to define the space of germs.
Equations
- l.germ_setoid β = {r := l.eventually_eq, iseqv := _}
The space of germs of functions α → β at a filter l.
Equations
- l.germ β = quotient (l.germ_setoid β)
Equations
- filter.germ.has_coe_t = {coe := quotient.mk' (l.germ_setoid β)}
Equations
- filter.germ.has_lift_t = {lift := λ (c : β), ↑(λ (x : α), c)}
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
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.lift_on F hF = quotient.lift_on' f F hF
Lift a function β → γ to a function germ l β → germ l γ.
Equations
- filter.germ.map op = filter.germ.map' (function.comp op) _
Lift a binary function β → γ → δ to a function germ l β → germ l γ → germ l δ.
Equations
- filter.germ.map₂ op = quotient.map₂' (λ (f : α → β) (g : α → γ) (x : α), op (f x) (g x)) _
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.lift_on (λ (f : α → β), filter.tendsto f l lb) _
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.comp_tendsto' g hg = f.lift_on (λ (f : α → β), filter.germ.map f g) _
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.comp_tendsto g hg = f.comp_tendsto' ↑g _
Lift a predicate on β to germ l β.
Equations
- filter.germ.lift_pred p f = f.lift_on (λ (f : α → β), ∀ᶠ (x : α) in l, p (f x)) _
Lift a relation r : β → γ → Prop to germ l β → germ l γ → Prop.
Equations
- filter.germ.lift_rel r f g = quotient.lift_on₂' f g (λ (f : α → β) (g : α → γ), ∀ᶠ (x : α) in l, r (f x) (g x)) _
Equations
Equations
Equations
Equations
- filter.germ.comm_semigroup = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, mul_comm := _}
Equations
Equations
Equations
- filter.germ.monoid = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _}
coercion from functions to germs as an additive monoid homomorphism.
coercion from functions to germs as a monoid homomorphism.
Equations
- filter.germ.coe_mul_hom l = {to_fun := coe coe_to_lift, map_one' := _, map_mul' := _}
Equations
- filter.germ.comm_monoid = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, mul_comm := _}
Equations
Equations
- filter.germ.group = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, inv := has_inv.inv filter.germ.has_inv, mul_left_inv := _}
Equations
- filter.germ.comm_group = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, inv := has_inv.inv filter.germ.has_inv, mul_left_inv := _, mul_comm := _}
Equations
- filter.germ.nontrivial = _
- _ = _
Equations
- filter.germ.mul_zero_class = {mul := has_mul.mul filter.germ.has_mul, zero := 0, zero_mul := _, mul_zero := _}
Equations
- filter.germ.distrib = {mul := has_mul.mul filter.germ.has_mul, add := has_add.add filter.germ.has_add, left_distrib := _, right_distrib := _}
Equations
- filter.germ.semiring = {add := add_comm_monoid.add filter.germ.add_comm_monoid, add_assoc := _, zero := add_comm_monoid.zero filter.germ.add_comm_monoid, zero_add := _, add_zero := _, add_comm := _, mul := monoid.mul filter.germ.monoid, mul_assoc := _, one := monoid.one filter.germ.monoid, one_mul := _, mul_one := _, zero_mul := _, mul_zero := _, left_distrib := _, right_distrib := _}
Equations
- filter.germ.ring = {add := add_comm_group.add filter.germ.add_comm_group, add_assoc := _, zero := add_comm_group.zero filter.germ.add_comm_group, zero_add := _, add_zero := _, neg := add_comm_group.neg filter.germ.add_comm_group, add_left_neg := _, add_comm := _, mul := monoid.mul filter.germ.monoid, mul_assoc := _, one := monoid.one filter.germ.monoid, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _}
Equations
- filter.germ.comm_semiring = {add := semiring.add filter.germ.semiring, add_assoc := _, zero := semiring.zero filter.germ.semiring, zero_add := _, add_zero := _, add_comm := _, mul := semiring.mul filter.germ.semiring, mul_assoc := _, one := semiring.one filter.germ.semiring, one_mul := _, mul_one := _, zero_mul := _, mul_zero := _, left_distrib := _, right_distrib := _, mul_comm := _}
Equations
- filter.germ.comm_ring = {add := ring.add filter.germ.ring, add_assoc := _, zero := ring.zero filter.germ.ring, zero_add := _, add_zero := _, neg := ring.neg filter.germ.ring, add_left_neg := _, add_comm := _, mul := ring.mul filter.germ.ring, mul_assoc := _, one := ring.one filter.germ.ring, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, mul_comm := _}
Equations
- filter.germ.has_scalar = {smul := λ (c : M), filter.germ.map (has_scalar.smul c)}
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
- filter.germ.has_le = {le := λ (f g : l.germ β), quotient.lift_on₂' f g l.eventually_le filter.germ.has_le._proof_1}
Equations
- filter.germ.partial_order = {le := has_le.le filter.germ.has_le, lt := preorder.lt filter.germ.preorder, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _}
Equations
- filter.germ.order_bot = {bot := ⊥, le := has_le.le filter.germ.has_le, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _}
Equations
- filter.germ.order_top = {top := ⊤, le := has_le.le filter.germ.has_le, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_top := _}
Equations
Equations
Equations
- filter.germ.semilattice_sup = {sup := has_sup.sup filter.germ.has_sup, le := partial_order.le filter.germ.partial_order, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _}
Equations
- filter.germ.semilattice_inf = {inf := has_inf.inf filter.germ.has_inf, le := partial_order.le filter.germ.partial_order, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- filter.germ.semilattice_inf_bot = {bot := order_bot.bot filter.germ.order_bot, le := semilattice_inf.le filter.germ.semilattice_inf, lt := semilattice_inf.lt filter.germ.semilattice_inf, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _, inf := semilattice_inf.inf filter.germ.semilattice_inf, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- filter.germ.semilattice_sup_bot = {bot := order_bot.bot filter.germ.order_bot, le := semilattice_sup.le filter.germ.semilattice_sup, lt := semilattice_sup.lt filter.germ.semilattice_sup, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, bot_le := _, sup := semilattice_sup.sup filter.germ.semilattice_sup, le_sup_left := _, le_sup_right := _, sup_le := _}
Equations
- filter.germ.semilattice_inf_top = {top := order_top.top filter.germ.order_top, le := semilattice_inf.le filter.germ.semilattice_inf, lt := semilattice_inf.lt filter.germ.semilattice_inf, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_top := _, inf := semilattice_inf.inf filter.germ.semilattice_inf, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- filter.germ.semilattice_sup_top = {top := order_top.top filter.germ.order_top, le := semilattice_sup.le filter.germ.semilattice_sup, lt := semilattice_sup.lt filter.germ.semilattice_sup, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_top := _, sup := semilattice_sup.sup filter.germ.semilattice_sup, le_sup_left := _, le_sup_right := _, sup_le := _}
Equations
- filter.germ.lattice = {sup := semilattice_sup.sup filter.germ.semilattice_sup, le := semilattice_sup.le filter.germ.semilattice_sup, lt := semilattice_sup.lt filter.germ.semilattice_sup, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := semilattice_inf.inf filter.germ.semilattice_inf, inf_le_left := _, inf_le_right := _, le_inf := _}
Equations
- filter.germ.bounded_lattice = {sup := lattice.sup filter.germ.lattice, le := lattice.le filter.germ.lattice, lt := lattice.lt filter.germ.lattice, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf filter.germ.lattice, inf_le_left := _, inf_le_right := _, le_inf := _, top := order_top.top filter.germ.order_top, le_top := _, bot := order_bot.bot filter.germ.order_bot, bot_le := _}
Equations
- filter.germ.ordered_cancel_comm_monoid = {mul := comm_monoid.mul filter.germ.comm_monoid, mul_assoc := _, one := comm_monoid.one filter.germ.comm_monoid, one_mul := _, mul_one := _, mul_comm := _, mul_left_cancel := _, mul_right_cancel := _, le := partial_order.le filter.germ.partial_order, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, mul_le_mul_left := _, le_of_mul_le_mul_left := _}
Equations
- filter.germ.ordered_comm_group = {mul := comm_group.mul filter.germ.comm_group, mul_assoc := _, one := comm_group.one filter.germ.comm_group, one_mul := _, mul_one := _, inv := comm_group.inv filter.germ.comm_group, mul_left_inv := _, mul_comm := _, le := partial_order.le filter.germ.partial_order, lt := partial_order.lt filter.germ.partial_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, mul_le_mul_left := _}