Divisible Group and rootable group #
In this file, we define a divisible add monoid and a rootable monoid with some basic properties.
Main definition #
DivisibleBy A α: An additive monoidAis said to be divisible byαiff for alln ≠ 0 ∈ αandy ∈ A, there is anx ∈ Asuch thatn • x = y. In this file, we adopt a constructive approach, i.e. we ask for an explicitdiv : A → α → Afunction such thatdiv a 0 = 0andn • div a n = afor alln ≠ 0 ∈ α.RootableBy A α: A monoidAis said to be rootable byαiff for alln ≠ 0 ∈ αandy ∈ A, there is anx ∈ Asuch thatx^n = y. In this file, we adopt a constructive approach, i.e. we ask for an explicitroot : A → α → Afunction such thatroot a 0 = 1and(root a n)ⁿ = afor alln ≠ 0 ∈ α.
Main results #
For additive monoids and groups:
divisibleByOfSMulRightSurj: the constructive definition of divisiblity is implied by the condition thatn • x = ahas solutions for alln ≠ 0anda ∈ A.smul_right_surj_of_divisibleBy: the constructive definition of divisiblity implies the condition thatn • x = ahas solutions for alln ≠ 0anda ∈ 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 divisiblity is implied by nat divisiblity.AddGroup.divisibleByNatOfDivisibleByInt: for additive groups, nat divisiblity is implied by int divisiblity.AddCommGroup.divisibleByIntOfSmulTopEqTop: the constructive definition of divisiblity is implied by the condition thatn • A = Afor alln ≠ 0.AddCommGroup.smul_top_eq_top_of_divisibleBy_int: the constructive definition of divisiblity implies the condition thatn • A = Afor alln ≠ 0.divisibleByIntOfCharZero: any field of characteristic zero is divisible.QuotientAddGroup.divisibleBy: quotient group of divisible group is divisible.Function.Surjective.divisibleBy: ifAis divisible andA →+ Bis surjective, thenBis divisible.
and their multiplicative counterparts:
rootableByOfPowLeftSurj: the constructive definition of rootablity is implied by the condition thatxⁿ = yhas solutions for alln ≠ 0anda ∈ A.pow_left_surj_of_rootableBy: the constructive definition of rootablity implies the condition thatxⁿ = yhas solutions for alln ≠ 0anda ∈ 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 rootablity is implied by nat rootablity.Group.rootableByNatOfRootableByInt: in groups, nat rootablity is implied by int rootablity.QuotientGroup.rootableBy: quotient group of rootable group is rootable.Function.Surjective.rootableBy: ifAis rootable andA →* Bis surjective, thenBis rootable.
TODO: Show that divisibility implies injectivity in the category of AddCommGroup.
- div : A → α → A
- div_zero : ∀ (a : A), DivisibleBy.div a 0 = 0
- div_cancel : ∀ {n : α} (a : A), n ≠ 0 → n • DivisibleBy.div a n = a
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
Instances
- root : A → α → A
- root_zero : ∀ (a : A), RootableBy.root a 0 = 1
- root_cancel : ∀ {n : α} (a : A), n ≠ 0 → RootableBy.root a n ^ n = a
A Monoid A is α-rootable iff xⁿ = a has a solution for all n ≠ 0 ∈ α and a ∈ A.
Here we adopt a constructive approach where we ask an explicit root : A → α → A function such that
root a 0 = 1for alla ∈ A(root a n)ⁿ = afor alln ≠ 0 ∈ αanda ∈ A.
Instances
An AddMonoid A is α-divisible iff n • _ is a surjective function, i.e. the constructive
version implies the textbook approach.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A Monoid A is α-rootable iff the pow _ n function is surjective, i.e. the constructive version
implies the textbook approach.
Equations
- One or more equations did not get rendered due to their size.
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.
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.
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.
If for all n ≠ 0 ∈ ℤ, n • A = A, then A is divisible.
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
Equations
- AddGroup.divisibleByIntOfDivisibleByNat.match_1 motive z h_1 h_2 = Int.casesOn z (fun a => h_1 a) fun a => h_2 a
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 ℤ-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
- One or more equations did not get rendered due to their size.
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 α (_ : ∀ {n : α}, n ≠ 0 → ∀ (x : B), ∃ a, (fun a => n • a) a = x)
Instances For
Equations
- Function.Surjective.divisibleBy.match_1 f x motive x h_1 = Exists.casesOn x fun w h => h_1 w h
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 α (_ : ∀ {n : α}, n ≠ 0 → ∀ (x : B), ∃ a, (fun a => a ^ n) a = x)
Instances For
Any quotient group of a divisible group is divisible
Equations
- QuotientAddGroup.divisibleBy B = Function.Surjective.divisibleBy QuotientAddGroup.mk (_ : Function.Surjective QuotientAddGroup.mk) (_ : ∀ (x : A) (x_1 : ℕ), ↑(x_1 • x) = ↑(x_1 • x))
Any quotient group of a rootable group is rootable.
Equations
- QuotientGroup.rootableBy B = Function.Surjective.rootableBy QuotientGroup.mk (_ : Function.Surjective QuotientGroup.mk) (_ : ∀ (x : A) (x_1 : ℕ), ↑(x ^ x_1) = ↑(x ^ x_1))