Divisible Group and rootable group #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file, we define a divisible add monoid and a rootable monoid with some basic properties.
Main definition #
divisible_by A α
: An additive monoidA
is said to be divisible byα
iff for alln ≠ 0 ∈ α
andy ∈ A
, there is anx ∈ A
such thatn • x = y
. In this file, we adopt a constructive approach, i.e. we ask for an explicitdiv : A → α → A
function such thatdiv a 0 = 0
andn • div a n = a
for alln ≠ 0 ∈ α
.rootable_by A α
: A monoidA
is said to be rootable byα
iff for alln ≠ 0 ∈ α
andy ∈ A
, there is anx ∈ A
such thatx^n = y
. In this file, we adopt a constructive approach, i.e. we ask for an explicitroot : A → α → A
function such thatroot a 0 = 1
and(root a n)ⁿ = a
for alln ≠ 0 ∈ α
.
Main results #
For additive monoids and groups:
divisible_by_of_smul_right_surj
: the constructive definition of divisiblity is implied by the condition thatn • x = a
has solutions for alln ≠ 0
anda ∈ A
.smul_right_surj_of_divisible_by
: the constructive definition of divisiblity implies the condition thatn • x = a
has solutions for alln ≠ 0
anda ∈ A
.prod.divisible_by
:A × B
is divisible for any two divisible additive monoids.pi.divisible_by
: any product of divisble additive monoids is divisible.add_group.divisible_by_int_of_divisible_by_nat
: for additive groups, int divisiblity is implied by nat divisiblity.add_group.divisible_by_nat_of_divisible_by_int
: for additive groups, nat divisiblity is implied by int divisiblity.add_comm_group.divisible_by_int_of_smul_top_eq_top
: the constructive definition of divisiblity is implied by the condition thatn • A = A
for alln ≠ 0
.add_comm_group.smul_top_eq_top_of_divisible_by_int
: the constructive definition of divisiblity implies the condition thatn • A = A
for alln ≠ 0
.divisible_by_int_of_char_zero
: any field of characteristic zero is divisible.quotient_add_group.divisible_by
: quotient group of divisible group is divisible.function.surjective.divisible_by
: ifA
is divisible andA →+ B
is surjective, thenB
is divisible.
and their multiplicative counterparts:
rootable_by_of_pow_left_surj
: the constructive definition of rootablity is implied by the condition thatxⁿ = y
has solutions for alln ≠ 0
anda ∈ A
.pow_left_surj_of_rootable_by
: the constructive definition of rootablity implies the condition thatxⁿ = y
has solutions for alln ≠ 0
anda ∈ A
.prod.rootable_by
: any product of two rootable monoids is rootable.pi.rootable_by
: any product of rootable monoids is rootable.group.rootable_by_int_of_rootable_by_nat
: in groups, int rootablity is implied by nat rootablity.group.rootable_by_nat_of_rootable_by_int
: in groups, nat rootablity is implied by int rootablity.quotient_group.rootable_by
: quotient group of rootable group is rootable.function.surjective.rootable_by
: ifA
is rootable andA →* B
is surjective, thenB
is rootable.
TODO: Show that divisibility implies injectivity in the category of AddCommGroup
.
- div : A → α → A
- div_zero : ∀ (a : A), divisible_by.div a 0 = 0
- div_cancel : ∀ {n : α} (a : A), n ≠ 0 → n • divisible_by.div a n = a
An add_monoid 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 0 = 0
for alla ∈ A
n • div a n = a
for alln ≠ 0 ∈ α
anda ∈ A
.
Instances of this typeclass
Instances of other typeclasses for divisible_by
- divisible_by.has_sizeof_inst
- root : A → α → A
- root_zero : ∀ (a : A), rootable_by.root a 0 = 1
- root_cancel : ∀ {n : α} (a : A), n ≠ 0 → rootable_by.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 = 1
for alla ∈ A
(root a n)ⁿ = a
for alln ≠ 0 ∈ α
anda ∈ A
.
Instances of this typeclass
Instances of other typeclasses for rootable_by
- rootable_by.has_sizeof_inst
A monoid A
is α
-rootable iff the pow _ n
function is surjective, i.e. the constructive version
implies the textbook approach.
An add_monoid A
is α
-divisible iff n • _
is a surjective function, i.e. the constructive
version implies the textbook approach.
Equations
- pi.rootable_by B = {root := λ (x : Π (i : ι), B i) (n : β) (i : ι), rootable_by.root (x i) n, root_zero := _, root_cancel := _}
Equations
- pi.divisible_by B = {div := λ (x : Π (i : ι), B i) (n : β) (i : ι), divisible_by.div (x i) n, div_zero := _, div_cancel := _}
Equations
- prod.divisible_by = {div := λ (p : B × B') (n : β), (divisible_by.div p.fst n, divisible_by.div p.snd n), div_zero := _, div_cancel := _}
Equations
- prod.rootable_by = {root := λ (p : B × B') (n : β), (rootable_by.root p.fst n, rootable_by.root p.snd n), root_zero := _, root_cancel := _}
If for all n ≠ 0 ∈ ℤ
, n • A = A
, then A
is divisible.
Equations
- add_comm_group.divisible_by_int_of_smul_top_eq_top A H = {div := λ (a : A) (n : ℤ), dite (n = 0) (λ (hn : n = 0), 0) (λ (hn : ¬n = 0), Exists.some _), div_zero := _, div_cancel := _}
Equations
- divisible_by_int_of_char_zero = {div := λ (q : 𝕜) (n : ℤ), q / ↑n, div_zero := _, div_cancel := _}
A group is ℤ
-rootable if it is ℕ
-rootable.
Equations
- group.rootable_by_int_of_rootable_by_nat A = {root := λ (a : A) (z : ℤ), group.rootable_by_int_of_rootable_by_nat._match_1 A a z, root_zero := _, root_cancel := _}
- group.rootable_by_int_of_rootable_by_nat._match_1 A a -[1+ n] = (rootable_by.root a (n + 1))⁻¹
- group.rootable_by_int_of_rootable_by_nat._match_1 A a ↑n = rootable_by.root a n
An additive group is ℤ
-divisible if it is ℕ
-divisible.
Equations
- add_group.divisible_by_int_of_divisible_by_nat A = {div := λ (a : A) (z : ℤ), add_group.divisible_by_int_of_divisible_by_nat._match_1 A a z, div_zero := _, div_cancel := _}
- add_group.divisible_by_int_of_divisible_by_nat._match_1 A a ↑n = divisible_by.div a n
- add_group.divisible_by_int_of_divisible_by_nat._match_1 A a -[1+ n] = -divisible_by.div a (n + 1)
A group is ℕ
-rootable if it is ℤ
-rootable
Equations
- group.rootable_by_nat_of_rootable_by_int A = {root := λ (a : A) (n : ℕ), rootable_by.root a ↑n, root_zero := _, root_cancel := _}
An additive group is ℕ
-divisible if it ℤ
-divisible.
Equations
- add_group.divisible_by_nat_of_divisible_by_int A = {div := λ (a : A) (n : ℕ), divisible_by.div a ↑n, div_zero := _, div_cancel := _}
If f : A → B
is a surjective homomorphism and A
is α
-rootable, then B
is also α
-rootable.
Equations
- function.surjective.rootable_by f hf hpow = rootable_by_of_pow_left_surj B α _
If f : A → B
is a surjective homomorphism and
A
is α
-divisible, then B
is also α
-divisible.
Equations
- function.surjective.divisible_by f hf hpow = divisible_by_of_smul_right_surj B α _
Any quotient group of a divisible group is divisible
Any quotient group of a rootable group is rootable.