Monoids with normalization functions, gcd, and lcm #
This file defines extra structures on CancelCommMonoidWithZeros, including IsDomains.
Main Definitions #
- NormalizationMonoid
- GCDMonoid
- NormalizedGCDMonoid
- gcdMonoidOfGCD,- gcdMonoidOfExistsGCD,- normalizedGCDMonoidOfGCD,- normalizedGCDMonoidOfExistsGCD
- gcdMonoidOfLCM,- gcdMonoidOfExistsLCM,- normalizedGCDMonoidOfLCM,- normalizedGCDMonoidOfExistsLCM
For the NormalizedGCDMonoid instances on ℕ and ℤ, see Mathlib/Algebra/GCDMonoid/Nat.lean.
Implementation Notes #
- NormalizationMonoidis defined by assigning to each element a- normUnitsuch that multiplying by that unit normalizes the monoid, and- normalizeis an idempotent monoid homomorphism. This definition as currently implemented does casework on- 0.
- GCDMonoidcontains the definitions of- gcdand- lcmwith the usual properties. They are both determined up to a unit.
- NormalizedGCDMonoidextends- NormalizationMonoid, so the- gcdand- lcmare always normalized. This makes- gcds of polynomials easier to work with, but excludes Euclidean domains, and monoids without zero.
- gcdMonoidOfGCDand- normalizedGCDMonoidOfGCDnoncomputably construct a- GCDMonoid(resp.- NormalizedGCDMonoid) structure just from the- gcdand its properties.
- gcdMonoidOfExistsGCDand- normalizedGCDMonoidOfExistsGCDnoncomputably construct a- GCDMonoid(resp.- NormalizedGCDMonoid) structure just from a proof that any two elements have a (not necessarily normalized)- gcd.
- gcdMonoidOfLCMand- normalizedGCDMonoidOfLCMnoncomputably construct a- GCDMonoid(resp.- NormalizedGCDMonoid) structure just from the- lcmand its properties.
- gcdMonoidOfExistsLCMand- normalizedGCDMonoidOfExistsLCMnoncomputably construct a- GCDMonoid(resp.- NormalizedGCDMonoid) structure just from a proof that any two elements have a (not necessarily normalized)- lcm.
TODO #
- Port GCD facts about nats, definition of coprime
- Generalize normalization monoids to commutative (cancellative) monoids with or without zero
Tags #
divisibility, gcd, lcm, normalize
Normalization monoid: multiplying with normUnit gives a normal form for associated
elements.
- normUnit : α → αˣnormUnitassigns to each element of the monoid a unit of the monoid.
- The proposition that - normUnitmaps- 0to the identity.
- The proposition that - normUnitrespects multiplication of non-zero elements.
- The proposition that - normUnitmaps units to their inverses.
Instances
Maps an element of Associates back to the normalized element of its associate class
Equations
Instances For
GCD monoid: a CancelCommMonoidWithZero with gcd (greatest common divisor) and
lcm (least common multiple) operations, determined up to a unit. The type class focuses on gcd
and we derive the corresponding lcm facts from gcd.
- gcd : α → α → αThe greatest common divisor between two elements. 
- lcm : α → α → αThe least common multiple between two elements. 
- The GCD is a divisor of the first element. 
- The GCD is a divisor of the second element. 
- Any common divisor of both elements is a divisor of the GCD. 
- gcd_mul_lcm (a b : α) : Associated (gcd a b * lcm a b) (a * b)The product of two elements is Associatedwith the product of their GCD and LCM.
- 0is left-absorbing.
- 0is right-absorbing.
Instances
Normalized GCD monoid: a CancelCommMonoidWithZero with normalization and gcd
(greatest common divisor) and lcm (least common multiple) operations. In this setting gcd and
lcm form a bounded lattice on the associated elements where gcd is the infimum, lcm is the
supremum, 1 is bottom, and 0 is top. The type class focuses on gcd and we derive the
corresponding lcm facts from gcd.
Instances
Represent a divisor of m * n as a product of a divisor of m and a divisor of n.
Note: In general, this representation is highly non-unique.
See Nat.dvdProdDvdOfDvdProd for a constructive version on ℕ.
Alias of dvd_lcm_of_dvd_left.
Alias of dvd_lcm_of_dvd_right.
Equations
- NormalizationMonoid.ofUniqueUnits = { normUnit := fun (x : α) => 1, normUnit_zero := ⋯, normUnit_mul := ⋯, normUnit_coe_units := ⋯ }
Equations
- uniqueNormalizationMonoidOfUniqueUnits = { default := NormalizationMonoid.ofUniqueUnits, uniq := ⋯ }
If a monoid's only unit is 1, then it is isomorphic to its associates.
Equations
- associatesEquivOfUniqueUnits = { toFun := Associates.out, invFun := Associates.mk, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Define NormalizationMonoid on a structure from a MonoidHom inverse to Associates.mk.
Equations
- normalizationMonoidOfMonoidHomRightInverse f hinv = { normUnit := fun (a : α) => if a = 0 then 1 else Classical.choose ⋯, normUnit_zero := ⋯, normUnit_mul := ⋯, normUnit_coe_units := ⋯ }
Instances For
Define GCDMonoid on a structure just from the gcd and its properties.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define NormalizedGCDMonoid on a structure just from the gcd and its properties.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define GCDMonoid on a structure just from the lcm and its properties.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define NormalizedGCDMonoid on a structure just from the lcm and its properties.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define a GCDMonoid structure on a monoid just from the existence of a gcd.
Equations
- gcdMonoidOfExistsGCD h = gcdMonoidOfGCD (fun (a b : α) => Classical.choose ⋯) ⋯ ⋯ ⋯
Instances For
Define a NormalizedGCDMonoid structure on a monoid just from the existence of a gcd.
Equations
- normalizedGCDMonoidOfExistsGCD h = normalizedGCDMonoidOfGCD (fun (a b : α) => normalize (Classical.choose ⋯)) ⋯ ⋯ ⋯ ⋯
Instances For
Define a GCDMonoid structure on a monoid just from the existence of an lcm.
Equations
- gcdMonoidOfExistsLCM h = gcdMonoidOfLCM (fun (a b : α) => Classical.choose ⋯) ⋯ ⋯ ⋯
Instances For
Define a NormalizedGCDMonoid structure on a monoid just from the existence of an lcm.
Equations
- normalizedGCDMonoidOfExistsLCM h = normalizedGCDMonoidOfLCM (fun (a b : α) => normalize (Classical.choose ⋯)) ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.