Large groups

Content created by Louis Wasserman.

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

module group-theory.large-groups where
Imports
open import foundation.action-on-identifications-functions
open import foundation.automorphisms
open import foundation.dependent-pair-types
open import foundation.embeddings
open import foundation.equivalences
open import foundation.identity-types
open import foundation.involutions
open import foundation.large-binary-relations
open import foundation.logical-equivalences
open import foundation.propositional-maps
open import foundation.propositions
open import foundation.sets
open import foundation.subtypes
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import group-theory.groups
open import group-theory.homomorphisms-groups
open import group-theory.large-monoids
open import group-theory.monoids
open import group-theory.semigroups

Idea

A large group is a large monoid with an inverse operation i, characterized by i x ∙ x = x ∙ i x = e, where e is the identity element.

Definition

record Large-Group (α : Level  Level) (β : Level  Level  Level) : UUω where
  constructor
    make-Large-Group

  field
    large-monoid-Large-Group : Large-Monoid α β

  type-Large-Group : (l : Level)  UU (α l)
  type-Large-Group = type-Large-Monoid large-monoid-Large-Group

  set-Large-Group : (l : Level)  Set (α l)
  set-Large-Group = set-Large-Monoid large-monoid-Large-Group

  mul-Large-Group :
    {l1 l2 : Level}  type-Large-Group l1  type-Large-Group l2 
    type-Large-Group (l1  l2)
  mul-Large-Group = mul-Large-Monoid large-monoid-Large-Group

  mul-Large-Group' :
    {l1 l2 : Level}  type-Large-Group l1  type-Large-Group l2 
    type-Large-Group (l1  l2)
  mul-Large-Group' x y = mul-Large-Group y x

  ap-mul-Large-Group :
    {l1 l2 : Level}
    {x x' : type-Large-Group l1}  x  x' 
    {y y' : type-Large-Group l2}  y  y' 
    mul-Large-Group x y  mul-Large-Group x' y'
  ap-mul-Large-Group = ap-mul-Large-Monoid large-monoid-Large-Group

  unit-Large-Group : type-Large-Group lzero
  unit-Large-Group = unit-Large-Monoid large-monoid-Large-Group

  sim-prop-Large-Group : Large-Relation-Prop β type-Large-Group
  sim-prop-Large-Group = sim-prop-Large-Monoid large-monoid-Large-Group

  sim-Large-Group : Large-Relation β type-Large-Group
  sim-Large-Group = sim-Large-Monoid large-monoid-Large-Group

  refl-sim-Large-Group :
    {l : Level} (x : type-Large-Group l)  sim-Large-Group x x
  refl-sim-Large-Group = refl-sim-Large-Monoid large-monoid-Large-Group

  sim-eq-Large-Group :
    {l : Level} {x y : type-Large-Group l}  x  y  sim-Large-Group x y
  sim-eq-Large-Group = sim-eq-Large-Monoid large-monoid-Large-Group

  eq-sim-Large-Group :
    {l : Level} (x y : type-Large-Group l)  sim-Large-Group x y  x  y
  eq-sim-Large-Group = eq-sim-Large-Monoid large-monoid-Large-Group

  symmetric-sim-Large-Group :
    {l1 l2 : Level} (x : type-Large-Group l1) (y : type-Large-Group l2) 
    sim-Large-Group x y  sim-Large-Group y x
  symmetric-sim-Large-Group =
    symmetric-sim-Large-Monoid large-monoid-Large-Group

  preserves-sim-left-mul-Large-Group :
    {l1 l2 l3 : Level} (y : type-Large-Group l1)
    (x : type-Large-Group l2) (x' : type-Large-Group l3) 
    sim-Large-Group x x' 
    sim-Large-Group (mul-Large-Group x y) (mul-Large-Group x' y)
  preserves-sim-left-mul-Large-Group =
    preserves-sim-left-mul-Large-Monoid large-monoid-Large-Group

  preserves-sim-right-mul-Large-Group :
    {l1 l2 l3 : Level} (x : type-Large-Group l1)
    (y : type-Large-Group l2) (y' : type-Large-Group l3) 
    sim-Large-Group y y' 
    sim-Large-Group (mul-Large-Group x y) (mul-Large-Group x y')
  preserves-sim-right-mul-Large-Group =
    preserves-sim-right-mul-Large-Monoid large-monoid-Large-Group

  raise-unit-Large-Group : (l : Level)  type-Large-Group l
  raise-unit-Large-Group = raise-unit-Large-Monoid large-monoid-Large-Group

  raise-Large-Group :
    {l1 : Level} (l2 : Level)  type-Large-Group l1  type-Large-Group (l1  l2)
  raise-Large-Group = raise-Large-Monoid large-monoid-Large-Group

  field
    inv-Large-Group : {l : Level}  type-Large-Group l  type-Large-Group l

    preserves-sim-inv-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group l1) (y : type-Large-Group l2) 
      sim-Large-Group x y 
      sim-Large-Group (inv-Large-Group x) (inv-Large-Group y)

    left-inverse-law-mul-Large-Group :
      {l : Level} (x : type-Large-Group l) 
      mul-Large-Group (inv-Large-Group x) x  raise-unit-Large-Group l

    right-inverse-law-mul-Large-Group :
      {l : Level} (x : type-Large-Group l) 
      mul-Large-Group x (inv-Large-Group x)  raise-unit-Large-Group l

open Large-Group public

Properties

Monoid laws

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

  associative-mul-Large-Group :
    {l1 l2 l3 : Level} 
    (x : type-Large-Group G l1) 
    (y : type-Large-Group G l2) 
    (z : type-Large-Group G l3) 
    mul-Large-Group G (mul-Large-Group G x y) z 
    mul-Large-Group G x (mul-Large-Group G y z)
  associative-mul-Large-Group =
    associative-mul-Large-Monoid (large-monoid-Large-Group G)

  left-unit-law-mul-Large-Group :
    {l : Level} (x : type-Large-Group G l) 
    mul-Large-Group G (unit-Large-Group G) x  x
  left-unit-law-mul-Large-Group =
    left-unit-law-mul-Large-Monoid (large-monoid-Large-Group G)

  right-unit-law-mul-Large-Group :
    {l : Level} (x : type-Large-Group G l) 
    mul-Large-Group G x (unit-Large-Group G)  x
  right-unit-law-mul-Large-Group =
    right-unit-law-mul-Large-Monoid (large-monoid-Large-Group G)

Laws of raising universe levels

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

  sim-raise-Large-Group :
    {l1 : Level} (l2 : Level) (x : type-Large-Group G l1) 
    sim-Large-Group G x (raise-Large-Group G l2 x)
  sim-raise-Large-Group = sim-raise-Large-Monoid (large-monoid-Large-Group G)

  sim-raise-Large-Group' :
    {l1 : Level} (l2 : Level) (x : type-Large-Group G l1) 
    sim-Large-Group G (raise-Large-Group G l2 x) x
  sim-raise-Large-Group' = sim-raise-Large-Monoid' (large-monoid-Large-Group G)

  raise-raise-Large-Group :
    {l1 l2 l3 : Level} (x : type-Large-Group G l1) 
    raise-Large-Group G l2 (raise-Large-Group G l3 x) 
    raise-Large-Group G (l2  l3) x
  raise-raise-Large-Group =
    raise-raise-Large-Monoid (large-monoid-Large-Group G)

  raise-left-mul-Large-Group :
    {l1 l2 l3 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    mul-Large-Group G (raise-Large-Group G l3 x) y 
    raise-Large-Group G l3 (mul-Large-Group G x y)
  raise-left-mul-Large-Group =
    raise-left-mul-Large-Monoid (large-monoid-Large-Group G)

  raise-right-mul-Large-Group :
    {l1 l2 l3 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    mul-Large-Group G x (raise-Large-Group G l3 y) 
    raise-Large-Group G l3 (mul-Large-Group G x y)
  raise-right-mul-Large-Group =
    raise-right-mul-Large-Monoid (large-monoid-Large-Group G)

  raise-mul-Large-Group :
    {l1 l2 l3 l4 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    mul-Large-Group G
      ( raise-Large-Group G l3 x)
      ( raise-Large-Group G l4 y) 
    raise-Large-Group G (l3  l4) (mul-Large-Group G x y)
  raise-mul-Large-Group =
    raise-mul-Large-Monoid (large-monoid-Large-Group G)

  raise-left-unit-law-Large-Group :
    {l1 l2 : Level} (x : type-Large-Group G l1) 
    mul-Large-Group G (raise-unit-Large-Group G l2) x 
    raise-Large-Group G l2 x
  raise-left-unit-law-Large-Group =
    raise-left-unit-law-Large-Monoid (large-monoid-Large-Group G)

  raise-right-unit-law-Large-Group :
    {l1 l2 : Level} (x : type-Large-Group G l1) 
    mul-Large-Group G x (raise-unit-Large-Group G l2) 
    raise-Large-Group G l2 x
  raise-right-unit-law-Large-Group =
    raise-right-unit-law-Large-Monoid (large-monoid-Large-Group G)

  raise-unit-lzero-Large-Group :
    raise-unit-Large-Group G lzero  unit-Large-Group G
  raise-unit-lzero-Large-Group =
    raise-unit-lzero-Large-Monoid (large-monoid-Large-Group G)

Similarity reasoning on large groups

module
  similarity-reasoning-Large-Group
    {α : Level  Level} {β : Level  Level  Level} (G : Large-Group α β)
  where

  open similarity-reasoning-Large-Monoid (large-monoid-Large-Group G) public

Inverse laws in terms of similarity

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

  open similarity-reasoning-Large-Group G

  abstract
    sim-left-inverse-law-mul-Large-Group :
      {l : Level} (x : type-Large-Group G l) 
      sim-Large-Group G
        ( mul-Large-Group G (inv-Large-Group G x) x)
        ( unit-Large-Group G)
    sim-left-inverse-law-mul-Large-Group {l} x =
      similarity-reasoning
        mul-Large-Group G (inv-Large-Group G x) x
        ~ raise-unit-Large-Group G l
          by sim-eq-Large-Group G (left-inverse-law-mul-Large-Group G x)
        ~ unit-Large-Group G
          by sim-raise-Large-Group' G _ _

    sim-right-inverse-law-mul-Large-Group :
      {l : Level} (x : type-Large-Group G l) 
      sim-Large-Group G
        ( mul-Large-Group G x (inv-Large-Group G x))
        ( unit-Large-Group G)
    sim-right-inverse-law-mul-Large-Group {l} x =
      similarity-reasoning
        mul-Large-Group G x (inv-Large-Group G x)
        ~ raise-unit-Large-Group G l
          by sim-eq-Large-Group G (right-inverse-law-mul-Large-Group G x)
        ~ unit-Large-Group G
          by sim-raise-Large-Group' G _ _

The inverse of the identity is the identity

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

  abstract
    inv-unit-Large-Group :
      inv-Large-Group G (unit-Large-Group G)  unit-Large-Group G
    inv-unit-Large-Group =
      equational-reasoning
        inv-Large-Group G (unit-Large-Group G)
        
          mul-Large-Group G
            ( inv-Large-Group G (unit-Large-Group G))
            ( unit-Large-Group G)
          by inv (right-unit-law-mul-Large-Group G _)
         raise-unit-Large-Group G lzero
          by left-inverse-law-mul-Large-Group G _
         unit-Large-Group G
          by raise-unit-lzero-Large-Group G

Uniqueness of right inverses

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

  abstract
    unique-right-inv-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      (mul-Large-Group G x y  raise-unit-Large-Group G (l1  l2)) 
      sim-Large-Group G y (inv-Large-Group G x)
    unique-right-inv-Large-Group {l1} {l2} x y xy=1 =
      let
        open similarity-reasoning-Large-Group G
        _*_ = mul-Large-Group G
      in
        similarity-reasoning
          y
          ~ raise-Large-Group G l1 y
            by sim-raise-Large-Group G l1 y
          ~ raise-unit-Large-Group G l1 * y
            by sim-eq-Large-Group G (inv (raise-left-unit-law-Large-Group G _))
          ~ (inv-Large-Group G x * x) * y
            by
              sim-eq-Large-Group G
                ( ap-mul-Large-Group G
                  ( inv (left-inverse-law-mul-Large-Group G x))
                  ( refl))
          ~ inv-Large-Group G x * (x * y)
            by
              sim-eq-Large-Group G (associative-mul-Large-Group G _ _ _)
          ~ inv-Large-Group G x * raise-unit-Large-Group G (l1  l2)
            by sim-eq-Large-Group G (ap-mul-Large-Group G refl xy=1)
          ~ raise-Large-Group G (l1  l2) (inv-Large-Group G x)
            by sim-eq-Large-Group G (raise-right-unit-law-Large-Group G _)
          ~ inv-Large-Group G x
            by sim-raise-Large-Group' G _ _

Uniqueness of left inverses

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

  abstract
    unique-left-inv-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      (mul-Large-Group G x y  raise-unit-Large-Group G (l1  l2)) 
      sim-Large-Group G x (inv-Large-Group G y)
    unique-left-inv-Large-Group {l1} {l2} x y xy=1 =
      let
        open similarity-reasoning-Large-Group G
        _*_ = mul-Large-Group G
      in
        similarity-reasoning
          x
          ~ raise-Large-Group G l2 x
            by sim-raise-Large-Group G l2 x
          ~ x * raise-unit-Large-Group G l2
            by sim-eq-Large-Group G (inv (raise-right-unit-law-Large-Group G x))
          ~ x * (y * inv-Large-Group G y)
            by
              sim-eq-Large-Group G
                ( ap-mul-Large-Group G
                  ( refl)
                  ( inv (right-inverse-law-mul-Large-Group G y)))
          ~ (x * y) * inv-Large-Group G y
            by
              sim-eq-Large-Group G (inv (associative-mul-Large-Group G _ _ _))
          ~ raise-unit-Large-Group G (l1  l2) * inv-Large-Group G y
            by
              sim-eq-Large-Group G (ap-mul-Large-Group G xy=1 refl)
          ~ raise-Large-Group G (l1  l2) (inv-Large-Group G y)
            by sim-eq-Large-Group G (raise-left-unit-law-Large-Group G _)
          ~ inv-Large-Group G y
            by sim-raise-Large-Group' G _ _

Distributivity of inverses over multiplication

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

  abstract
    distributive-inv-mul-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      inv-Large-Group G (mul-Large-Group G x y) 
      mul-Large-Group G (inv-Large-Group G y) (inv-Large-Group G x)
    distributive-inv-mul-Large-Group {l1} {l2} x y =
      inv
        ( let
            open similarity-reasoning-Large-Group G
            _*_ = mul-Large-Group G
            mul-inv = inv-Large-Group G
          in
            eq-sim-Large-Group G _ _
              ( unique-right-inv-Large-Group G _ _
                ( equational-reasoning
                  (x * y) * (mul-inv y * mul-inv x)
                   x * (y * (mul-inv y * mul-inv x))
                    by associative-mul-Large-Group G _ _ _
                   x * ((y * mul-inv y) * mul-inv x)
                    by
                      ap-mul-Large-Group G
                        ( refl)
                        ( inv (associative-mul-Large-Group G _ _ _))
                   x * (raise-unit-Large-Group G l2 * mul-inv x)
                    by
                      ap-mul-Large-Group G
                        ( refl)
                        ( ap-mul-Large-Group G
                          ( right-inverse-law-mul-Large-Group G y)
                          ( refl))
                   x * raise-Large-Group G l2 (mul-inv x)
                    by
                      ap-mul-Large-Group G
                        ( refl)
                        ( raise-left-unit-law-Large-Group G _)
                   raise-Large-Group G l2 (x * mul-inv x)
                    by raise-right-mul-Large-Group G _ _
                   raise-Large-Group G l2 (raise-unit-Large-Group G l1)
                    by
                      ap
                        ( raise-Large-Group G l2)
                        ( right-inverse-law-mul-Large-Group G x)
                   raise-unit-Large-Group G (l1  l2)
                    by raise-raise-Large-Group G _)))

Inverting elements of a large group is an involution

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

  inv-inv-Large-Group :
    {l : Level} (x : type-Large-Group G l) 
    inv-Large-Group G (inv-Large-Group G x)  x
  inv-inv-Large-Group x =
    inv
      ( eq-sim-Large-Group G _ _
        ( unique-right-inv-Large-Group G _ _
          ( left-inverse-law-mul-Large-Group G x)))

  aut-inv-Large-Group : (l : Level)  Aut (type-Large-Group G l)
  aut-inv-Large-Group l =
    ( inv-Large-Group G ,
      is-equiv-is-involution inv-inv-Large-Group)

The raise operation characterizes the similarity relation

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

  sim-iff-eq-raise-Large-Group :
    {l1 l2 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    ( sim-Large-Group G x y) 
    ( raise-Large-Group G l2 x  raise-Large-Group G l1 y)
  sim-iff-eq-raise-Large-Group =
    sim-iff-eq-raise-Large-Monoid (large-monoid-Large-Group G)

  sim-eq-raise-Large-Group :
    {l1 l2 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    (raise-Large-Group G l2 x  raise-Large-Group G l1 y) 
    sim-Large-Group G x y
  sim-eq-raise-Large-Group x y =
    backward-implication (sim-iff-eq-raise-Large-Group x y)

  eq-raise-sim-Large-Group :
    {l1 l2 : Level}
    (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
    sim-Large-Group G x y 
    raise-Large-Group G l2 x  raise-Large-Group G l1 y
  eq-raise-sim-Large-Group x y =
    forward-implication (sim-iff-eq-raise-Large-Group x y)

Small groups from large groups

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

  semigroup-Large-Group : (l : Level)  Semigroup (α l)
  semigroup-Large-Group =
    semigroup-Large-Monoid (large-monoid-Large-Group G)

  monoid-Large-Group : (l : Level)  Monoid (α l)
  monoid-Large-Group =
    monoid-Large-Monoid (large-monoid-Large-Group G)

  group-Large-Group : (l : Level)  Group (α l)
  group-Large-Group l =
    ( semigroup-Large-Group l ,
      ( raise-unit-Large-Group G l ,
        left-unit-law-mul-Monoid (monoid-Large-Group l) ,
        right-unit-law-mul-Monoid (monoid-Large-Group l)) ,
      inv-Large-Group G ,
      left-inverse-law-mul-Large-Group G ,
      right-inverse-law-mul-Large-Group G)

Cancellations in a large group

module _
  {α : Level  Level} {β : Level  Level  Level} (G : Large-Group α β)
  (let _*_ = mul-Large-Group G) (let mul-inv = inv-Large-Group G)
  where

  open similarity-reasoning-Large-Group G

  abstract
    cancel-left-div-mul-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      mul-Large-Group G
        ( inv-Large-Group G x)
        ( mul-Large-Group G x y) 
      raise-Large-Group G l1 y
    cancel-left-div-mul-Large-Group {l1} {l2} x y =
      equational-reasoning
        mul-inv x * (x * y)
         (mul-inv x * x) * y
          by inv (associative-mul-Large-Group G _ _ _)
         raise-unit-Large-Group G l1 * y
          by ap-mul-Large-Group G (left-inverse-law-mul-Large-Group G x) refl
         raise-Large-Group G l1 y
          by raise-left-unit-law-Large-Group G y

    sim-cancel-left-div-mul-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      sim-Large-Group G
        ( mul-Large-Group G (inv-Large-Group G x) (mul-Large-Group G x y))
        ( y)
    sim-cancel-left-div-mul-Large-Group {l1} x y =
      similarity-reasoning
        mul-inv x * (x * y)
        ~ raise-Large-Group G l1 y
          by sim-eq-Large-Group G (cancel-left-div-mul-Large-Group x y)
        ~ y
          by sim-raise-Large-Group' G l1 y

    cancel-left-mul-div-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      mul-Large-Group G
        ( x)
        ( mul-Large-Group G (inv-Large-Group G x) y) 
      raise-Large-Group G l1 y
    cancel-left-mul-div-Large-Group {l1} x y =
      equational-reasoning
        x * (mul-inv x * y)
         mul-inv (mul-inv x) * (mul-inv x * y)
          by ap-mul-Large-Group G (inv (inv-inv-Large-Group G x)) refl
         raise-Large-Group G l1 y
          by cancel-left-div-mul-Large-Group (mul-inv x) y

    sim-cancel-left-mul-div-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      sim-Large-Group G
        ( mul-Large-Group G x (mul-Large-Group G (inv-Large-Group G x) y))
        ( y)
    sim-cancel-left-mul-div-Large-Group x y =
      tr
        ( λ z  sim-Large-Group G (z * (mul-inv x * y)) y)
        ( inv-inv-Large-Group G x)
        ( sim-cancel-left-div-mul-Large-Group (mul-inv x) y)

    cancel-right-mul-div-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      mul-Large-Group G (mul-Large-Group G y x) (inv-Large-Group G x) 
      raise-Large-Group G l1 y
    cancel-right-mul-div-Large-Group {l1} x y =
      equational-reasoning
        (y * x) * mul-inv x
         y * (x * mul-inv x)
          by associative-mul-Large-Group G _ _ _
         y * raise-unit-Large-Group G l1
          by ap-mul-Large-Group G refl (right-inverse-law-mul-Large-Group G x)
         raise-Large-Group G l1 y
          by raise-right-unit-law-Large-Group G y

    sim-cancel-right-mul-div-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      sim-Large-Group G
        ( mul-Large-Group G (mul-Large-Group G y x) (inv-Large-Group G x))
        ( y)
    sim-cancel-right-mul-div-Large-Group {l1} x y =
      similarity-reasoning
        mul-Large-Group G (mul-Large-Group G y x) (inv-Large-Group G x)
        ~ raise-Large-Group G l1 y
          by sim-eq-Large-Group G (cancel-right-mul-div-Large-Group x y)
        ~ y
          by sim-raise-Large-Group' G l1 y

    cancel-right-div-mul-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      mul-Large-Group G (mul-Large-Group G y (inv-Large-Group G x)) x 
      raise-Large-Group G l1 y
    cancel-right-div-mul-Large-Group {l1} x y =
      equational-reasoning
        (y * mul-inv x) * x
         (y * mul-inv x) * mul-inv (mul-inv x)
          by ap-mul-Large-Group G refl (inv (inv-inv-Large-Group G x))
         raise-Large-Group G l1 y
          by cancel-right-mul-div-Large-Group (mul-inv x) y

    sim-cancel-right-div-mul-Large-Group :
      {l1 l2 : Level} (x : type-Large-Group G l1) (y : type-Large-Group G l2) 
      sim-Large-Group G
        ( mul-Large-Group G (mul-Large-Group G y (inv-Large-Group G x)) x)
        ( y)
    sim-cancel-right-div-mul-Large-Group x y =
      tr
        ( λ z  sim-Large-Group G ((y * mul-inv x) * z) y)
        ( inv-inv-Large-Group G x)
        ( sim-cancel-right-mul-div-Large-Group (mul-inv x) y)

Left multiplication by an element of a large group is an embedding

module _
  {α : Level  Level} {β : Level  Level  Level} (G : Large-Group α β)
  {l1 : Level} (l2 : Level) (x : type-Large-Group G l1)
  where

  abstract
    is-prop-map-left-mul-Large-Group :
      is-prop-map (mul-Large-Group G {l2 = l2} x)
    is-prop-map-left-mul-Large-Group y =
      let
        open similarity-reasoning-Large-Group G
        _*_ = mul-Large-Group G
        mul-inv = inv-Large-Group G
      in
        is-prop-all-elements-equal
          ( λ (z , xz=y) (z' , xz'=y) 
            eq-type-subtype
              ( λ zz 
                Id-Prop
                  ( set-Large-Group G (l1  l2))
                  ( mul-Large-Group G x zz)
                  ( y))
              ( eq-sim-Large-Group G _ _
                ( similarity-reasoning
                  z
                  ~ mul-inv x * (x * z)
                    by
                      symmetric-sim-Large-Group G _ _
                        ( sim-cancel-left-div-mul-Large-Group G x z)
                  ~ mul-inv x * (x * z')
                    by
                      sim-eq-Large-Group G
                        ( ap-mul-Large-Group G
                          ( refl)
                          ( xz=y  inv xz'=y))
                  ~ z'
                    by sim-cancel-left-div-mul-Large-Group G x z')))

    is-emb-left-mul-Large-Group : is-emb (mul-Large-Group G {l2 = l2} x)
    is-emb-left-mul-Large-Group =
      is-emb-is-prop-map is-prop-map-left-mul-Large-Group

  emb-left-mul-Large-Group :
    type-Large-Group G l2  type-Large-Group G (l1  l2)
  emb-left-mul-Large-Group =
    ( mul-Large-Group G x , is-emb-left-mul-Large-Group)

Right multiplication by an element of a large group is an embedding

module _
  {α : Level  Level} {β : Level  Level  Level} (G : Large-Group α β)
  {l1 : Level} (l2 : Level) (x : type-Large-Group G l1)
  where

  abstract
    is-prop-map-right-mul-Large-Group :
      is-prop-map (mul-Large-Group' G {l2 = l2} x)
    is-prop-map-right-mul-Large-Group y =
      let
        open similarity-reasoning-Large-Group G
        _*_ = mul-Large-Group G
        mul-inv = inv-Large-Group G
      in
        is-prop-all-elements-equal
          ( λ (z , zx=y) (z' , z'x=y) 
            eq-type-subtype
              ( λ zz 
                Id-Prop
                  ( set-Large-Group G (l1  l2))
                  ( mul-Large-Group G zz x)
                  ( y))
              ( eq-sim-Large-Group G _ _
                ( similarity-reasoning
                  z
                  ~ (z * x) * mul-inv x
                    by
                      symmetric-sim-Large-Group G _ _
                        ( sim-cancel-right-mul-div-Large-Group G x z)
                  ~ (z' * x) * mul-inv x
                    by
                      sim-eq-Large-Group G
                        ( ap-mul-Large-Group G
                          ( zx=y  inv z'x=y)
                          ( refl))
                  ~ z'
                    by sim-cancel-right-mul-div-Large-Group G x z')))

    is-emb-right-mul-Large-Group : is-emb (mul-Large-Group' G {l2 = l2} x)
    is-emb-right-mul-Large-Group =
      is-emb-is-prop-map is-prop-map-right-mul-Large-Group

  emb-right-mul-Large-Group :
    type-Large-Group G l2  type-Large-Group G (l1  l2)
  emb-right-mul-Large-Group =
    ( mul-Large-Group' G x , is-emb-right-mul-Large-Group)

The raise operation is a group homomorphism

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

  hom-raise-Large-Group :
    hom-Group
      ( group-Large-Group G l1)
      ( group-Large-Group G (l1  l2))
  hom-raise-Large-Group =
    ( raise-Large-Group G l2 , inv (raise-mul-Large-Group G _ _))

Raising universe levels is an embedding

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

  emb-raise-Large-Group :
    type-Large-Group G l1  type-Large-Group G (l1  l2)
  emb-raise-Large-Group =
    emb-raise-Large-Monoid (large-monoid-Large-Group G) l1 l2

Recent changes