Documentation

Mathlib.GroupTheory.Divisible

Divisible Group and rootable group #

In this file, we define a divisible add monoid and a rootable monoid with some basic properties.

Main definition #

Main results #

For additive monoids and groups:

and their multiplicative counterparts:

TODO: Show that divisibility implies injectivity in the category of AddCommGroup.

class DivisibleBy (A : Type u_1) (α : Type u_2) [AddMonoid A] [SMul α A] [Zero α] :
Type (max u_1 u_2)

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 0 = 0 for all a ∈ A
  • n • div a n = a for all n ≠ 0 ∈ α and a ∈ A.
Instances
    class RootableBy (A : Type u_1) (α : Type u_2) [Monoid A] [Pow A α] [Zero α] :
    Type (max u_1 u_2)

    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 all a ∈ A
    • (root a n)ⁿ = a for all n ≠ 0 ∈ α and a ∈ A.
    Instances
      theorem smul_right_surj_of_divisibleBy (A : Type u_1) (α : Type u_2) [AddMonoid A] [SMul α A] [Zero α] [DivisibleBy A α] {n : α} (hn : n 0) :
      theorem pow_left_surj_of_rootableBy (A : Type u_1) (α : Type u_2) [Monoid A] [Pow A α] [Zero α] [RootableBy A α] {n : α} (hn : n 0) :
      Function.Surjective fun a => a ^ n
      theorem divisibleByOfSMulRightSurj.proof_2 (A : Type u_2) (α : Type u_1) [AddMonoid A] [SMul α A] [Zero α] (H : ∀ {n : α}, n 0Function.Surjective fun a => n a) :
      ∀ {n : α} (a : A), n 0n (fun a n => if x : n = 0 then 0 else Exists.choose (H n x a)) a n = a
      theorem divisibleByOfSMulRightSurj.proof_1 (A : Type u_1) (α : Type u_2) [AddMonoid A] [SMul α A] [Zero α] (H : ∀ {n : α}, n 0Function.Surjective fun a => n a) :
      ∀ (x : A), (if x : 0 = 0 then 0 else Exists.choose (H 0 x x)) = 0
      noncomputable def divisibleByOfSMulRightSurj (A : Type u_1) (α : Type u_2) [AddMonoid A] [SMul α A] [Zero α] (H : ∀ {n : α}, n 0Function.Surjective fun a => n a) :

      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
        noncomputable def rootableByOfPowLeftSurj (A : Type u_1) (α : Type u_2) [Monoid A] [Pow A α] [Zero α] (H : ∀ {n : α}, n 0Function.Surjective fun a => a ^ n) :

        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
          theorem Pi.divisibleBy.proof_1 {ι : Type u_1} {β : Type u_3} (B : ιType u_2) [(i : ι) → SMul β (B i)] [Zero β] [(i : ι) → AddMonoid (B i)] [(i : ι) → DivisibleBy (B i) β] (_x : (i : ι) → B i) :
          (fun x n i => DivisibleBy.div (x i) n) _x 0 = 0
          theorem Pi.divisibleBy.proof_2 {ι : Type u_2} {β : Type u_1} (B : ιType u_3) [(i : ι) → SMul β (B i)] [Zero β] [(i : ι) → AddMonoid (B i)] [(i : ι) → DivisibleBy (B i) β] :
          ∀ {n : β} (_x : (i : ι) → B i), n 0n (fun x n i => DivisibleBy.div (x i) n) _x n = _x
          instance Pi.divisibleBy {ι : Type u_3} {β : Type u_4} (B : ιType u_5) [(i : ι) → SMul β (B i)] [Zero β] [(i : ι) → AddMonoid (B i)] [(i : ι) → DivisibleBy (B i) β] :
          DivisibleBy ((i : ι) → B i) β
          Equations
          • One or more equations did not get rendered due to their size.
          instance Pi.rootableBy {ι : Type u_3} {β : Type u_4} (B : ιType u_5) [(i : ι) → Pow (B i) β] [Zero β] [(i : ι) → Monoid (B i)] [(i : ι) → RootableBy (B i) β] :
          RootableBy ((i : ι) → B i) β
          Equations
          • One or more equations did not get rendered due to their size.
          theorem Prod.divisibleBy.proof_2 {β : Type u_3} {B : Type u_1} {B' : Type u_2} [SMul β B] [SMul β B'] [Zero β] [AddMonoid B] [AddMonoid B'] [DivisibleBy B β] [DivisibleBy B' β] :
          ∀ {n : β} (_p : B × B'), n 0n (fun p n => (DivisibleBy.div p.fst n, DivisibleBy.div p.snd n)) _p n = _p
          theorem Prod.divisibleBy.proof_1 {β : Type u_3} {B : Type u_1} {B' : Type u_2} [SMul β B] [SMul β B'] [Zero β] [AddMonoid B] [AddMonoid B'] [DivisibleBy B β] [DivisibleBy B' β] (_p : B × B') :
          (fun p n => (DivisibleBy.div p.fst n, DivisibleBy.div p.snd n)) _p 0 = 0
          instance Prod.divisibleBy {β : Type u_3} {B : Type u_4} {B' : Type u_5} [SMul β B] [SMul β B'] [Zero β] [AddMonoid B] [AddMonoid B'] [DivisibleBy B β] [DivisibleBy B' β] :
          DivisibleBy (B × B') β
          Equations
          • One or more equations did not get rendered due to their size.
          instance Prod.rootableBy {β : Type u_3} {B : Type u_4} {B' : Type u_5} [Pow B β] [Pow B' β] [Zero β] [Monoid B] [Monoid B'] [RootableBy B β] [RootableBy B' β] :
          RootableBy (B × B') β
          Equations
          • One or more equations did not get rendered due to their size.
          instance ULift.instDivisibleBy (A : Type u_1) (α : Type u_2) [AddMonoid A] [SMul α A] [Zero α] [DivisibleBy A α] :
          Equations
          • One or more equations did not get rendered due to their size.
          theorem ULift.instDivisibleBy.proof_1 (A : Type u_2) (α : Type u_3) [AddMonoid A] [SMul α A] [Zero α] [DivisibleBy A α] (x : ULift.{u_1, u_2} A) :
          (fun x a => { down := DivisibleBy.div x.down a }) x 0 = 0
          theorem ULift.instDivisibleBy.proof_2 (A : Type u_2) (α : Type u_3) [AddMonoid A] [SMul α A] [Zero α] [DivisibleBy A α] :
          ∀ {n : α} (x : ULift.{u_1, u_2} A), n 0n (fun x a => { down := DivisibleBy.div x.down a }) x n = x
          instance ULift.instRootableBy (A : Type u_1) (α : Type u_2) [Monoid A] [Pow A α] [Zero α] [RootableBy A α] :
          Equations
          • One or more equations did not get rendered due to their size.
          noncomputable def AddCommGroup.divisibleByIntOfSmulTopEqTop (A : Type u_1) [AddCommGroup A] (H : ∀ {n : }, n 0n = ) :

          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
            instance divisibleByIntOfCharZero {𝕜 : Type u_1} [DivisionRing 𝕜] [CharZero 𝕜] :
            Equations
            • divisibleByIntOfCharZero = { div := fun q n => q / n, div_zero := (_ : ∀ (q : 𝕜), q / 0 = 0), div_cancel := (_ : ∀ {n : } (q : 𝕜), n 0n (fun q n => q / n) q n = q) }
            theorem AddGroup.divisibleByIntOfDivisibleByNat.proof_2 (A : Type u_1) [AddGroup A] [DivisibleBy A ] {n : } (a : A) (hn : n 0) :
            n (fun a z => AddGroup.divisibleByIntOfDivisibleByNat.match_1 (fun z => A) z (fun n => DivisibleBy.div a n) fun n => -DivisibleBy.div a (n + 1)) a n = a

            An additive group is -divisible if it is -divisible.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              abbrev AddGroup.divisibleByIntOfDivisibleByNat.match_1 (motive : Sort u_1) :
              (z : ) → ((n : ) → motive (Int.ofNat n)) → ((n : ) → motive (Int.negSucc n)) → motive z
              Equations
              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
                  theorem AddGroup.divisibleByNatOfDivisibleByInt.proof_2 (A : Type u_1) [AddGroup A] [DivisibleBy A ] {n : } (a : A) (hn : n 0) :
                  n (fun a n => DivisibleBy.div a n) a n = a

                  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
                      theorem Function.Surjective.divisibleBy.proof_1 {A : Type u_3} {B : Type u_2} {α : Type u_1} [Zero α] [AddMonoid A] [SMul α A] [SMul α B] [DivisibleBy A α] (f : AB) (hf : Function.Surjective f) (hpow : ∀ (a : A) (n : α), f (n a) = n f a) {n : α} (hn : n 0) (x : B) :
                      a, (fun a => n a) a = x
                      noncomputable def Function.Surjective.divisibleBy {A : Type u_1} {B : Type u_2} {α : Type u_3} [Zero α] [AddMonoid A] [AddMonoid B] [SMul α A] [SMul α B] [DivisibleBy A α] (f : AB) (hf : Function.Surjective f) (hpow : ∀ (a : A) (n : α), f (n a) = n f a) :

                      If f : A → B is a surjective homomorphism and A is α-divisible, then B is also α-divisible.

                      Equations
                      Instances For
                        abbrev Function.Surjective.divisibleBy.match_1 {A : Type u_1} {B : Type u_2} (f : AB) (x : B) (motive : (a, f a = x) → Prop) :
                        (x : a, f a = x) → ((y : A) → (hy : f y = x) → motive (_ : a, f a = x)) → motive x
                        Equations
                        Instances For
                          noncomputable def Function.Surjective.rootableBy {A : Type u_1} {B : Type u_2} {α : Type u_3} [Zero α] [Monoid A] [Monoid B] [Pow A α] [Pow B α] [RootableBy A α] (f : AB) (hf : Function.Surjective f) (hpow : ∀ (a : A) (n : α), f (a ^ n) = f a ^ n) :

                          If f : A → B is a surjective homomorphism and A is α-rootable, then B is also α-rootable.

                          Equations
                          Instances For
                            theorem DivisibleBy.surjective_smul (A : Type u_4) (α : Type u_5) [AddMonoid A] [SMul α A] [Zero α] [DivisibleBy A α] {n : α} (hn : n 0) :
                            theorem RootableBy.surjective_pow (A : Type u_4) (α : Type u_5) [Monoid A] [Pow A α] [Zero α] [RootableBy A α] {n : α} (hn : n 0) :
                            Function.Surjective fun a => a ^ n
                            theorem QuotientAddGroup.divisibleBy.proof_2 {A : Type u_1} [AddCommGroup A] (B : AddSubgroup A) :
                            ∀ (x : A) (x_1 : ), ↑(x_1 x) = ↑(x_1 x)
                            noncomputable instance QuotientAddGroup.divisibleBy {A : Type u_2} [AddCommGroup A] (B : AddSubgroup A) [DivisibleBy A ] :

                            Any quotient group of a divisible group is divisible

                            Equations
                            noncomputable instance QuotientGroup.rootableBy {A : Type u_2} [CommGroup A] (B : Subgroup A) [RootableBy A ] :

                            Any quotient group of a rootable group is rootable.

                            Equations