Germ of a function at a filter #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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][TPiL_coe] 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. [TPiL_coe]: https://leanprover.github.io/theorem_proving_in_lean/type_classes.html#coercions-using-type-classes
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
comm_group
; mul_zero_class
,distrib
,semiring
,comm_semiring
,ring
,comm_ring
;mul_action
,distrib_mul_action
,module
;preorder
,partial_order
, andlattice
structures, as well asbounded_order
;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 β)
Instances for filter.germ
- filter.germ.has_coe_t
- filter.germ.has_lift_t
- filter.germ.inhabited
- filter.germ.has_mul
- filter.germ.has_add
- filter.germ.has_one
- filter.germ.has_zero
- filter.germ.semigroup
- filter.germ.add_semigroup
- filter.germ.comm_semigroup
- filter.germ.add_comm_semigroup
- filter.germ.left_cancel_semigroup
- filter.germ.add_left_cancel_semigroup
- filter.germ.right_cancel_semigroup
- filter.germ.add_right_cancel_semigroup
- filter.germ.has_vadd
- filter.germ.has_smul
- filter.germ.has_pow
- filter.germ.monoid
- filter.germ.add_monoid
- filter.germ.comm_monoid
- filter.germ.add_comm_monoid
- filter.germ.add_monoid_with_one
- filter.germ.has_inv
- filter.germ.has_neg
- filter.germ.has_div
- filter.germ.has_sub
- filter.germ.div_inv_monoid
- filter.germ.sub_neg_monoid
- filter.germ.group
- filter.germ.add_group
- filter.germ.comm_group
- filter.germ.add_comm_group
- filter.germ.nontrivial
- filter.germ.mul_zero_class
- filter.germ.distrib
- filter.germ.semiring
- filter.germ.ring
- filter.germ.comm_semiring
- filter.germ.comm_ring
- filter.germ.has_smul'
- filter.germ.has_vadd'
- filter.germ.mul_action
- filter.germ.add_action
- filter.germ.mul_action'
- filter.germ.add_action'
- filter.germ.distrib_mul_action
- filter.germ.distrib_mul_action'
- filter.germ.module
- filter.germ.module'
- filter.germ.has_le
- filter.germ.preorder
- filter.germ.partial_order
- filter.germ.has_bot
- filter.germ.has_top
- filter.germ.order_bot
- filter.germ.order_top
- filter.germ.bounded_order
- filter.germ.division_semiring
- filter.germ.division_ring
- filter.germ.semifield
- filter.germ.field
- filter.germ.has_sup
- filter.germ.has_inf
- filter.germ.semilattice_sup
- filter.germ.semilattice_inf
- filter.germ.lattice
- filter.germ.distrib_lattice
- filter.germ.has_le.le.is_total
- filter.germ.linear_order
- filter.germ.ordered_comm_monoid
- filter.germ.ordered_add_comm_monoid
- filter.germ.ordered_cancel_comm_monoid
- filter.germ.ordered_cancel_add_comm_monoid
- filter.germ.ordered_comm_group
- filter.germ.ordered_add_comm_group
- filter.germ.linear_ordered_comm_group
- filter.germ.linear_ordered_add_comm_group
- filter.germ.ordered_semiring
- filter.germ.ordered_comm_semiring
- filter.germ.ordered_ring
- filter.germ.ordered_comm_ring
- filter.germ.strict_ordered_semiring
- filter.germ.strict_ordered_comm_semiring
- filter.germ.strict_ordered_ring
- filter.germ.strict_ordered_comm_ring
- filter.germ.linear_ordered_ring
- filter.germ.linear_ordered_field
- filter.germ.linear_ordered_comm_ring
Setoid used to define the filter product. This is a dependent version of
filter.germ_setoid
.
Equations
Instances for filter.product_setoid
The filter product Π (a : α), ε a
at a filter l
. This is a dependent version of
filter.germ
.
Equations
- l.product ε = quotient (l.product_setoid ε)
Equations
- filter.product.has_coe_t = {coe := quotient.mk' (l.product_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) _
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.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 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.semigroup = function.surjective.semigroup coe filter.germ.semigroup._proof_1 filter.germ.semigroup._proof_2
Equations
- filter.germ.add_semigroup = function.surjective.add_semigroup coe filter.germ.add_semigroup._proof_1 filter.germ.add_semigroup._proof_2
Equations
- filter.germ.comm_semigroup = function.surjective.comm_semigroup coe filter.germ.comm_semigroup._proof_1 filter.germ.comm_semigroup._proof_2
Equations
- filter.germ.add_comm_semigroup = function.surjective.add_comm_semigroup coe filter.germ.add_comm_semigroup._proof_1 filter.germ.add_comm_semigroup._proof_2
Equations
Equations
Equations
Equations
Equations
- filter.germ.has_vadd = {vadd := λ (n : M), filter.germ.map (has_vadd.vadd n)}
Equations
- filter.germ.has_smul = {smul := λ (n : M), filter.germ.map (has_smul.smul n)}
Equations
- filter.germ.add_monoid = function.surjective.add_monoid coe filter.germ.add_monoid._proof_1 filter.germ.add_monoid._proof_2 filter.germ.add_monoid._proof_3 filter.germ.add_monoid._proof_4
Equations
- filter.germ.monoid = function.surjective.monoid coe filter.germ.monoid._proof_1 filter.germ.monoid._proof_2 filter.germ.monoid._proof_3 filter.germ.monoid._proof_4
Coercion from functions to germs as an additive monoid homomorphism.
Equations
- filter.germ.coe_add_hom l = {to_fun := coe coe_to_lift, map_zero' := _, map_add' := _}
Equations
- filter.germ.comm_monoid = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, npow := monoid.npow filter.germ.monoid, npow_zero' := _, npow_succ' := _, mul_comm := _}
Equations
- filter.germ.add_comm_monoid = {add := has_add.add filter.germ.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul filter.germ.add_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
Equations
- filter.germ.add_monoid_with_one = {nat_cast := λ (n : ℕ), ↑↑n, add := add_monoid.add filter.germ.add_monoid, add_assoc := _, zero := add_monoid.zero filter.germ.add_monoid, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul filter.germ.add_monoid, nsmul_zero' := _, nsmul_succ' := _, one := 1, nat_cast_zero := _, nat_cast_succ := _}
Equations
Equations
Equations
Equations
Equations
- filter.germ.sub_neg_monoid = function.surjective.sub_neg_monoid coe filter.germ.sub_neg_monoid._proof_1 filter.germ.sub_neg_monoid._proof_2 filter.germ.sub_neg_monoid._proof_3 filter.germ.sub_neg_monoid._proof_4 filter.germ.sub_neg_monoid._proof_5 filter.germ.sub_neg_monoid._proof_6 filter.germ.sub_neg_monoid._proof_7
Equations
- filter.germ.div_inv_monoid = function.surjective.div_inv_monoid coe filter.germ.div_inv_monoid._proof_1 filter.germ.div_inv_monoid._proof_2 filter.germ.div_inv_monoid._proof_3 filter.germ.div_inv_monoid._proof_4 filter.germ.div_inv_monoid._proof_5 filter.germ.div_inv_monoid._proof_6 filter.germ.div_inv_monoid._proof_7
Equations
- filter.germ.group = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, npow := div_inv_monoid.npow filter.germ.div_inv_monoid, npow_zero' := _, npow_succ' := _, inv := div_inv_monoid.inv filter.germ.div_inv_monoid, div := div_inv_monoid.div filter.germ.div_inv_monoid, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow filter.germ.div_inv_monoid, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
Equations
- filter.germ.add_group = {add := has_add.add filter.germ.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := sub_neg_monoid.nsmul filter.germ.sub_neg_monoid, nsmul_zero' := _, nsmul_succ' := _, neg := sub_neg_monoid.neg filter.germ.sub_neg_monoid, sub := sub_neg_monoid.sub filter.germ.sub_neg_monoid, sub_eq_add_neg := _, zsmul := sub_neg_monoid.zsmul filter.germ.sub_neg_monoid, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _}
Equations
- filter.germ.add_comm_group = {add := has_add.add filter.germ.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := add_group.nsmul filter.germ.add_group, nsmul_zero' := _, nsmul_succ' := _, neg := has_neg.neg filter.germ.has_neg, sub := add_group.sub filter.germ.add_group, sub_eq_add_neg := _, zsmul := add_group.zsmul filter.germ.add_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
Equations
- filter.germ.comm_group = {mul := has_mul.mul filter.germ.has_mul, mul_assoc := _, one := 1, one_mul := _, mul_one := _, npow := group.npow filter.germ.group, npow_zero' := _, npow_succ' := _, inv := has_inv.inv filter.germ.has_inv, div := group.div filter.germ.group, div_eq_mul_inv := _, zpow := group.zpow filter.germ.group, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _, mul_comm := _}
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 := _, nsmul := add_comm_monoid.nsmul filter.germ.add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := monoid.mul filter.germ.monoid, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := monoid.one filter.germ.monoid, one_mul := _, mul_one := _, nat_cast := add_monoid_with_one.nat_cast filter.germ.add_monoid_with_one, nat_cast_zero := _, nat_cast_succ := _, npow := monoid.npow filter.germ.monoid, npow_zero' := _, npow_succ' := _}
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 := _, nsmul := add_comm_group.nsmul filter.germ.add_comm_group, nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg filter.germ.add_comm_group, sub := add_comm_group.sub filter.germ.add_comm_group, sub_eq_add_neg := _, zsmul := add_comm_group.zsmul filter.germ.add_comm_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := add_comm_group_with_one.int_cast._default semiring.nat_cast add_comm_group.add filter.germ.ring._proof_12 add_comm_group.zero filter.germ.ring._proof_13 filter.germ.ring._proof_14 add_comm_group.nsmul filter.germ.ring._proof_15 filter.germ.ring._proof_16 semiring.one filter.germ.ring._proof_17 filter.germ.ring._proof_18 add_comm_group.neg add_comm_group.sub filter.germ.ring._proof_19 add_comm_group.zsmul filter.germ.ring._proof_20 filter.germ.ring._proof_21 filter.germ.ring._proof_22 filter.germ.ring._proof_23, nat_cast := semiring.nat_cast filter.germ.semiring, one := semiring.one filter.germ.semiring, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := semiring.mul filter.germ.semiring, mul_assoc := _, one_mul := _, mul_one := _, npow := semiring.npow filter.germ.semiring, npow_zero' := _, npow_succ' := _, 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 := _, nsmul := semiring.nsmul filter.germ.semiring, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := semiring.mul filter.germ.semiring, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := semiring.one filter.germ.semiring, one_mul := _, mul_one := _, nat_cast := semiring.nat_cast filter.germ.semiring, nat_cast_zero := _, nat_cast_succ := _, npow := semiring.npow filter.germ.semiring, npow_zero' := _, npow_succ' := _, 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 := _, nsmul := ring.nsmul filter.germ.ring, nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg filter.germ.ring, sub := ring.sub filter.germ.ring, sub_eq_add_neg := _, zsmul := ring.zsmul filter.germ.ring, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := ring.int_cast filter.germ.ring, nat_cast := ring.nat_cast filter.germ.ring, one := ring.one filter.germ.ring, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := ring.mul filter.germ.ring, mul_assoc := _, one_mul := _, mul_one := _, npow := ring.npow filter.germ.ring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
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.bounded_order = {top := order_top.top filter.germ.order_top, le_top := _, bot := order_bot.bot filter.germ.order_bot, bot_le := _}