Integer powers of elements in large groups

Content created by Louis Wasserman.

Created on 2025-10-14.
Last modified on 2025-10-14.

module group-theory.integer-powers-of-elements-large-groups where
Imports
open import elementary-number-theory.addition-integers
open import elementary-number-theory.integers
open import elementary-number-theory.multiplication-integers
open import elementary-number-theory.natural-numbers

open import foundation.action-on-identifications-functions
open import foundation.identity-types
open import foundation.injective-maps
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import group-theory.integer-powers-of-elements-groups
open import group-theory.large-groups
open import group-theory.powers-of-elements-large-groups
open import group-theory.powers-of-elements-large-monoids

Idea

The power operation on a large group is the map n x ↦ xⁿ, which is defined by iteratively multiplying x with itself n times. In this file we consider the case where n is an integer.

Definition

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  int-power-Large-Group :
    {l : Level} → ℤ → type-Large-Group G l → type-Large-Group G l
  int-power-Large-Group {l} = integer-power-Group (group-Large-Group G l)

Properties

The standard embedding of natural numbers in the integers preserves powers of large group elements

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-int-Large-Group :
      {l : Level} (n : ℕ) (x : type-Large-Group G l) →
      int-power-Large-Group G (int-ℕ n) x = power-Large-Group G n x
    int-power-int-Large-Group {l} =
      integer-power-int-Group (group-Large-Group G l)

The integer power x⁰ is the unit element

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-zero-Large-Group :
      {l : Level} (x : type-Large-Group G l) →
      int-power-Large-Group G zero-ℤ x = raise-unit-Large-Group G l
    int-power-zero-Large-Group {l} =
      integer-power-zero-Group (group-Large-Group G l)

x¹ = x

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-one-Large-Group :
      {l : Level} (x : type-Large-Group G l) →
      int-power-Large-Group G one-ℤ x = x
    int-power-one-Large-Group {l} =
      integer-power-one-Group (group-Large-Group G l)

The integer power x⁻¹ is the inverse of x

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-neg-one-Large-Group :
      {l : Level} (x : type-Large-Group G l) →
      int-power-Large-Group G neg-one-ℤ x = inv-Large-Group G x
    int-power-neg-one-Large-Group {l} =
      integer-power-neg-one-Group (group-Large-Group G l)

The integer power xᵐ⁺ⁿ computes to xᵐxⁿ

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    distributive-int-power-add-Large-Group :
      {l : Level} (x : type-Large-Group G l) (m n : ℤ) →
      int-power-Large-Group G (m +ℤ n) x =
      mul-Large-Group G
        ( int-power-Large-Group G m x)
        ( int-power-Large-Group G n x)
    distributive-int-power-add-Large-Group {l} =
      distributive-integer-power-add-Group (group-Large-Group G l)

The integer power x⁻ᵏ is the inverse of the integer power xᵏ

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-neg-Large-Group :
      {l : Level} (k : ℤ) (x : type-Large-Group G l) →
      int-power-Large-Group G (neg-ℤ k) x =
      inv-Large-Group G (int-power-Large-Group G k x)
    int-power-neg-Large-Group {l} =
      integer-power-neg-Group (group-Large-Group G l)

xᵏ⁺¹ = xᵏx and xᵏ⁺¹ = xxᵏ

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-succ-Large-Group :
      {l : Level} (k : ℤ) (x : type-Large-Group G l) →
      int-power-Large-Group G (succ-ℤ k) x =
      mul-Large-Group G (int-power-Large-Group G k x) x
    int-power-succ-Large-Group {l} =
      integer-power-succ-Group (group-Large-Group G l)

    int-power-succ-Large-Group' :
      {l : Level} (k : ℤ) (x : type-Large-Group G l) →
      int-power-Large-Group G (succ-ℤ k) x =
      mul-Large-Group G x (int-power-Large-Group G k x)
    int-power-succ-Large-Group' {l} =
      integer-power-succ-Group' (group-Large-Group G l)

