Divisible Group and rootable group #
In this file, we define a divisible additive monoid and a rootable monoid with some basic properties.
Main definition #
- DivisibleBy A α: An additive monoid- Ais said to be divisible by- αiff for all- n ≠ 0 ∈ αand- y ∈ A, there is an- x ∈ Asuch that- n • x = y. In this file, we adopt a constructive approach, i.e. we ask for an explicit- div : A → α → Afunction such that- div a 0 = 0and- n • div a n = afor all- n ≠ 0 ∈ α.
- RootableBy A α: A monoid- Ais said to be rootable by- αiff for all- n ≠ 0 ∈ αand- y ∈ A, there is an- x ∈ Asuch that- x^n = y. In this file, we adopt a constructive approach, i.e. we ask for an explicit- root : A → α → Afunction such that- root a 0 = 1and- (root a n)ⁿ = afor all- n ≠ 0 ∈ α.
Main results #
For additive monoids and groups:
- divisibleByOfSMulRightSurj: the constructive definition of divisibility is implied by the condition that- n • x = ahas solutions for all- n ≠ 0and- a ∈ A.
- smul_right_surj_of_divisibleBy: the constructive definition of divisibility implies the condition that- n • x = ahas solutions for all- n ≠ 0and- a ∈ A.
- Prod.divisibleBy:- A × Bis divisible for any two divisible additive monoids.
- Pi.divisibleBy: any product of divisible additive monoids is divisible.
- AddGroup.divisibleByIntOfDivisibleByNat: for additive groups, int divisibility is implied by nat divisibility.
- AddGroup.divisibleByNatOfDivisibleByInt: for additive groups, nat divisibility is implied by int divisibility.
- AddCommGroup.divisibleByIntOfSMulTopEqTop: the constructive definition of divisibility is implied by the condition that- n • A = Afor all- n ≠ 0.
- AddCommGroup.smul_top_eq_top_of_divisibleBy_int: the constructive definition of divisibility implies the condition that- n • A = Afor all- n ≠ 0.
- divisibleByIntOfCharZero: any field of characteristic zero is divisible.
- QuotientAddGroup.divisibleBy: quotient group of divisible group is divisible.
- Function.Surjective.divisibleBy: if- Ais divisible and- A →+ Bis surjective, then- Bis divisible.
and their multiplicative counterparts:
- rootableByOfPowLeftSurj: the constructive definition of rootability is implied by the condition that- xⁿ = yhas solutions for all- n ≠ 0and- a ∈ A.
- pow_left_surj_of_rootableBy: the constructive definition of rootability implies the condition that- xⁿ = yhas solutions for all- n ≠ 0and- a ∈ A.
- Prod.rootableBy: any product of two rootable monoids is rootable.
- Pi.rootableBy: any product of rootable monoids is rootable.
- Group.rootableByIntOfRootableByNat: in groups, int rootability is implied by nat rootability.
- Group.rootableByNatOfRootableByInt: in groups, nat rootability is implied by int rootability.
- QuotientGroup.rootableBy: quotient group of rootable group is rootable.
- Function.Surjective.rootableBy: if- Ais rootable and- A →* Bis surjective, then- Bis rootable.
TODO: Show that divisibility implies injectivity in the category of AddCommGroup.
An AddMonoid A is α-divisible iff n • x = a has a solution for all n ≠ 0 ∈ α and a ∈ A.
Here we adopt a constructive approach where we ask an explicit div : A → α → A function such that
- div : A → α → AThe division function 
Instances
A Monoid A is α-rootable iff the pow _ n function is surjective, i.e. the constructive version
implies the textbook approach.
Equations
Instances For
An AddMonoid A is α-divisible iff n • _ is a
surjective function, i.e. the constructive version implies the textbook approach.
Equations
Instances For
Equations
- Pi.rootableBy B = { root := fun (x : (i : ι) → B i) (n : β) (i : ι) => RootableBy.root (x i) n, root_zero := ⋯, root_cancel := ⋯ }
Equations
- Pi.divisibleBy B = { div := fun (x : (i : ι) → B i) (n : β) (i : ι) => DivisibleBy.div (x i) n, div_zero := ⋯, div_cancel := ⋯ }
Equations
- Prod.rootableBy = { root := fun (p : B × B') (n : β) => (RootableBy.root p.1 n, RootableBy.root p.2 n), root_zero := ⋯, root_cancel := ⋯ }
Equations
- Prod.divisibleBy = { div := fun (p : B × B') (n : β) => (DivisibleBy.div p.1 n, DivisibleBy.div p.2 n), div_zero := ⋯, div_cancel := ⋯ }
Equations
- ULift.instRootableBy A α = { root := fun (x : ULift.{?u.7, ?u.9} A) (a : α) => { down := RootableBy.root x.down a }, root_zero := ⋯, root_cancel := ⋯ }
Equations
- ULift.instDivisibleBy A α = { div := fun (x : ULift.{?u.7, ?u.9} A) (a : α) => { down := DivisibleBy.div x.down a }, div_zero := ⋯, div_cancel := ⋯ }
If for all n ≠ 0 ∈ ℤ, n • A = A, then A is divisible.
Equations
- AddCommGroup.divisibleByIntOfSMulTopEqTop A H = { div := fun (a : A) (n : ℤ) => if hn : n = 0 then 0 else Exists.choose ⋯, div_zero := ⋯, div_cancel := ⋯ }
Instances For
A group is ℤ-rootable if it is ℕ-rootable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An additive group is ℤ-divisible if it is ℕ-divisible.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A group is ℕ-rootable if it is ℤ-rootable
Equations
- Group.rootableByNatOfRootableByInt A = { root := fun (a : A) (n : ℕ) => RootableBy.root a ↑n, root_zero := ⋯, root_cancel := ⋯ }
Instances For
An additive group is ℕ-divisible if it ℤ-divisible.
Equations
- AddGroup.divisibleByNatOfDivisibleByInt A = { div := fun (a : A) (n : ℕ) => DivisibleBy.div a ↑n, div_zero := ⋯, div_cancel := ⋯ }
Instances For
If f : A → B is a surjective homomorphism and A is α-rootable, then B is also α-rootable.
Equations
- Function.Surjective.rootableBy f hf hpow = rootableByOfPowLeftSurj B α ⋯
Instances For
If f : A → B is a surjective homomorphism and A is α-divisible, then B is also
α-divisible.
Equations
- Function.Surjective.divisibleBy f hf hpow = divisibleByOfSMulRightSurj B α ⋯
Instances For
Any quotient group of a rootable group is rootable.
Equations
Any quotient group of a divisible group is divisible