Linearly ordered commutative additive groups and monoids with a top element adjoined #
This file sets up a special class of linearly ordered commutative additive 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 additive group Γ and formally adjoining a top element: Γ ∪ {⊤}.
The disadvantage is that a type such as ENNReal
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.
A linearly ordered commutative monoid with an additively absorbing ⊤
element.
Instances should include number systems with an infinite element adjoined.
Instances
In a LinearOrderedAddCommMonoidWithTop
, the ⊤
element is invariant under addition.
A linearly ordered commutative group with an additively absorbing ⊤
element.
Instances should include number systems with an infinite element adjoined.
Instances
Equations
- WithTop.linearOrderedAddCommMonoidWithTop = LinearOrderedAddCommMonoidWithTop.mk ⋯
Equations
- WithTop.LinearOrderedAddCommGroup.instNeg = { neg := Option.map fun (a : α) => -a }
If α
has subtraction, we can extend the subtraction to WithTop α
, by
setting x - ⊤ = ⊤
and ⊤ - x = ⊤
. This definition is only registered as an instance on linearly
ordered additive commutative groups, to avoid conflicting with the instance WithTop.instSub
on
types with a bottom element.
Equations
- WithTop.LinearOrderedAddCommGroup.sub x none = ⊤
- WithTop.LinearOrderedAddCommGroup.sub none (some x_2) = ⊤
- WithTop.LinearOrderedAddCommGroup.sub (some x_2) (some y) = ↑(x_2 - y)
Instances For
Equations
- WithTop.LinearOrderedAddCommGroup.instSub = { sub := WithTop.LinearOrderedAddCommGroup.sub }
Equations
- WithTop.LinearOrderedAddCommGroup.instLinearOrderedAddCommGroupWithTop = LinearOrderedAddCommGroupWithTop.mk ⋯ zsmulRec ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- LinearOrderedAddCommGroupWithTop.toSubtractionMonoid = SubtractionMonoid.mk ⋯ ⋯ ⋯