Linearly ordered commutative groups and monoids with a zero element adjoined #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file sets up a special class of linearly ordered commutative monoids that show up as the target of so-called “valuations” in algebraic number theory.
Usually, in the informal literature, these objects are constructed by taking a linearly ordered commutative group Γ and formally adjoining a zero element: Γ ∪ {0}.
The disadvantage is that a type such as nnreal
is not of that form,
whereas it is a very common target for valuations.
The solutions is to use a typeclass, and that is exactly what we do in this file.
Note that to avoid issues with import cycles, linear_ordered_comm_monoid_with_zero
is defined
in another file. However, the lemmas about it are stated here.
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- le_trans : ∀ (a b c : α), a ≤ b → b ≤ c → a ≤ c
- lt_iff_le_not_le : (∀ (a b : α), a < b ↔ a ≤ b ∧ ¬b ≤ a) . "order_laws_tac"
- le_antisymm : ∀ (a b : α), a ≤ b → b ≤ a → a = b
- le_total : ∀ (a b : α), a ≤ b ∨ b ≤ a
- decidable_le : decidable_rel has_le.le
- decidable_eq : decidable_eq α
- decidable_lt : decidable_rel has_lt.lt
- max : α → α → α
- max_def : linear_ordered_comm_group_with_zero.max = max_default . "reflexivity"
- min : α → α → α
- min_def : linear_ordered_comm_group_with_zero.min = min_default . "reflexivity"
- mul : α → α → α
- mul_assoc : ∀ (a b c : α), a * b * c = a * (b * c)
- one : α
- one_mul : ∀ (a : α), 1 * a = a
- mul_one : ∀ (a : α), a * 1 = a
- npow : ℕ → α → α
- npow_zero' : (∀ (x : α), linear_ordered_comm_group_with_zero.npow 0 x = 1) . "try_refl_tac"
- npow_succ' : (∀ (n : ℕ) (x : α), linear_ordered_comm_group_with_zero.npow n.succ x = x * linear_ordered_comm_group_with_zero.npow n x) . "try_refl_tac"
- mul_comm : ∀ (a b : α), a * b = b * a
- mul_le_mul_left : ∀ (a b : α), a ≤ b → ∀ (c : α), c * a ≤ c * b
- zero : α
- zero_mul : ∀ (a : α), 0 * a = 0
- mul_zero : ∀ (a : α), a * 0 = 0
- zero_le_one : 0 ≤ 1
- inv : α → α
- div : α → α → α
- div_eq_mul_inv : (∀ (a b : α), a / b = a * b⁻¹) . "try_refl_tac"
- zpow : ℤ → α → α
- zpow_zero' : (∀ (a : α), linear_ordered_comm_group_with_zero.zpow 0 a = 1) . "try_refl_tac"
- zpow_succ' : (∀ (n : ℕ) (a : α), linear_ordered_comm_group_with_zero.zpow (int.of_nat n.succ) a = a * linear_ordered_comm_group_with_zero.zpow (int.of_nat n) a) . "try_refl_tac"
- zpow_neg' : (∀ (n : ℕ) (a : α), linear_ordered_comm_group_with_zero.zpow -[1+ n] a = (linear_ordered_comm_group_with_zero.zpow ↑(n.succ) a)⁻¹) . "try_refl_tac"
- exists_pair_ne : ∃ (x y : α), x ≠ y
- inv_zero : 0⁻¹ = 0
- mul_inv_cancel : ∀ (a : α), a ≠ 0 → a * a⁻¹ = 1
A linearly ordered commutative group with a zero element.
Instances of this typeclass
- canonically_linear_ordered_semifield.to_linear_ordered_comm_group_with_zero
- multiplicative.linear_ordered_comm_group_with_zero
- with_zero.linear_ordered_comm_group_with_zero
- nonneg.linear_ordered_comm_group_with_zero
- nnreal.linear_ordered_comm_group_with_zero
- valuation_ring.value_group.linear_ordered_comm_group_with_zero
- valuation_subring.value_group.linear_ordered_comm_group_with_zero
- nnrat.linear_ordered_comm_group_with_zero
Instances of other typeclasses for linear_ordered_comm_group_with_zero
- linear_ordered_comm_group_with_zero.has_sizeof_inst
Equations
- multiplicative.linear_ordered_comm_monoid_with_zero = {le := ordered_comm_monoid.le multiplicative.ordered_comm_monoid, lt := ordered_comm_monoid.lt multiplicative.ordered_comm_monoid, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_order.decidable_le multiplicative.linear_order, decidable_eq := linear_order.decidable_eq multiplicative.linear_order, decidable_lt := linear_order.decidable_lt multiplicative.linear_order, max := linear_order.max multiplicative.linear_order, max_def := _, min := linear_order.min multiplicative.linear_order, min_def := _, mul := ordered_comm_monoid.mul multiplicative.ordered_comm_monoid, mul_assoc := _, one := ordered_comm_monoid.one multiplicative.ordered_comm_monoid, one_mul := _, mul_one := _, npow := ordered_comm_monoid.npow multiplicative.ordered_comm_monoid, npow_zero' := _, npow_succ' := _, mul_comm := _, mul_le_mul_left := _, zero := ⇑multiplicative.of_add ⊤, zero_mul := _, mul_zero := _, zero_le_one := _}
Equations
- multiplicative.linear_ordered_comm_group_with_zero = {le := linear_ordered_comm_monoid_with_zero.le multiplicative.linear_ordered_comm_monoid_with_zero, lt := linear_ordered_comm_monoid_with_zero.lt multiplicative.linear_ordered_comm_monoid_with_zero, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_ordered_comm_monoid_with_zero.decidable_le multiplicative.linear_ordered_comm_monoid_with_zero, decidable_eq := linear_ordered_comm_monoid_with_zero.decidable_eq multiplicative.linear_ordered_comm_monoid_with_zero, decidable_lt := linear_ordered_comm_monoid_with_zero.decidable_lt multiplicative.linear_ordered_comm_monoid_with_zero, max := linear_ordered_comm_monoid_with_zero.max multiplicative.linear_ordered_comm_monoid_with_zero, max_def := _, min := linear_ordered_comm_monoid_with_zero.min multiplicative.linear_ordered_comm_monoid_with_zero, min_def := _, mul := div_inv_monoid.mul multiplicative.div_inv_monoid, mul_assoc := _, one := div_inv_monoid.one multiplicative.div_inv_monoid, one_mul := _, mul_one := _, npow := div_inv_monoid.npow multiplicative.div_inv_monoid, npow_zero' := _, npow_succ' := _, mul_comm := _, mul_le_mul_left := _, zero := linear_ordered_comm_monoid_with_zero.zero multiplicative.linear_ordered_comm_monoid_with_zero, zero_mul := _, mul_zero := _, zero_le_one := _, inv := div_inv_monoid.inv multiplicative.div_inv_monoid, div := div_inv_monoid.div multiplicative.div_inv_monoid, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow multiplicative.div_inv_monoid, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, inv_zero := _, mul_inv_cancel := _}
Equations
- with_zero.linear_ordered_comm_monoid_with_zero = {le := linear_order.le with_zero.linear_order, lt := linear_order.lt with_zero.linear_order, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_order.decidable_le with_zero.linear_order, decidable_eq := linear_order.decidable_eq with_zero.linear_order, decidable_lt := linear_order.decidable_lt with_zero.linear_order, max := linear_order.max with_zero.linear_order, max_def := _, min := linear_order.min with_zero.linear_order, min_def := _, mul := comm_monoid_with_zero.mul with_zero.comm_monoid_with_zero, mul_assoc := _, one := comm_monoid_with_zero.one with_zero.comm_monoid_with_zero, one_mul := _, mul_one := _, npow := comm_monoid_with_zero.npow with_zero.comm_monoid_with_zero, npow_zero' := _, npow_succ' := _, mul_comm := _, mul_le_mul_left := _, zero := comm_monoid_with_zero.zero with_zero.comm_monoid_with_zero, zero_mul := _, mul_zero := _, zero_le_one := _}
Equations
- with_zero.linear_ordered_comm_group_with_zero = {le := linear_ordered_comm_monoid_with_zero.le with_zero.linear_ordered_comm_monoid_with_zero, lt := linear_ordered_comm_monoid_with_zero.lt with_zero.linear_ordered_comm_monoid_with_zero, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_ordered_comm_monoid_with_zero.decidable_le with_zero.linear_ordered_comm_monoid_with_zero, decidable_eq := linear_ordered_comm_monoid_with_zero.decidable_eq with_zero.linear_ordered_comm_monoid_with_zero, decidable_lt := linear_ordered_comm_monoid_with_zero.decidable_lt with_zero.linear_ordered_comm_monoid_with_zero, max := linear_ordered_comm_monoid_with_zero.max with_zero.linear_ordered_comm_monoid_with_zero, max_def := _, min := linear_ordered_comm_monoid_with_zero.min with_zero.linear_ordered_comm_monoid_with_zero, min_def := _, mul := linear_ordered_comm_monoid_with_zero.mul with_zero.linear_ordered_comm_monoid_with_zero, mul_assoc := _, one := linear_ordered_comm_monoid_with_zero.one with_zero.linear_ordered_comm_monoid_with_zero, one_mul := _, mul_one := _, npow := linear_ordered_comm_monoid_with_zero.npow with_zero.linear_ordered_comm_monoid_with_zero, npow_zero' := _, npow_succ' := _, mul_comm := _, mul_le_mul_left := _, zero := linear_ordered_comm_monoid_with_zero.zero with_zero.linear_ordered_comm_monoid_with_zero, zero_mul := _, mul_zero := _, zero_le_one := _, inv := comm_group_with_zero.inv with_zero.comm_group_with_zero, div := comm_group_with_zero.div with_zero.comm_group_with_zero, div_eq_mul_inv := _, zpow := comm_group_with_zero.zpow with_zero.comm_group_with_zero, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, inv_zero := _, mul_inv_cancel := _}
Pullback a linear_ordered_comm_monoid_with_zero
under an injective map.
See note [reducible non-instances].
Equations
- function.injective.linear_ordered_comm_monoid_with_zero f hf zero one mul npow hsup hinf = {le := linear_order.le (linear_order.lift f hf hsup hinf), lt := linear_order.lt (linear_order.lift f hf hsup hinf), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_order.decidable_le (linear_order.lift f hf hsup hinf), decidable_eq := linear_order.decidable_eq (linear_order.lift f hf hsup hinf), decidable_lt := linear_order.decidable_lt (linear_order.lift f hf hsup hinf), max := linear_order.max (linear_order.lift f hf hsup hinf), max_def := _, min := linear_order.min (linear_order.lift f hf hsup hinf), min_def := _, mul := ordered_comm_monoid.mul (function.injective.ordered_comm_monoid f hf one mul npow), mul_assoc := _, one := ordered_comm_monoid.one (function.injective.ordered_comm_monoid f hf one mul npow), one_mul := _, mul_one := _, npow := ordered_comm_monoid.npow (function.injective.ordered_comm_monoid f hf one mul npow), npow_zero' := _, npow_succ' := _, mul_comm := _, mul_le_mul_left := _, zero := comm_monoid_with_zero.zero (function.injective.comm_monoid_with_zero f hf zero one mul npow), zero_mul := _, mul_zero := _, zero_le_one := _}
Equations
- additive.linear_ordered_add_comm_monoid_with_top = {le := ordered_add_comm_monoid.le additive.ordered_add_comm_monoid, lt := ordered_add_comm_monoid.lt additive.ordered_add_comm_monoid, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_order.decidable_le additive.linear_order, decidable_eq := linear_order.decidable_eq additive.linear_order, decidable_lt := linear_order.decidable_lt additive.linear_order, max := linear_order.max additive.linear_order, max_def := _, min := linear_order.min additive.linear_order, min_def := _, add := ordered_add_comm_monoid.add additive.ordered_add_comm_monoid, add_assoc := _, zero := ordered_add_comm_monoid.zero additive.ordered_add_comm_monoid, zero_add := _, add_zero := _, nsmul := ordered_add_comm_monoid.nsmul additive.ordered_add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, add_le_add_left := _, top := 0, le_top := _, top_add' := _}
Alias of mul_le_one'
for unification.
Alias of one_le_mul'
for unification.
equiv.mul_left₀
as an order_iso on a linear_ordered_comm_group_with_zero.
.
Note that order_iso.mul_left₀
refers to the linear_ordered_field
version.
Equations
- order_iso.mul_left₀' ha = {to_equiv := {to_fun := (equiv.mul_left₀ a ha).to_fun, inv_fun := (equiv.mul_left₀ a ha).inv_fun, left_inv := _, right_inv := _}, map_rel_iff' := _}
equiv.mul_right₀
as an order_iso on a linear_ordered_comm_group_with_zero.
.
Note that order_iso.mul_right₀
refers to the linear_ordered_field
version.
Equations
- order_iso.mul_right₀' ha = {to_equiv := {to_fun := (equiv.mul_right₀ a ha).to_fun, inv_fun := (equiv.mul_right₀ a ha).inv_fun, left_inv := _, right_inv := _}, map_rel_iff' := _}
Equations
- additive.linear_ordered_add_comm_group_with_top = {le := linear_ordered_add_comm_monoid_with_top.le additive.linear_ordered_add_comm_monoid_with_top, lt := linear_ordered_add_comm_monoid_with_top.lt additive.linear_ordered_add_comm_monoid_with_top, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := linear_ordered_add_comm_monoid_with_top.decidable_le additive.linear_ordered_add_comm_monoid_with_top, decidable_eq := linear_ordered_add_comm_monoid_with_top.decidable_eq additive.linear_ordered_add_comm_monoid_with_top, decidable_lt := linear_ordered_add_comm_monoid_with_top.decidable_lt additive.linear_ordered_add_comm_monoid_with_top, max := linear_ordered_add_comm_monoid_with_top.max additive.linear_ordered_add_comm_monoid_with_top, max_def := _, min := linear_ordered_add_comm_monoid_with_top.min additive.linear_ordered_add_comm_monoid_with_top, min_def := _, add := sub_neg_monoid.add additive.sub_neg_monoid, add_assoc := _, zero := sub_neg_monoid.zero additive.sub_neg_monoid, zero_add := _, add_zero := _, nsmul := sub_neg_monoid.nsmul additive.sub_neg_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, add_le_add_left := _, top := linear_ordered_add_comm_monoid_with_top.top additive.linear_ordered_add_comm_monoid_with_top, le_top := _, top_add' := _, neg := sub_neg_monoid.neg additive.sub_neg_monoid, sub := sub_neg_monoid.sub additive.sub_neg_monoid, sub_eq_add_neg := _, zsmul := sub_neg_monoid.zsmul additive.sub_neg_monoid, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, exists_pair_ne := _, neg_top := _, add_neg_cancel := _}