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:α, c
at 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 functionF
and 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 filterlb
if its representatives tend tolb
alongl
;f.comp_tendsto g hg
andf.comp_tendsto' 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.lift_pred
,germ.lift_rel
: lift a predicate or a relation to the space of germs:(f : germ l β).lift_pred p
means∀ᶠ x in l, p (f x)
, and similarly for a relation. We also definemap (F : β → γ) : germ l β → germ l γ
sending each germf
toF ∘ 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
, andlattice
structures up tobounded_lattice
;ordered_cancel_comm_monoid
andordered_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 := _}