xᵏ⁻¹ = xᵏx⁻¹ and xᵏ⁻¹ = x⁻¹xᵏ

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-pred-Large-Group :
      {l : Level} (k : ℤ) (x : type-Large-Group G l) →
      int-power-Large-Group G (pred-ℤ k) x =
      mul-Large-Group G (int-power-Large-Group G k x) (inv-Large-Group G x)
    int-power-pred-Large-Group {l} =
      integer-power-pred-Group (group-Large-Group G l)

    int-power-pred-Large-Group' :
      {l : Level} (k : ℤ) (x : type-Large-Group G l) →
      int-power-Large-Group G (pred-ℤ k) x =
      mul-Large-Group G (inv-Large-Group G x) (int-power-Large-Group G k x)
    int-power-pred-Large-Group' {l} =
      integer-power-pred-Group' (group-Large-Group G l)

1ᵏ = 1

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    raise-int-power-unit-Large-Group :
      (l : Level) (k : ℤ) →
      int-power-Large-Group G k (raise-unit-Large-Group G l) =
      raise-unit-Large-Group G l
    raise-int-power-unit-Large-Group l =
      integer-power-unit-Group (group-Large-Group G l)

If x commutes with y then so do their integer powers

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  (let _*_ = mul-Large-Group G)
  (let mul-inv = inv-Large-Group G)
  (let
    _^_ : {l : Level} → type-Large-Group G l → ℤ → type-Large-Group G l
    x ^ k = int-power-Large-Group G k x)
  where

  abstract
    commute-int-powers-Large-Group' :
      {l1 l2 : Level} (k : ℤ) →
      (x : type-Large-Group G l1) (y : type-Large-Group G l2) →
      (mul-Large-Group G x y = mul-Large-Group G y x) →
      mul-Large-Group G (int-power-Large-Group G k x) y =
      mul-Large-Group G y (int-power-Large-Group G k x)
    commute-int-powers-Large-Group' {l1} {l2} n x y xy=yx =
      let
        x⁻¹y=yx⁻¹ =
          is-injective-emb
            ( emb-left-mul-Large-Group G (l1 ⊔ l2) x)
            ( equational-reasoning
              x * (mul-inv x * y)
              = raise-Large-Group G l1 y
                by cancel-left-mul-div-Large-Group G x y
              = (y * x) * mul-inv x
                by inv (cancel-right-mul-div-Large-Group G x y)
              = (x * y) * mul-inv x
                by ap-mul-Large-Group G (inv xy=yx) refl
              = x * (y * mul-inv x)
                by associative-mul-Large-Group G _ _ _)
        nonneg-case n =
          equational-reasoning
            (x ^ int-ℕ n) * y
            = power-Large-Group G n x * y
              by ap-mul-Large-Group G (int-power-int-Large-Group G n x) refl
            = y * power-Large-Group G n x
              by
                commute-powers-Large-Monoid'
                  ( large-monoid-Large-Group G)
                  ( n)
                  ( xy=yx)
            = y * (x ^ int-ℕ n)
              by
                ap-mul-Large-Group G
                  ( refl)
                  ( inv (int-power-int-Large-Group G n x))
      in
        ind-ℤ
          ( λ k → (x ^ k) * y = y * (x ^ k))
          ( equational-reasoning
            (x ^ neg-one-ℤ) * y
            = mul-inv x * y
              by ap-mul-Large-Group G (int-power-neg-one-Large-Group G x) refl
            = y * mul-inv x
              by x⁻¹y=yx⁻¹
            = y * (x ^ neg-one-ℤ)
              by
                ap-mul-Large-Group G
                  ( refl)
                  ( inv (int-power-neg-one-Large-Group G x)))
          ( λ n x⁻ⁿy=yx⁻ⁿ →
            equational-reasoning
              (x ^ in-neg-ℤ (succ-ℕ n)) * y
              = ((x ^ in-neg-ℤ n) * mul-inv x) * y
                by
                  ap-mul-Large-Group G
                    ( int-power-pred-Large-Group G (in-neg-ℤ n) x)
                    ( refl)
              = (x ^ in-neg-ℤ n) * (mul-inv x * y)
                by associative-mul-Large-Group G _ _ _
              = (x ^ in-neg-ℤ n) * (y * mul-inv x)
                by ap-mul-Large-Group G refl x⁻¹y=yx⁻¹
              = ((x ^ in-neg-ℤ n) * y) * mul-inv x
                by inv (associative-mul-Large-Group G _ _ _)
              = (y * (x ^ in-neg-ℤ n)) * mul-inv x
                by ap-mul-Large-Group G x⁻ⁿy=yx⁻ⁿ refl
              = y * ((x ^ in-neg-ℤ n) * mul-inv x)
                by associative-mul-Large-Group G _ _ _
              = y * (x ^ in-neg-ℤ (succ-ℕ n))
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( inv (int-power-pred-Large-Group G (in-neg-ℤ n) x)))
          ( nonneg-case 0)
          ( nonneg-case 1)
          ( λ n _ → nonneg-case (succ-ℕ (succ-ℕ n)))
          ( n)

    commute-int-powers-Large-Group'' :
      {l1 l2 : Level} (k : ℤ) →
      (x : type-Large-Group G l1) (y : type-Large-Group G l2) →
      (mul-Large-Group G x y = mul-Large-Group G y x) →
      mul-Large-Group G x (int-power-Large-Group G k y) =
      mul-Large-Group G (int-power-Large-Group G k y) x
    commute-int-powers-Large-Group'' {l1} {l2} n x y xy=yx =
      let
        xy⁻¹=y⁻¹x =
          is-injective-emb
            ( emb-right-mul-Large-Group G (l1 ⊔ l2) y)
            ( equational-reasoning
              (x * mul-inv y) * y
              = raise-Large-Group G l2 x
                by cancel-right-div-mul-Large-Group G y x
              = mul-inv y * (y * x)
                by inv (cancel-left-div-mul-Large-Group G y x)
              = mul-inv y * (x * y)
                by ap-mul-Large-Group G refl (inv xy=yx)
              = (mul-inv y * x) * y
                by inv (associative-mul-Large-Group G _ _ _))
        nonneg-case n =
          equational-reasoning
            x * (y ^ int-ℕ n)
            = x * power-Large-Group G n y
              by ap-mul-Large-Group G refl (int-power-int-Large-Group G n y)
            = power-Large-Group G n y * x
              by
                commute-powers-Large-Monoid''
                  ( large-monoid-Large-Group G)
                  ( n)
                  ( xy=yx)
            = (y ^ int-ℕ n) * x
              by
                ap-mul-Large-Group G
                  ( inv (int-power-int-Large-Group G n y))
                  ( refl)
      in
        ind-ℤ
          ( λ k →
            mul-Large-Group G x (int-power-Large-Group G k y) =
            mul-Large-Group G (int-power-Large-Group G k y) x)
          ( equational-reasoning
            x * (y ^ neg-one-ℤ)
            = x * mul-inv y
              by ap-mul-Large-Group G refl (int-power-neg-one-Large-Group G y)
            = mul-inv y * x
              by xy⁻¹=y⁻¹x
            = (y ^ neg-one-ℤ) * x
              by
                ap-mul-Large-Group G
                  ( inv (int-power-neg-one-Large-Group G y))
                  ( refl))
          ( λ n xy⁻ⁿ=y⁻ⁿx →
            equational-reasoning
              x * (y ^ in-neg-ℤ (succ-ℕ n))
              = x * (mul-inv y * (y ^ in-neg-ℤ n))
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( int-power-pred-Large-Group' G (in-neg-ℤ n) y)
              = (x * mul-inv y) * (y ^ in-neg-ℤ n)
                by inv (associative-mul-Large-Group G _ _ _)
              = (mul-inv y * x) * (y ^ in-neg-ℤ n)
                by ap-mul-Large-Group G xy⁻¹=y⁻¹x refl
              = mul-inv y * (x * (y ^ in-neg-ℤ n))
                by associative-mul-Large-Group G _ _ _
              = mul-inv y * ((y ^ in-neg-ℤ n) * x)
                by ap-mul-Large-Group G refl xy⁻ⁿ=y⁻ⁿx
              = (mul-inv y * (y ^ in-neg-ℤ n)) * x
                by inv (associative-mul-Large-Group G _ _ _)
              = (y ^ in-neg-ℤ (succ-ℕ n)) * x
                by
                  ap-mul-Large-Group G
                    ( inv (int-power-pred-Large-Group' G (in-neg-ℤ n) y))
                    ( refl))
          ( nonneg-case 0)
          ( nonneg-case 1)
          ( λ n _ → nonneg-case (succ-ℕ (succ-ℕ n)))
          ( n)

    commute-int-powers-Large-Group :
      {l1 l2 : Level} (k l : ℤ) →
      {x : type-Large-Group G l1} {y : type-Large-Group G l2} →
      ( mul-Large-Group G x y = mul-Large-Group G y x) →
      ( mul-Large-Group G
          ( int-power-Large-Group G k x)
          ( int-power-Large-Group G l y) =
        mul-Large-Group G
          ( int-power-Large-Group G l y)
          ( int-power-Large-Group G k x))
    commute-int-powers-Large-Group k l {x} {y} xy=yx =
      commute-int-powers-Large-Group' k x _
        ( commute-int-powers-Large-Group'' l x y xy=yx)

If x commutes with y, then integer powers distribute over the product of x and y

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    distributive-int-power-mul-Large-Group :
      {l1 l2 : Level} (k : ℤ) →
      (x : type-Large-Group G l1) (y : type-Large-Group G l2) →
      ( mul-Large-Group G x y = mul-Large-Group G y x) →
      int-power-Large-Group G k (mul-Large-Group G x y) =
      mul-Large-Group G
        ( int-power-Large-Group G k x)
        ( int-power-Large-Group G k y)
    distributive-int-power-mul-Large-Group {l1} {l2} l x y xy=yx =
      let
        _^_ : {l : Level} → type-Large-Group G l → ℤ → type-Large-Group G l
        x ^ k = int-power-Large-Group G k x
        _*_ = mul-Large-Group G
        mul-inv = inv-Large-Group G
        nonneg-case n =
          equational-reasoning
            (x * y) ^ int-ℕ n
            = power-Large-Group G n (x * y)
              by int-power-int-Large-Group G n (x * y)
            = power-Large-Group G n x * power-Large-Group G n y
              by distributive-power-mul-Large-Group G n xy=yx
            = (x ^ int-ℕ n) * (y ^ int-ℕ n)
              by
                ap-mul-Large-Group G
                  ( inv (int-power-int-Large-Group G n x))
                  ( inv (int-power-int-Large-Group G n y))
        x⁻¹y⁻¹=⟨xy⟩⁻¹ =
          eq-sim-Large-Group G _ _
            ( unique-right-inv-Large-Group G (x * y) (mul-inv x * mul-inv y)
              ( equational-reasoning
                (x * y) * (mul-inv x * mul-inv y)
                = (y * x) * (mul-inv x * mul-inv y)
                  by ap-mul-Large-Group G xy=yx refl
                = y * (x * (mul-inv x * mul-inv y))
                  by associative-mul-Large-Group G _ _ _
                = y * raise-Large-Group G l1 (mul-inv y)
                  by
                    ap-mul-Large-Group G
                      ( refl)
                      ( cancel-left-mul-div-Large-Group G x _)
                = raise-Large-Group G l1 (y * mul-inv y)
                  by raise-right-mul-Large-Group G _ _
                = raise-Large-Group G l1 (raise-unit-Large-Group G l2)
                  by
                    ap
                      ( raise-Large-Group G l1)
                      ( right-inverse-law-mul-Large-Group G y)
                = raise-unit-Large-Group G (l1 ⊔ l2)
                  by raise-raise-Large-Group G _))
      in
        ind-ℤ
          ( λ k →
            int-power-Large-Group G k (mul-Large-Group G x y) =
            mul-Large-Group G
              ( int-power-Large-Group G k x)
              ( int-power-Large-Group G k y))
          ( equational-reasoning
            (x * y) ^ neg-one-ℤ
            = mul-inv (x * y)
              by int-power-neg-one-Large-Group G _
            = mul-inv x * mul-inv y
              by inv x⁻¹y⁻¹=⟨xy⟩⁻¹
            = (x ^ neg-one-ℤ) * (y ^ neg-one-ℤ)
              by
                ap-mul-Large-Group G
                  ( inv (int-power-neg-one-Large-Group G x))
                  ( inv (int-power-neg-one-Large-Group G y)))
          ( λ n ⟨xy⟩⁻ⁿ=x⁻ⁿy⁻ⁿ →

            equational-reasoning
              (x * y) ^ in-neg-ℤ (succ-ℕ n)
              = ((x * y) ^ in-neg-ℤ n) * mul-inv (x * y)
                by int-power-pred-Large-Group G (in-neg-ℤ n) (x * y)
              = (( x ^ in-neg-ℤ n) * (y ^ in-neg-ℤ n)) * (mul-inv x * mul-inv y)
                by
                  ap-mul-Large-Group G ⟨xy⟩⁻ⁿ=x⁻ⁿy⁻ⁿ (inv x⁻¹y⁻¹=⟨xy⟩⁻¹)
              = (x ^ in-neg-ℤ n) * ((y ^ in-neg-ℤ n) * (mul-inv x * mul-inv y))
                by
                  associative-mul-Large-Group G _ _ _
              = (x ^ in-neg-ℤ n) * (((y ^ in-neg-ℤ n) * mul-inv x) * mul-inv y)
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( inv (associative-mul-Large-Group G _ _ _))
              =
                (x ^ in-neg-ℤ n) *
                (((y ^ in-neg-ℤ n) * (x ^ neg-one-ℤ)) * mul-inv y)
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( ap-mul-Large-Group G
                      ( ap-mul-Large-Group G
                        ( refl)
                        ( inv (int-power-neg-one-Large-Group G x)))
                      ( refl))
              =
                (x ^ in-neg-ℤ n) *
                (((x ^ neg-one-ℤ) * (y ^ in-neg-ℤ n)) * mul-inv y)
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( ap-mul-Large-Group G
                      ( commute-int-powers-Large-Group G
                        ( in-neg-ℤ n)
                        ( neg-one-ℤ)
                        ( inv xy=yx))
                      ( refl))
              =
                (x ^ in-neg-ℤ n) *
                ((x ^ neg-one-ℤ) * ((y ^ in-neg-ℤ n) * mul-inv y))
                by
                  ap-mul-Large-Group G
                    ( refl)
                    ( associative-mul-Large-Group G _ _ _)
              =
                ((x ^ in-neg-ℤ n) * (x ^ neg-one-ℤ)) *
                ((y ^ in-neg-ℤ n) * mul-inv y)
                by
                  inv (associative-mul-Large-Group G _ _ _)
              = ((x ^ in-neg-ℤ n) * mul-inv x) * (y ^ in-neg-ℤ (succ-ℕ n))
                  by
                    ap-mul-Large-Group G
                      ( ap-mul-Large-Group G
                        ( refl)
                        ( int-power-neg-one-Large-Group G x))
                      ( inv (int-power-pred-Large-Group G (in-neg-ℤ n) y))
              = (x ^ in-neg-ℤ (succ-ℕ n)) * (y ^ in-neg-ℤ (succ-ℕ n))
                by
                  ap-mul-Large-Group G
                    ( inv (int-power-pred-Large-Group G (in-neg-ℤ n) x))
                    ( refl))
          ( nonneg-case 0)
          ( nonneg-case 1)
          ( λ n _ → nonneg-case (succ-ℕ (succ-ℕ n)))
          ( l)

Powers by products of integers are iterated integer powers

module _
  {α : Level → Level} {β : Level → Level → Level} (G : Large-Group α β)
  where

  abstract
    int-power-mul-Large-Group :
      {l1 : Level} (k l : ℤ) (x : type-Large-Group G l1) →
      int-power-Large-Group G (k *ℤ l) x =
      int-power-Large-Group G l (int-power-Large-Group G k x)
    int-power-mul-Large-Group {l1} =
      integer-power-mul-Group (group-Large-Group G l1)

See also

Recent changes