Monoids with normalization functions, gcd, and lcm #
This file defines extra structures on CancelCommMonoidWithZeros, including IsDomains.
Main Definitions #
NormalizationMonoidGCDMonoidNormalizedGCDMonoidgcdMonoid_of_gcd,gcdMonoid_of_exists_gcd,normalizedGCDMonoid_of_gcd,normalizedGCDMonoid_of_exists_gcdgcdMonoid_of_lcm,gcdMonoid_of_exists_lcm,normalizedGCDMonoid_of_lcm,normalizedGCDMonoid_of_exists_lcm
For the NormalizedGCDMonoid instances on ℕ and ℤ, see Mathlib.Algebra.GCDMonoid.Nat.
Implementation Notes #
NormalizationMonoidis defined by assigning to each element anormUnitsuch that multiplying by that unit normalizes the monoid, andnormalizeis an idempotent monoid homomorphism. This definition as currently implemented does casework on0.GCDMonoidcontains the definitions ofgcdandlcmwith the usual properties. They are both determined up to a unit.NormalizedGCDMonoidextendsNormalizationMonoid, so thegcdandlcmare always normalized. This makesgcds of polynomials easier to work with, but excludes Euclidean domains, and monoids without zero.gcdMonoid_of_gcdandnormalizedGCDMonoid_of_gcdnoncomputably construct aGCDMonoid(resp.NormalizedGCDMonoid) structure just from thegcdand its properties.gcdMonoid_of_exists_gcdandnormalizedGCDMonoid_of_exists_gcdnoncomputably construct aGCDMonoid(resp.NormalizedGCDMonoid) structure just from a proof that any two elements have a (not necessarily normalized)gcd.gcdMonoid_of_lcmandnormalizedGCDMonoid_of_lcmnoncomputably construct aGCDMonoid(resp.NormalizedGCDMonoid) structure just from thelcmand its properties.gcdMonoid_of_exists_lcmandnormalizedGCDMonoid_of_exists_lcmnoncomputably construct aGCDMonoid(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
normUnitmaps0to the identity.The proposition that
normUnitrespects multiplication of non-zero elements.The proposition that
normUnitmaps units to their inverses.
Instances
The proposition that normUnit maps 0 to the identity.
The proposition that normUnit respects multiplication of non-zero elements.
The proposition that normUnit maps units to their inverses.
Maps an element of Associates back to the normalized element of its associate class
Equations
- Associates.out = Quotient.lift ⇑normalize ⋯
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
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.
The product of two elements is Associated with the product of their GCD and LCM.
0 is left-absorbing.
0 is right-absorbing.
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.
- normUnit : α → αˣ
- gcd : α → α → α
- lcm : α → α → α
- gcd_mul_lcm : ∀ (a b : α), Associated (gcd a b * lcm a b) (a * b)
The GCD is normalized to itself.
The LCM is normalized to itself.
Instances
The GCD is normalized to itself.
The LCM is normalized to itself.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
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.prodDvdAndDvdOfDvdProd for a constructive version on ℕ.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Alias of Irreducible.prime.
Alias of irreducible_iff_prime.
Equations
- normalizationMonoidOfUniqueUnits = { normUnit := fun (x : α) => 1, normUnit_zero := ⋯, normUnit_mul := ⋯, normUnit_coe_units := ⋯ }
Equations
- uniqueNormalizationMonoidOfUniqueUnits = { default := normalizationMonoidOfUniqueUnits, uniq := ⋯ }
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
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
- normalizedGCDMonoidOfGCD gcd gcd_dvd_left gcd_dvd_right dvd_gcd normalize_gcd = let __src := inferInstance; NormalizedGCDMonoid.mk normalize_gcd ⋯
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
- normalizedGCDMonoidOfLCM lcm dvd_lcm_left dvd_lcm_right lcm_dvd normalize_lcm = let exists_gcd := ⋯; let __src := inferInstance; NormalizedGCDMonoid.mk ⋯ normalize_lcm
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
Equations
- One or more equations did not get rendered due to their size.