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 RingTheory.Int.Basic.
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
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
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
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 = { toInhabited := { default := normalizationMonoidOfUniqueUnits }, uniq := ⋯ }
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
If a monoid's only unit is 1, then it is isomorphic to its associates.
Equations
- associatesEquivOfUniqueUnits = { toEquiv := { 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 ⋯)) ⋯ ⋯ ⋯ ⋯