The Mizar article:

Groups

by
Wojciech A. Trybulec

Received July 3, 1990

Copyright (c) 1990 Association of Mizar Users

MML identifier: GROUP_1
[ MML identifier index ]


environ

 vocabulary INT_1, VECTSP_1, ABSVALUE, BINOP_1, FUNCT_1, ARYTM_1, REALSET1,
      RELAT_1, SETWISEO, FINSEQOP, ARYTM_3, CARD_1, FINSET_1, RLVECT_1,
      GROUP_1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, NUMBERS, XCMPLX_0, XREAL_0,
      RELAT_1, FUNCT_1, REAL_1, FUNCT_2, STRUCT_0, RLVECT_1, VECTSP_1, INT_1,
      NAT_1, FINSEQOP, SETWISEO, CARD_1, FINSET_1, BINOP_1, ABSVALUE;
 constructors REAL_1, VECTSP_1, INT_1, NAT_1, FINSEQOP, SETWISEO, BINOP_1,
      ABSVALUE, MEMBERED, XBOOLE_0;
 clusters FINSET_1, VECTSP_1, INT_1, STRUCT_0, RELSET_1, XREAL_0, MEMBERED,
      ZFMISC_1, XBOOLE_0, ORDINAL2;
 requirements NUMERALS, REAL, SUBSET, BOOLE, ARITHM;
 definitions BINOP_1, FINSEQOP, RLVECT_1, VECTSP_1, SETWISEO;
 theorems ABSVALUE, AXIOMS, BINOP_1, CARD_1, FINSEQOP, FUNCT_2, INT_1, NAT_1,
      REAL_1, RLVECT_1, VECTSP_1, ZFMISC_1, STRUCT_0, XCMPLX_0, XCMPLX_1;
 schemes FUNCT_1, FUNCT_2, INT_1, NAT_1, RECDEF_1;

begin

 reserve k,m,n for Nat;
 reserve i,j for Integer;
 reserve S for non empty HGrStr;
 reserve r,r1,r2,s,s1,s2,t,t1,t2 for Element of S;

definition let i be Integer;
 redefine func abs i -> Nat;
 coherence
  proof 0 <= abs i by ABSVALUE:5;
   hence thesis by INT_1:16;
  end;
end;

definition
 let A be non empty set, m be BinOp of A;
 cluster HGrStr(#A,m#) -> non empty;
 coherence by STRUCT_0:def 1;
end;

Lm1:
now set G = HGrStr (# REAL, addreal #);
  A1: now let h,g be Element of G, A,B be Real;
    assume h = A & g = B;
   hence h * g = addreal.(A,B) by VECTSP_1:def 10
              .= A + B by VECTSP_1:def 4;
  end;
 thus for h,g,f being Element of G holds h * g * f = h * (g * f
)
  proof let h,g,f be Element of G;
    reconsider A = h, B = g, C = f as Real;
    A2: h * g = A + B by A1;
    A3: g * f = B + C by A1;
   thus h * g * f = A + B + C by A1,A2
                 .= A + (B + C) by XCMPLX_1:1
                 .= h * (g * f) by A1,A3;
  end;
  reconsider e = 0 as Element of G;
 take e;
 let h be Element of G;
  reconsider A = h as Real;
 thus h * e = A + 0 by A1
           .= h;
 thus e * h = 0 + A by A1
           .= h;
  reconsider g = - A as Element of G;
 take g;
 thus h * g = A + (- A) by A1
           .= e by XCMPLX_0:def 6;
 thus g * h = (- A) + A by A1
           .= e by XCMPLX_0:def 6;
end;

definition
 let IT be non empty HGrStr;
 attr IT is unital means
  :Def1: ex e being Element of IT st
        for h being Element of IT holds
         h * e = h & e * h = h;
 canceled;

 attr IT is Group-like means
  :Def3: ex e being Element of IT st
        for h being Element of IT holds
         h * e = h & e * h = h &
         ex g being Element of IT st h * g = e & g * h = e;
end;

definition
 cluster Group-like -> unital (non empty HGrStr);
 coherence
  proof let IT be non empty HGrStr;
   assume ex e being Element of IT st
        for h being Element of IT holds
         h * e = h & e * h = h &
         ex g being Element of IT st h * g = e & g * h = e;
   hence ex e being Element of IT st
        for h being Element of IT holds
         h * e = h & e * h = h;
  end;
end;

definition
 cluster strict Group-like associative (non empty HGrStr);
  existence
   proof
       HGrStr (# REAL, addreal #) is Group-like associative
      by Def3,Lm1,VECTSP_1:def 16;
    hence thesis;
   end;
end;

definition
 mode Group is Group-like associative (non empty HGrStr);
end;

canceled 4;

theorem
   ((for r,s,t holds (r * s) * t = r * (s * t)) &
   ex t st
    for s1 holds s1 * t = s1 & t * s1 = s1 &
     ex s2 st s1 * s2 = t & s2 * s1 = t) implies S is Group
      by Def3,VECTSP_1:def 16;

theorem
   (for r,s,t holds r * s * t = r * (s * t)) &
  (for r,s holds
   (ex t st r * t = s) & (ex t st t * r = s)) implies
    S is associative Group-like
  proof assume that A1: for r,s,t holds r * s * t = r * (s * t) and
                    A2: for r,s holds (ex t st r * t = s) &
                         (ex t st t * r = s);
   thus for r,s,t holds r * s * t = r * (s * t) by A1;
    consider r;
    consider s1 such that A3: r * s1 = r by A2;
    consider s2 such that A4: s2 * r = r by A2;
    consider t1 such that A5: r * t1 = s1 by A2;
 A6:    ex t2 st t2 * r = s2 by A2;
     A7: s1 = s2 * (r * t1) by A1,A4,A5
          .= s2 by A1,A3,A5,A6;
   take s1;
   let s;
       ex t st t * r = s by A2;
   hence A8: s * s1 = s by A1,A3;
       ex t st r * t = s by A2;
   hence A9: s1 * s = s by A1,A4,A7;
    consider t1 such that A10: s * t1 = s1 by A2;
    consider t2 such that A11: t2 * s = s1 by A2;
    consider r1 such that A12: s * r1 = t1 by A2;
 A13:    ex r2 st r2 * s = t2 by A2;
   take t1;
      t1 = s1 * (s * r1) by A1,A9,A12
      .= t2 * (s * t1) by A1,A11,A12
      .= t2 by A1,A8,A10,A13;
   hence thesis by A10,A11;
  end;

theorem Th7:
 HGrStr (# REAL, addreal #) is associative Group-like
  proof set G = HGrStr (# REAL, addreal #);
    A1: now let h,g be Element of G, A,B be Real;
      assume h = A & g = B;
     hence h * g = addreal.(A,B) by VECTSP_1:def 10
                .= A + B by VECTSP_1:def 4;
    end;
   thus for h,g,f being Element of G
     holds h * g * f = h * (g * f)
    proof let h,g,f be Element of G;
      reconsider A = h, B = g, C = f as Real;
      A2: h * g = A + B by A1;
      A3: g * f = B + C by A1;
     thus h * g * f = A + B + C by A1,A2
                   .= A + (B + C) by XCMPLX_1:1
                   .= h * (g * f) by A1,A3;
    end;
    reconsider e = 0 as Element of G;
   take e;
   let h be Element of G;
    reconsider A = h as Real;
   thus h * e = A + 0 by A1
             .= h;
   thus e * h = 0 + A by A1
             .= h;
    reconsider g = - A as Element of G;
   take g;
   thus h * g = A + (- A) by A1
             .= e by XCMPLX_0:def 6;
   thus g * h = (- A) + A by A1
             .= e by XCMPLX_0:def 6;
  end;

 reserve G for Group-like (non empty HGrStr);
 reserve e,h for Element of G;

definition let G be unital (non empty HGrStr);
 func 1.G -> Element of G means
  :Def4: for h being Element of G
    holds h * it = h & it * h = h;
 existence by Def1;
 uniqueness
  proof let e1,e2 be Element of G;
   assume that
A1: for h being Element of G holds h * e1 = h & e1 * h = h and
A2: for h being Element of G holds h * e2 = h & e2 * h = h;
   thus e1 = e2 * e1 by A2
          .= e2 by A1;
  end;
end;

canceled 2;

theorem
   (for h holds h * e = h & e * h = h) implies e = 1.G by Def4;

 reserve G for Group;
 reserve e,f,g,h for Element of G;

definition let G,h;
 func h" -> Element of G means
  :Def5: h * it = 1.G & it * h = 1.G;
 existence
  proof consider e such that A1: for h holds h * e = h & e * h = h &
                                 ex g st h * g = e & g * h = e by Def3;
    consider g such that A2: h * g = e & g * h = e by A1;
    reconsider g as Element of G;
   take g;
    thus thesis by A1,A2,Def4;
  end;
 uniqueness
  proof let h1,h2 be Element of G;
    assume that A3: h * h1 = 1.G & h1 * h = 1.G and
                A4: h * h2 = 1.G & h2 * h = 1.G;
   thus h1 = 1.G * h1 by Def4
          .= h2 * (h * h1) by A4,VECTSP_1:def 16
          .= h2 by A3,Def4;
  end;
end;

canceled;

theorem
   h * g = 1.G & g * h = 1.G implies g = h" by Def5;

canceled;

theorem Th14:
 h * g = h * f or g * h = f * h implies g = f
  proof assume h * g = h * f or g * h = f * h;
    then h " * (h * g) = h" * h * f or g * h * h" = f * (h * h")
     by VECTSP_1:def 16;
    then h " * (h * g) = 1.G * f or g * (h * h") = f * (h * h")
     by Def5,VECTSP_1:def 16;
    then h " * (h * g) = f or g * 1.G = f * (h * h") by Def4,Def5;
    then h " * h * g = f or g = f * (h * h") by Def4,VECTSP_1:def 16;
    then h " * h * g = f or g = f * 1.G by Def5;
    then 1.G * g = f or g = f by Def4,Def5;
   hence thesis by Def4;
  end;

theorem
   h * g = h or g * h = h implies g = 1.G
  proof h * 1.G = h & 1.G * h = h by Def4;
   hence thesis by Th14;
  end;

theorem Th16:
 (1.G)" = 1.G
  proof (1.G)" * 1.G = 1.G & 1.G * 1.G = 1.G by Def4,Def5;
   hence thesis by Th14;
  end;

theorem Th17:
 h" = g" implies h = g
  proof assume h" = g";
    then h * g" = 1.G & g * g" = 1.G by Def5;
   hence thesis by Th14;
  end;

theorem
   h" = 1.G implies h = 1.G
  proof (1.G)" = 1.G by Th16;
   hence thesis by Th17;
  end;

theorem Th19:
 h"" = h
  proof h" * h"" = 1.G & h" * h = 1.G by Def5;
   hence thesis by Th14;
  end;

theorem Th20:
 h * g = 1.G or g * h = 1.G implies h = g" & g = h"
  proof assume A1: h * g = 1.G or g * h = 1.G;
      h * h" = 1.G & g * g" = 1.G & h" * h = 1.G & g" * g = 1.G by Def5;
   hence thesis by A1,Th14;
  end;

theorem Th21:
 h * f = g iff f = h" * g
  proof
   thus h * f = g implies f = h" * g
    proof h * (h" * g) = h * h" * g by VECTSP_1:def 16
                      .= 1.G * g by Def5
                      .= g by Def4;
     hence thesis by Th14;
    end;
    assume f = h" * g;
   hence h * f = h * h" * g by VECTSP_1:def 16
              .= 1.G * g by Def5
              .= g by Def4;
  end;

theorem Th22:
 f * h = g iff f = g * h"
  proof
   thus f * h = g implies f = g * h"
    proof g * h" * h = g * (h" * h) by VECTSP_1:def 16
                    .= g * 1.G by Def5
                    .= g by Def4;
     hence thesis by Th14;
    end;
    assume f = g * h";
 hence f * h = g * (h" * h) by VECTSP_1:def 16
            .= g * 1.G by Def5
            .= g by Def4;
end;

theorem
   ex f st g * f = h
  proof take g" * h;
   thus thesis by Th21;
  end;

theorem
   ex f st f * g = h
  proof take h * g";
   thus thesis by Th22;
  end;

theorem Th25:
 (h * g)" = g" * h"
  proof
      (g" * h") * (h * g) = g" * h" * h * g by VECTSP_1:def 16
                       .= g" * (h" * h) * g by VECTSP_1:def 16
                       .= g" * 1.G * g by Def5
                       .= g" * g by Def4
                       .= 1.G by Def5;
   hence thesis by Th20;
  end;

theorem Th26:
 g * h = h * g iff (g * h)" = g" * h"
  proof
   thus g * h = h * g implies (g * h)" = g" * h" by Th25;
    assume A1: (g * h)" = g" * h";
     A2: (g * h) * (g * h)" = 1.G by Def5;
       (h * g) * (g * h)" = h * g * g" * h" by A1,VECTSP_1:def 16
                       .= h * (g * g") * h" by VECTSP_1:def 16
                       .= h * 1.G * h" by Def5
                       .= h * h" by Def4
                       .= 1.G by Def5;
   hence thesis by A2,Th14;
  end;

theorem Th27:
 g * h = h * g iff g" * h" = h" * g"
  proof
   thus g * h = h * g implies g" * h" = h" * g"
    proof assume A1: g * h = h * g;
     hence g" * h" = (g * h)" by Th25
                  .= h" * g" by A1,Th26;
    end;
    assume A2: g" * h" = h" * g";
   thus g * h = (g * h)"" by Th19
             .= (h" * g")" by Th25
             .= h"" * g"" by A2,Th25
             .= h * g"" by Th19
             .= h * g by Th19;
  end;

theorem Th28:
 g * h = h * g iff g * h" = h" * g
  proof
   thus g * h = h * g implies g * h" = h" * g
    proof assume A1: g * h = h * g;
        (g * h") * (g" * h) = g * h" * g" * h by VECTSP_1:def 16
                         .= g * (h" * g") * h by VECTSP_1:def 16
                         .= g * (g" * h") * h by A1,Th27
                         .= g * g" * h" * h by VECTSP_1:def 16
                         .= 1.G * h" * h by Def5
                         .= h" * h by Def4
                         .= 1.G by Def5;
      then g * h" = (g" * h)" by Th20
                 .= h" * g"" by Th25;
     hence thesis by Th19;
    end;
    assume g * h" = h" * g;
     then g * (h" * h) = h" * g * h by VECTSP_1:def 16;
     then g * 1.G = h" * g * h by Def5;
     then g = h" * g * h by Def4;
     then g = h" * (g * h) by VECTSP_1:def 16;
     then h * g = h * h" * (g * h) by VECTSP_1:def 16;
     then h * g = 1.G * (g * h) by Def5;
   hence thesis by Def4;
  end;

reserve u for UnOp of the carrier of G;

definition let G;
 func inverse_op(G) -> UnOp of the carrier of G means
  :Def6: it.h = h";
 existence
  proof
    deffunc F(Element of G) = $1";
    consider u such that
    A1: for h being Element of G holds
        u.h = F(h) from LambdaD;
   take u;
   let h;
   thus u.h = h" by A1;
  end;
 uniqueness
  proof let u1,u2 be UnOp of the carrier of G;
    assume A2: for h holds u1.h = h";
    assume A3: for h holds u2.h = h";
       now let h be Element of G;
      thus u1.h = h" by A2
               .= u2.h by A3;
     end;
   hence thesis by FUNCT_2:113;
  end;
end;

canceled 2;

theorem Th31:
 for G being associative (non empty HGrStr)
 holds the mult of G is associative
  proof let G be associative (non empty HGrStr);
   let h,g,f be Element of G;
    set o = the mult of G;
   thus o.(h,o.(g,f)) = o.(h,g * f) by VECTSP_1:def 10
                     .= h * (g * f) by VECTSP_1:def 10
                     .= h * g * f by VECTSP_1:def 16
                     .= o.(h * g,f) by VECTSP_1:def 10
                     .= o.(o.(h,g),f) by VECTSP_1:def 10;
  end;

theorem Th32:
  for G being unital (non empty HGrStr)
 holds 1.G is_a_unity_wrt the mult of G
  proof let G be unital (non empty HGrStr);
    set o = the mult of G;
      now let h be Element of G;
     thus o.(1.G,h) = 1.G * h by VECTSP_1:def 10
                   .= h by Def4;
     thus o.(h,1.G) = h * 1.G by VECTSP_1:def 10
                   .= h by Def4;
    end;
   hence thesis by BINOP_1:11;
  end;

theorem Th33:
   for G being unital (non empty HGrStr)
 holds the_unity_wrt the mult of G = 1.G
  proof let G be unital (non empty HGrStr);
      1.G is_a_unity_wrt the mult of G by Th32;
   hence thesis by BINOP_1:def 8;
  end;

theorem Th34:
   for G being unital (non empty HGrStr)
 holds the mult of G has_a_unity
  proof let G be unital (non empty HGrStr);
   take 1.G;
   thus thesis by Th32;
  end;

theorem Th35:
 inverse_op(G) is_an_inverseOp_wrt the mult of G
  proof let h be Element of G;
   thus (the mult of G).(h,inverse_op(G).h) =
                          h * (inverse_op(G).h) by VECTSP_1:def 10
                       .= h * h" by Def6
                       .= 1.G by Def5
                       .= the_unity_wrt the mult of G by Th33;
   thus (the mult of G).(inverse_op(G).h,h) =
                          (inverse_op(G).h) * h by VECTSP_1:def 10
                       .= h" * h by Def6
                       .= 1.G by Def5
                       .= the_unity_wrt the mult of G by Th33;
  end;

theorem Th36:
 the mult of G has_an_inverseOp
  proof inverse_op(G) is_an_inverseOp_wrt the mult of G by Th35;
   hence thesis by FINSEQOP:def 2;
  end;

theorem
   the_inverseOp_wrt the mult of G = inverse_op(G)
  proof set o = the mult of G;
      o has_a_unity & o is associative & o has_an_inverseOp &
    inverse_op(G) is_an_inverseOp_wrt o by Th31,Th34,Th35,Th36;
   hence thesis by FINSEQOP:def 3;
  end;

definition let G be unital (non empty HGrStr);
 func power G -> Function of [:the carrier of G,NAT:], the carrier of G means
  :Def7: for h being Element of G
   holds it.(h,0) = 1.G & for n holds it.(h,n + 1) = it.(h,n) * h;
 existence
  proof
    defpred P[set,set] means
     ex g0 being Function of NAT, the carrier of G,
            h being Element of G st $1 = h & g0 = $2 &
          g0.0 = 1.G & for n holds g0.(n + 1) = (g0.n) * h;
     A1: for x,y1,y2 be set st x in the carrier of G & P[x,y1] & P[x,y2]
           holds y1 = y2
      proof let x,y1,y2 be set;
        assume x in the carrier of G;
        given g1 being Function of NAT, the carrier of G,
              h being Element of G such that
           A2: x = h and
           A3: g1 = y1 and A4: g1.0 = 1.G and
                             A5: for n holds g1.(n + 1) = (g1.n) * h;
        given g2 being Function of NAT, the carrier of G,
              f being Element of G such that
        A6: x = f and A7: g2 = y2 and A8: g2.0 = 1.G and
                             A9: for n holds g2.(n + 1) = (g2.n) * f;
         defpred P[Nat] means g1.$1 = g2.$1;
         A10: P[0] by A4,A8;
         A11: now let n;
           assume P[n]; then
          g1.(n + 1) = (g2.n) * f by A2,A5,A6
                          .= g2.(n + 1) by A9;
           hence P[n+1];
         end;
         for n holds P[n] from Ind(A10,A11);
       hence thesis by A3,A7,FUNCT_2:113;
      end;
     A12: for x be set st x in the carrier of G
          ex y be set st P[x,y]
      proof let x be set;
        assume x in the carrier of G;
         then reconsider b = x as Element of G;
         deffunc F(Nat,Element of G) = $2 * b;
         consider g0 being Function of NAT, the carrier of G such that
         A13: g0.0 = 1.G and
          A14: for n being Element of NAT holds g0.(n + 1) = F(n,g0.n)
           from LambdaRecExD;
         reconsider y = g0 as set;
       take y;
       take g0;
       take b;
       thus x = b & g0 = y & g0.0 = 1.G by A13;
       let n;
       thus g0.(n + 1) = (g0.n) * b by A14;
      end;
    consider f being Function such that dom f = the carrier of G and
     A15: for x be set st x in the carrier of G holds P[x,f.x]
          from FuncEx(A1,A12);
    defpred P[Element of G,Nat,set] means
          ex g0 being Function of NAT, the carrier of G
            st g0 = f.$1 & $3 = g0.$2;
     A16: for a being Element of G, n being Element of NAT
          ex b being Element of G st P[a,n,b]
      proof let a be Element of G, n be Element of NAT;
        consider g0 being Function of NAT, the carrier of G,
                 h being Element of G such that a = h and
        A17: g0 = f.a and g0.0 = 1.G &
         for n holds g0.(n + 1) = (g0.n) * h by A15;
       take g0.n, g0;
       thus thesis by A17;
      end;
    consider F being Function of [:the carrier of G,NAT:], the carrier of G
     such that
      A18: for a being Element of G,
             n being Element of NAT holds P[a,n,F.[a,n]] from FuncEx2D(A16);
   take F;
   let h be Element of G;
 A19:    ex g1 being Function of NAT, the carrier of G
       st g1 = f.h & F.[h,0] = g1.0
        by A18;
       ex g2 being Function of NAT, the carrier of G,
                  b being Element of G
                  st h = b & g2 = f.h & g2.0 = 1.G &
     for n holds g2.(n + 1) = (g2.n) * b by A15;
   hence F.(h,0) = 1.G by A19,BINOP_1:def 1;
   let n;
 A20:    ex g0 being Function of NAT, the carrier of G
       st g0 = f.h & F.[h,n] = g0.n by A18;
 A21:    ex g1 being Function of NAT, the carrier of G
            st g1 = f.h & F.[h,n + 1] = g1.(n + 1) by A18;
    consider g2 being Function of NAT, the carrier of G,
                  b being Element of G such that
     A22: h = b & g2 = f.h & g2.0 = 1.G and
     A23: for n holds g2.(n + 1) = (g2.n) * b by A15;
   thus F.(h,n + 1) = F.[h,n + 1] by BINOP_1:def 1
                   .= (g2.n) * h by A21,A22,A23
                   .= (F.(h,n)) * h by A20,A22,BINOP_1:def 1;
  end;
 uniqueness
  proof let f,g be Function of [:the carrier of G,NAT:], the carrier of G;
    assume that
    A24: for h being Element of G holds f.(h,0) = 1.G &
                    for n holds f.(h,n + 1) = (f.(h,n)) * h and
    A25: for h being Element of G holds g.(h,0) = 1.G &
                    for n holds g.(h,n + 1) = (g.(h,n)) * h;
       now let h be Element of G,
             n be Element of NAT;
        defpred P[Nat] means f.[h,$1] = g.[h,$1];
        f.[h,0] = f.(h,0) by BINOP_1:def 1
                   .= 1.G by A24
                   .= g.(h,0) by A25
                   .= g.[h,0] by BINOP_1:def 1; then
        A26: P[0];
        A27: now let n;
          assume A28: P[n];
           A29: f.[h,n] = f.(h,n) & g.[h,n] = g.(h,n) by BINOP_1:def 1;
         f.[h,n + 1] = f.(h,n + 1) by BINOP_1:def 1
                         .= (f.(h,n)) * h by A24
                         .= g.(h,n + 1) by A25,A28,A29
                         .= g.[h,n + 1] by BINOP_1:def 1;
          hence P[n+1];
        end;
        for n holds P[n] from Ind(A26,A27);
      hence f.[h,n] = g.[h,n];
     end;
   hence thesis by FUNCT_2:120;
  end;
end;



definition let G,i,h;
 func h |^ i -> Element of G equals
  :Def8:  power(G).(h,abs(i)) if 0 <= i otherwise
        (power(G).(h,abs(i)))";
 correctness;
end;

definition let G,n,h;
 redefine func h |^ n equals
  :Def9:  power(G).(h,n);
 compatibility
  proof let g be Element of G;
A1: n >= 0 by NAT_1:18;
   then abs( n ) = n by ABSVALUE:def 1;
   hence thesis by A1,Def8;
  end;
end;

Lm2: h |^ (n + 1) = h |^ n * h
 proof
  thus h |^ (n + 1) = power(G).(h,n + 1) by Def9
                  .= (power(G).(h,n)) * h by Def7
                  .= h |^ n * h by Def9;
 end;

Lm3: h |^ 0 = 1.G
 proof h |^ 0 = power(G).(h,0) by Def9;
  hence thesis by Def7;
 end;

canceled 4;

theorem Th42:
 (1.G) |^ n = 1.G
proof
 defpred P[Nat] means (1.G) |^ $1 = 1.G;
A1: P[0] by Lm3;
A2: now let n;
  assume P[n];
  then (1.G) |^ (n + 1) = 1.G * 1.G by Lm2
                   .= 1.G by Def4;
  hence P[n+1];
end;
 for n holds P[n] from Ind(A1,A2);
 hence thesis;
end;

theorem
   h |^ 0 = 1.G by Lm3;

theorem Th44:
 h |^ 1 = h
  proof
   thus h |^ 1 = h |^(0 + 1)
             .= h |^ 0 * h by Lm2
             .= 1.G * h by Lm3
             .= h by Def4;
  end;

theorem Th45:
 h |^ 2 = h * h
  proof
   thus h |^ 2 = h |^ (1 + 1)
             .= h |^ 1 * h by Lm2
             .= h * h by Th44;
  end;

theorem
   h |^ 3 = h * h * h
  proof
   thus h |^ 3 = h |^ (2 + 1)
             .= h |^ 2 * h by Lm2

             .= h * h * h by Th45;
  end;

theorem
   h |^ 2 = 1.G iff h" = h
  proof
   thus h |^ 2 = 1.G implies h = h"
    proof assume h |^ 2 = 1.G;
      then h * h = 1.G by Th45;
     hence thesis by Th20;
    end;
    assume h = h";
   hence h |^ 2 = h * h" by Th45
              .= 1.G by Def5;
  end;

theorem Th48:
 h |^ (n + m) = h |^ n * (h |^ m)
 proof
  defpred P[Nat] means
  for n holds h |^ (n + $1) = h |^ n * (h |^ $1);
A1: P[0] proof let n;
 thus h |^ (n + 0) = h |^ n * 1.G by Def4
                 .= h |^ n * (h |^ 0) by Lm3;
end;
A2: for m st P[m] holds P[m+1]
  proof let m;
  assume A3: for n holds h |^ (n + m) = h |^ n * (h |^ m);
 let n;
 thus h |^ (n + (m + 1)) = h |^ (n + m + 1) by XCMPLX_1:1
                       .= h |^ (n + m) * h by Lm2
                       .= h |^ n * (h |^ m) * h by A3
                       .= h |^ n * (h |^ m * h) by VECTSP_1:def 16
                       .= h |^ n * (h |^ (m + 1)) by Lm2;
end;
  for m holds P[m] from Ind(A1,A2);
  hence thesis;
 end;

theorem Th49:
 h |^ (n + 1) = h |^ n * h & h |^ (n + 1) = h * (h |^ n)
  proof
   thus h |^ (n + 1) = h |^ n * h by Lm2;
   thus h |^ (n + 1) = h |^ 1 * (h |^ n) by Th48
                      .= h * (h |^ n) by Th44;
  end;

theorem Th50:
 h |^ (n * m) = h |^ n |^ m
proof
  defpred P[Nat] means for n holds h |^ (n * $1) = h |^ n |^ $1;
A1: P[0] proof let n;
 thus h |^ (n * 0) = 1.G by Lm3
                 .= h |^ n |^ 0 by Lm3;
end;
A2: for m st P[m] holds P[m+1]
  proof let m;
  assume A3: for n holds h |^ (n * m) = h |^ n |^ m;
 let n;
 thus h |^ (n * (m + 1)) = h |^ (n * m + n * 1) by XCMPLX_1:8
                       .= h |^ (n * m) * (h |^ n) by Th48
                       .= h |^ n |^ m * (h |^ n) by A3
                       .= h |^ n |^ m * (h |^ n |^ 1) by Th44
                       .= h |^ n |^ (m + 1) by Th48;
end;
   for m holds P[m] from Ind(A1,A2);
 hence thesis;
end;

theorem Th51:
 h" |^ n = (h |^ n)"
proof
 defpred P[Nat] means h" |^ $1 = (h |^ $1)";
    h" |^ 0 = 1.G by Lm3
            .= (1.G)" by Th16
            .= (h |^ 0)" by Lm3; then
A1: P[0];
A2: now let n;
  assume P[n];
  then h" |^ (n + 1) = (h |^ n)" * h" by Lm2
                  .= (h * (h |^ n))" by Th25
                  .= (h |^ (n + 1))" by Th49;
  hence P[n+1];
end;
 for n holds P[n] from Ind(A1,A2);
 hence thesis;
end;

theorem Th52:
 g * h = h * g implies g * (h |^ n) = h |^ n * g
proof
  defpred P[Nat] means g * h = h * g implies g * (h |^ $1) = h |^ $1 * g;
A1: P[0] proof assume g * h = h * g;
 thus g * (h |^ 0) = g * 1.G by Lm3
                 .= g by Def4
                 .= 1.G * g by Def4
                 .= h |^ 0 * g by Lm3;
end;
A2: for n st P[n] holds P[n+1]
  proof let n;
  assume A3: g * h = h * g implies g * (h |^ n) = h |^ n * g;
  assume A4: g * h = h * g;
 thus g * (h |^ (n + 1)) = g * (h * (h |^ n)) by Th49
                       .= g * h * (h |^ n) by VECTSP_1:def 16
                       .= h * ((h |^ n) * g)by A3,A4,VECTSP_1:def 16
                       .= h * (h |^ n) * g by VECTSP_1:def 16
                       .= h |^ (n + 1) * g by Th49;
end;
  for n holds P[n] from Ind(A1,A2);
 hence thesis;
end;

theorem Th53:
 g * h = h * g implies g |^ n * (h |^ m) = h |^ m * (g |^ n)
proof
  defpred P[Nat] means
    for m st g * h = h * g holds g |^ $1 * (h |^ m) = h |^ m * (g |^ $1);
A1: P[0] proof let m;
  assume g * h = h * g;
 thus g |^ 0 * (h |^ m) = 1.G * (h |^ m)by Lm3
                     .= h |^ m by Def4
                     .= h |^ m * 1.G by Def4
                     .= h |^ m * (g |^ 0) by Lm3;
end;
A2: for n st P[n] holds P[n+1]
proof let n;
  assume
A3: for m st g * h = h * g holds g |^ n * (h |^ m) = h |^ m * (g |^ n);
  let m;
  assume A4: g * h = h * g;
 thus g |^ (n + 1) * (h |^ m) = g * (g |^ n) * (h |^ m) by Th49
                         .= g * ((g |^ n) * (h |^ m)) by VECTSP_1:def 16
                         .= g * ((h |^ m) * (g |^ n)) by A3,A4
                         .= g * (h |^ m) * (g |^ n) by VECTSP_1:def 16
                         .= h |^ m * g * (g |^ n) by A4,Th52
                         .= h |^ m * (g * (g |^ n)) by VECTSP_1:def 16
                         .= h |^ m * (g |^ (n + 1)) by Th49;
end;
   for n holds P[n] from Ind(A1,A2);
 hence thesis;
end;

theorem Th54:
 g * h = h * g implies (g * h) |^ n = g |^ n * (h |^ n)
proof
  defpred P[Nat] means g * h = h * g implies
    (g * h) |^ $1 = g |^ $1 * (h |^ $1);
A1: P[0] proof
  assume g * h = h * g;
  thus (g * h) |^ 0 = 1.G by Lm3
                 .= 1.G * 1.G by Def4
                 .= g |^ 0 * 1.G by Lm3
                 .= g |^ 0 * (h |^ 0) by Lm3;
end;
A2: for n st P[n] holds P[n+1]
 proof let n;
   assume A3: g * h = h * g implies (g * h) |^ n = g |^ n * (h |^ n);
   assume A4: g * h = h * g;
  hence (g * h) |^ (n + 1) = g |^ n * (h |^ n) * (h * g) by A3,Th49
                         .= g |^ n * (h |^ n) * h * g by VECTSP_1:def 16
                         .= g |^ n * ((h |^ n) * h) * g by VECTSP_1:def 16
                         .= g |^ n * (h |^ (n + 1)) * g by Th49
                         .= h |^ (n + 1) * (g |^ n) * g by A4,Th53
                         .= h |^ (n + 1) * ((g |^ n) * g) by VECTSP_1:def 16
                         .= h |^ (n + 1) * (g |^ (n + 1)) by Th49
                         .= g |^ (n + 1) * (h |^ (n + 1)) by A4,Th53;
 end;
 for n holds P[n] from Ind(A1,A2);
 hence thesis;
end;

theorem Th55:
 0 <= i implies h |^ i = h |^ abs(i)
  proof
   assume
A1:  0 <= i;
    then reconsider i as Nat by INT_1:16;
      h |^ i = power(G).(h,abs(i)) by A1,Def8;
   hence thesis by Def9;
  end;

theorem Th56:
 not 0 <= i implies h |^ i = (h |^ abs(i))"
 proof
     h |^ abs(i) = power(G).(h,abs(i)) by Def9;
  hence thesis by Def8;
 end;

canceled 2;

theorem
   i = 0 implies h |^ i = 1.G by Lm3;

theorem Th60:
 i <= 0 implies h |^ i = (h |^ abs(i))"
  proof assume A1: i <= 0;
    per cases by A1;
     suppose i < 0;
      hence thesis by Th56;
     suppose A2: i = 0;
      hence h |^ i = 1.G by Lm3
                .= (1.G)" by Th16
                .= (h |^ 0)" by Lm3
                .= (h |^ abs(i))" by A2,ABSVALUE:def 1;
  end;

theorem
   (1.G) |^ i = 1.G
  proof 0 <= i or not 0 <= i;
    then (1.G) |^ i = (1.G) |^ abs(i) or (1.G) |^ i = ((1.G) |^ abs(i))" &
         (1.G)" = 1.G by Th16,Th55,Th56;
   hence thesis by Th42;
  end;

theorem Th62:
 h |^ (- 1) = h"
  proof
       abs( - 1 ) = - (- 1) & - (- 1) = 1 by ABSVALUE:def 1;
   hence h |^ (- 1) = (h |^ 1)" by Th56
                  .= h" by Th44;
  end;

Lm4: h |^ (- i) = (h |^ i)"
 proof
   per cases;
    suppose A1: i >= 0;
        now per cases by A1,REAL_1:26,50;
       suppose A2: - i < 0;
        hence h |^ (- i) = (h |^ abs( - i ))" by Th56
                      .= (h |^ (- (- i)))" by A2,ABSVALUE:def 1
                      .= (h |^ i)";
       suppose A3: i = 0;
        hence h |^ (- i) = 1.G by Lm3
                       .= (1.G)" by Th16
                       .= (h |^ i)" by A3,Lm3;
      end;
     hence thesis;
    suppose A4: i < 0;
      then h |^ i = (h |^ abs(i))" by Th56;
      then (h |^ i)" = h |^ abs(i) & abs(i) = - i by A4,Th19,ABSVALUE:def 1;
     hence thesis;
 end;

Lm5: j >= 1 or j = 0 or j < 0
 proof
     j < 0 or (j is Nat & (j <> 0 or j = 0)) by INT_1:16;
  hence thesis by RLVECT_1:99;
 end;

Lm6: h |^ (j - 1) = h |^ j * (h |^ (- 1))
 proof
A1:   now per cases by Lm5;
    suppose A2: j >= 1;
      then j >= 1 + 0;
      then A3: j - 1 >= 0 by REAL_1:84;
       A4: - 1 >= - j & 0 >= - 1 by A2,REAL_1:50;
      A5: j >= 0 by A2,AXIOMS:22;
      A6: abs( j - 1 ) + 1 = j - 1 + 1 by A3,ABSVALUE:def 1
                        .= j by XCMPLX_1:27;
      A7: abs( j ) = j & abs( j ) = abs( - j ) by A5,ABSVALUE:17,def 1;
     thus h|^(j - 1) * (h * (h|^(- j)))
               = h|^(j - 1) * h * (h|^(- j)) by VECTSP_1:def 16
              .= h |^ abs( j - 1 ) * h * (h |^ (- j)) by A3,Th55
              .= h |^ abs( j - 1 ) * h * ((h |^ abs( - j ))") by A4,Th60
              .= h |^ (abs( j - 1 ) + 1) * ((h |^ abs( - j ))") by Th49
              .= 1.G by A6,A7,Def5;
    suppose A8: j < 0;
        - 1 < 0 & 0 + 0 = 0;
      then j + (- 1) < 0 by A8,REAL_1:67;
      then A9: j - 1 < 0 by XCMPLX_0:def 8;
      then - (j - 1) > 0 by REAL_1:26,50;
      then A10: 1 - j >= 0 by XCMPLX_1:143;
      A11: - j >= 0 by A8,REAL_1:26,50;
        1 - j = - (j - 1) by XCMPLX_1:143;
      then A12: abs( 1 - j ) = abs( j - 1 ) by ABSVALUE:17;
     thus h |^ (j - 1) * (h * (h |^ (- j))) =
        (h |^ abs( j - 1 ))" * (h * (h |^ (- j))) by A9,Th56
     .= (h |^ abs( j - 1 ))" * (h * (h |^ abs( - j ))) by A11,Th55
     .= (h |^ abs( j - 1 ))" * (h |^ (1 + abs( - j ))) by Th49
     .= (h |^ abs( j - 1 ))" * (h |^ (1 + (- j))) by A11,ABSVALUE:def 1
     .= (h |^ abs( j - 1 ))" * (h |^ (1 - j)) by XCMPLX_0:def 8
     .= (h |^ abs( j - 1 ))" * (h |^ abs( j - 1 )) by A10,A12,ABSVALUE:def 1
     .= 1.G by Def5;
    suppose A13: j = 0;
     hence h |^ (j - 1) * (h * (h |^ (- j))) =
                      h" * (h * (h |^ (- j))) by Th62
                   .= h " * h * (h |^ (- j)) by VECTSP_1:def 16
                   .= 1.G * (h |^ (- j)) by Def5
                   .= h |^ 0 by A13,Def4
                   .= 1.G by Lm3;
   end;

     h|^(j - 1) * (h|^(1 - j)) = h|^(j - 1) * (h|^(- (j - 1))) by XCMPLX_1:143
                              .= h |^ (j - 1) * (h |^ (j - 1))" by Lm4
                              .= 1.G by Def5;
   then h * (h |^ (- j)) = h |^ (1 - j) by A1,Th14;
   then (h |^ (1 - j))" = (h |^ (- j))" * h" by Th25
                      .= (h |^ (- (- j))) * h" by Lm4
                      .= h |^ j * (h |^ (- 1)) by Th62;
   then h |^ j * (h |^ (- 1)) = h |^ (- (1 - j)) by Lm4;
  hence thesis by XCMPLX_1:143;
 end;

Lm7: j >= 0 or j = - 1 or j < - 1
 proof
   per cases;
    suppose j >= 0;
     hence thesis;
    suppose A1: j < 0;
      then - j >= 0 by REAL_1:26,50;
     then reconsider n = - j as Nat by INT_1:16;
        n <> 0 by A1,REAL_1:26;
      then n >= 1 by RLVECT_1:99;
      then n > 1 or n = 1 by REAL_1:def 5;
      then - 1 > - (- j) or - 1 = j by REAL_1:50;
    hence thesis;
 end;

Lm8: h |^ (j + 1) = h |^ j * (h |^ 1)
 proof
A1:   now per cases by Lm7;
    suppose A2: j >= 0;
      then reconsider n = j as Nat by INT_1:16;
       A3: n + 1 >= 0 by NAT_1:37;
       then A4: n + 1 = abs( j + 1 ) by ABSVALUE:def 1;
     thus h |^ (j + 1) * ((h |^ (- 1)) * (h |^ (- j))) =
         h |^ abs( j + 1 ) * ((h |^ (- 1)) * (h |^ (- j))) by A3,Th55
      .= h |^ abs( j + 1 ) * (h" * (h |^ (- j))) by Th62
      .= h |^ abs( j + 1 ) * (h" * (h |^ j)") by Lm4
      .= h |^ abs( j + 1 ) * (h" * (h |^ abs( j ))") by A2,Th55
      .= h |^ abs( j + 1 ) * ((h |^ abs( j ) * h)") by Th25
      .= h |^ abs( j + 1 ) * (h |^ (abs( j ) + 1))" by Th49
      .= h |^ abs( j + 1 ) * (h |^ abs( j + 1 ))" by A2,A4,ABSVALUE:def 1
      .= 1.G by Def5;
    suppose j < - 1;
      then A5:j + 1 < - 1 + 1 by REAL_1:53;
     hence h |^ (j + 1) * ((h |^ (- 1)) * (h |^ (- j))) =
         (h |^ abs( j + 1 ))" * ((h |^ (- 1)) * (h |^ (- j))) by Th56
      .= (h |^ abs( j + 1 ))" * (h" * (h |^ (- j))) by Th62
      .= (h |^ abs( j + 1 ))" * h" * (h |^ (- j)) by VECTSP_1:def 16
      .= (h * (h |^ abs( j + 1 )))" * (h |^ (- j)) by Th25
      .= (h |^ (abs( j + 1 ) + 1))" * (h |^ (- j)) by Th49
      .= (h |^ (- (j + 1) + 1))" * (h |^ (- j)) by A5,ABSVALUE:def 1
      .= (h |^ (1 - (j + 1)))" * (h |^ (- j)) by XCMPLX_0:def 8
      .= (h |^ (1 - j - 1))" * (h |^ (- j)) by XCMPLX_1:36
      .= (h |^ (1 + (- j) - 1))" * (h |^ (- j)) by XCMPLX_0:def 8
      .= (h |^ (- j))" * (h |^ (- j)) by XCMPLX_1:26
      .= 1.G by Def5;
    suppose A6: j = - 1;
     hence h |^ (j + 1) * ((h |^ (- 1)) * (h |^ (- j))) =
         1.G * ((h |^ (- 1)) * (h |^ (- j))) by Lm3
      .= (h |^ (- 1)) * (h |^ (- j)) by Def4
      .= h" * (h |^ (- j)) by Th62
      .= h" * (h |^ j)" by Lm4
      .= h" * h"" by A6,Th62
      .= 1.G by Def5;
   end;

     h |^ (j + 1) * (h |^ (- (j + 1))) = h |^ (j + 1) * (h |^ (j + 1))" by Lm4
                                  .= 1.G by Def5;
   then A7: h |^ (- (j + 1)) = h |^ (- 1) * (h |^ (- j)) by A1,Th14;
  thus h |^ (j + 1) = h |^ (- (- (j + 1)))
                  .= ((h |^ (- 1)) * (h |^ (- j)))" by A7,Lm4
                  .= (h |^ (- j))" * (h |^ (- 1))" by Th25
                  .= h |^ (- (- j)) * (h |^ (- 1))" by Lm4
                  .= h |^ j * (h |^ (- (- 1))) by Lm4
                  .= h |^ j * (h |^ 1);
 end;

theorem Th63:
 h |^ (i + j) = h |^ i * (h |^ j)
proof
  defpred P[Integer] means for i holds h |^ (i + $1) = h |^ i * (h |^ $1);
A1: P[0]
 proof let i;
  thus h |^ (i + 0) = h |^ i * 1.G by Def4
                  .= h |^ i * (h |^ 0) by Lm3;
 end;
A2: for j holds P[j] implies P[j - 1] & P[j + 1]
  proof let j;
  assume A3: for i holds h |^ (i + j) = h |^ i * (h |^ j);
 thus for i holds h |^ (i + (j - 1)) = h |^ i * (h |^ (j - 1))
  proof
   let i;
   thus h |^ (i + (j - 1)) = h |^ (i + j - 1) by XCMPLX_1:29
                     .= h |^ ((i - 1) + j) by XCMPLX_1:29
                     .= h |^ (i - 1) * (h |^ j) by A3
                     .= h |^ i * (h |^ (- 1)) * (h |^ j) by Lm6
                     .= h |^ i * ((h |^ (- 1)) * (h |^ j))
                            by VECTSP_1:def 16
                     .= h |^ i * (h |^ (j + (- 1))) by A3
                     .= h |^ i * (h |^ (j - 1)) by XCMPLX_0:def 8;
  end;
 let i;
 thus h |^ (i + (j + 1)) = h |^ ((i + 1) + j) by XCMPLX_1:1
                       .= h |^ (i + 1) * (h |^ j) by A3
                       .= h |^ i * (h |^ 1) * (h |^ j) by Lm8
                       .= h |^ i * ((h |^ 1) * (h |^ j)) by VECTSP_1:def 16
                       .= h |^ i * (h |^ (j + 1)) by A3;
end;
 for j holds P[j] from Int_Ind_Full(A1,A2);
 hence thesis;
end;

theorem
   h |^ (n + j) = h |^ n * (h |^ j) by Th63;

theorem
   h |^ (i + m) = h |^ i * (h |^ m) by Th63;

theorem
   h |^ (j + 1) = h |^ j * h & h |^ (j + 1) = h * (h |^ j)
  proof h |^ 1 = h & h |^ (j + 1) = h |^ j * (h |^ 1) &
        h |^ (1 + j) = h |^ 1 * (h |^ j) by Th44,Th63;
   hence thesis;
  end;

Lm9: h" |^ i = (h |^ i)"
 proof
   per cases;
    suppose i >= 0;
      then reconsider n = i as Nat by INT_1:16;
     thus h" |^ i = (h |^ n)" by Th51
                .= (h |^ i)";
    suppose A1: i < 0;
     hence h" |^ i = (h" |^ abs(i))" by Th56
                    .= h"" |^ abs(i) by Th51
                    .= h |^ abs(i) by Th19
                    .= (h |^ abs(i))"" by Th19
                    .= (h |^ i)" by A1,Th56;

 end;

theorem Th67:
 h |^ (i * j) = h |^ i |^ j
  proof
   per cases;
     suppose i >= 0 & j >= 0;
       then reconsider m = i, n = j as Nat by INT_1:16;
      thus h |^ (i * j) = h |^ m |^ n by Th50
                      .= h |^ i |^ j;
     suppose i >= 0 & j < 0;
        then i >= 0 & - j >= 0 by REAL_1:26,50;
       then reconsider m = i, n = - j as Nat by INT_1:16;
           i * j = - (- (i * j))
              .= - ((- 1) * (i * j)) by XCMPLX_1:180
              .= - (i * ((- 1) * j)) by XCMPLX_1:4
              .= - (i * n) by XCMPLX_1:180;
      hence h |^ (i * j) = (h |^ (i * n))" by Lm4
                       .= h" |^ (i * n) by Lm9
                       .= h" |^ m |^ n by Th50
                       .= (h |^ i)" |^ n by Lm9
                       .= ((h |^ i)" |^ j)" by Lm4
                       .= (h |^ i |^ j)"" by Lm9
                       .= h |^ i |^ j by Th19;
     suppose i < 0 & j >= 0;
        then - i >= 0 & j >= 0 by REAL_1:26,50;
       then reconsider m = - i, n = j as Nat by INT_1:16;
           i * j = - (- (i * j))
              .= - ((- 1) * (i * j)) by XCMPLX_1:180
              .= - ((- 1) * i * j) by XCMPLX_1:4
              .= - (m * j) by XCMPLX_1:180;
      hence h |^ (i * j) = (h |^ (m * j))" by Lm4
                       .= h" |^ (m * j) by Lm9
                       .= h" |^ m |^ n by Th50
                       .= (h" |^ i)" |^ n by Lm4
                       .= (h |^ i)"" |^ j by Lm9
                       .= h |^ i |^ j by Th19;
     suppose j < 0 & i < 0;
        then - j >= 0 & - i >= 0 by REAL_1:26,50;
       then reconsider m = - i, n = - j as Nat by INT_1:16;
          i * j * ((- 1) * (- 1)) = i * ((- 1) * (- j)) by XCMPLX_1:181
                                  .= (- 1) * i * (- j) by XCMPLX_1:4
                                  .= m * n by XCMPLX_1:180;
      hence h |^ (i * j) = h |^ m |^ n by Th50
                      .= (h |^ (- i) |^ j)" by Lm4
                      .= ((h |^ i)" |^ j)" by Lm4
                      .= (h" |^ i |^ j)" by Lm9
                      .= ((h" |^ i)") |^ j by Lm9
                      .= h"" |^ i |^ j by Lm9
                      .= h |^ i |^ j by Th19;
  end;

theorem
   h |^ (n * j) = h |^ n |^ j by Th67;

theorem
   h |^ (i * m) = h |^ i |^ m by Th67;

theorem
   h |^ (- i) = (h |^ i)" by Lm4;

theorem
   h |^ (- n) = (h |^ n)" by Lm4;

theorem
   h" |^ i = (h |^ i)" by Lm9;

theorem Th73:
 g * h = h * g implies (g * h) |^ i = g |^ i * (h |^ i)
  proof assume A1: g * h = h * g;
    per cases;
     suppose i >= 0;
       then (g * h) |^ i = (g * h) |^ abs(i) &
            g |^ i = g |^ abs(i) & h |^ i = h |^ abs(i) by Th55;
      hence thesis by A1,Th54;
     suppose A2: i < 0;
      hence (g * h) |^ i = ((h * g) |^ abs(i))" by A1,Th56
                      .= (h |^ abs(i) * (g |^ abs(i)))" by A1,Th54
                      .= (g |^ abs(i))" * (h |^ abs(i))" by Th25
                      .= g |^ i * (h |^ abs(i))" by A2,Th56
                      .= g |^ i * (h |^ i) by A2,Th56;
  end;

theorem Th74:
 g * h = h * g implies g |^ i * (h |^ j) = h |^ j * (g |^ i)
  proof assume A1: g * h = h * g;
    per cases;
     suppose i >= 0 & j >= 0;
       then g |^ i = g |^ abs(i) & h |^ j = h |^ abs( j ) by Th55;
      hence thesis by A1,Th53;
     suppose i >= 0 & j < 0;
       then A2: g |^ i = g |^ abs(i) & h |^ j = (h |^ abs( j ))" by Th55,Th56;
         g|^abs(i) * (h|^abs( j )) = h|^abs( j ) * (g|^abs(i)) by A1,Th53;
      hence thesis by A2,Th28;
     suppose i < 0 & j >= 0;
       then A3: g |^ i = (g |^ abs(i))" & h |^ j = h |^ abs( j ) by Th55,Th56;
         g|^abs(i) * (h|^abs( j )) = h|^abs( j ) * (g|^abs(i)) by A1,Th53;
      hence thesis by A3,Th28;
     suppose i < 0 & j < 0;
       then A4: g |^ i = (g |^ abs(i))" & h |^ j = (h |^ abs( j ))" by Th56;
      hence g |^ i * (h |^ j) = (h |^ abs( j ) * (g |^ abs(i)))" by Th25
                           .= (g |^ abs(i) * (h |^ abs( j )))" by A1,Th53
                           .= h |^ j * (g |^ i) by A4,Th25;
  end;

theorem
   g * h = h * g implies g |^ n * (h |^ j) = h |^ j * (g |^ n) by Th74;

canceled;

theorem
   g * h = h * g implies g * (h |^ i) = h |^ i * g
  proof assume A1: g * h = h * g;
   thus g * (h |^ i) = g |^ 1 * (h |^ i) by Th44
                   .= h |^ i * (g |^ 1) by A1,Th74
                   .= h |^ i * g by Th44;
  end;

definition let G,h;
 attr h is being_of_order_0 means
  :Def10: h |^ n = 1.G implies n = 0;
 antonym h is_not_of_order_0;
  synonym h is_of_order_0;
end;

canceled;

theorem Th79:
 1.G is_not_of_order_0
  proof (1.G) |^ 8 = 1.G & 0 <> 8 by Th42;
   hence thesis by Def10;
  end;

definition let G,h;
 func ord h -> Nat means
  :Def11: it = 0 if h is_of_order_0 otherwise
         h |^ it = 1.G & it <> 0 &
          for m st h |^ m = 1.G & m <> 0 holds it <= m;
 existence
  proof
    defpred P[Nat] means h |^ $1 = 1.G & $1 <> 0;
    per cases;
     suppose h is_of_order_0;
      hence thesis;
     suppose not h is_of_order_0;
        then A1: ex n st P[n] by Def10;
       consider k such that A2: P[k] &
        for n st P[n] holds k <= n from Min(A1);
      thus thesis by A2;
  end;
 uniqueness
  proof let n1,n2 be Nat;
   thus h is_of_order_0 & n1 = 0 & n2 = 0 implies n1 = n2;
    assume that not h is_of_order_0 and
                A3: h |^ n1 = 1.G & n1 <> 0 &
                    for m st h |^ m = 1.G & m <> 0 holds n1 <= m and
                A4: h |^ n2 = 1.G & n2 <> 0 &
                    for m st h |^ m = 1.G & m <> 0 holds n2 <= m;
       n1 <= n2 & n2 <= n1 by A3,A4;
   hence n1 = n2 by AXIOMS:21;
  end;
 correctness;
end;

canceled 2;

theorem Th82:
 h |^ ord h = 1.G
  proof
    per cases;
     suppose h is_of_order_0;
       then ord h = 0 by Def11;
      hence thesis by Lm3;
     suppose h is_not_of_order_0;
      hence thesis by Def11;
  end;

canceled;

theorem
   ord 1.G = 1
  proof A1: not 1.G is_of_order_0 by Th79;
    A2: (1.G) |^ 1 = 1.G & 1 <> 0 by Th42;
      for n st (1.G) |^ n = 1.G & n <> 0 holds 1 <= n by RLVECT_1:99;
   hence thesis by A1,A2,Def11;
  end;

theorem
   ord h = 1 implies h = 1.G
  proof assume A1: ord h = 1;
    then not h is_of_order_0 by Def11;
    then h |^ 1 = 1.G by A1,Def11;
   hence thesis by Th44;
  end;

theorem
   h |^ n = 1.G implies ord h divides n
proof
  defpred P[Nat] means h |^ $1 = 1.G implies ord h divides $1;
A1: for n st for k st k < n holds P[k] holds P[n]
proof let n;
  assume A2: for k st k < n holds h |^ k = 1.G implies ord h divides k;
  assume A3: h |^ n = 1.G;
    per cases;
     suppose n = 0;
      hence thesis by NAT_1:53;
     suppose A4: n <> 0;
         now per cases;
        suppose ord h = 0;
          then h is_of_order_0 by Def11;
         hence thesis by A3,A4,Def10;
        suppose A5: ord h <> 0;
           then h is_not_of_order_0 by Def11;
           then ord h <= n by A3,A4,Def11;
          then consider m such that A6: n = ord h + m by NAT_1:28;
           A7: h |^ n = h |^ ord h * (h |^ m) by A6,Th48
                   .= 1.G * (h |^ m) by Th82
                   .= h |^ m by Def4;
             m < n by A5,A6,RLVECT_1:102;
           then ord h divides m by A2,A3,A7;
          then consider i being Nat such that A8: m = ord h * i by NAT_1:def 3;
             n = ord h * 1 + ord h * i by A6,A8
            .= ord h * (1 + i) by XCMPLX_1:8;
         hence thesis by NAT_1:def 3;
       end;
      hence thesis;
end;
    for n holds P[n] from Comp_Ind(A1);
 hence thesis;
end;

definition let G;
 func Ord G -> Cardinal equals
      Card(the carrier of G);
 correctness;
end;

definition let S be 1-sorted;
  attr S is finite means
  :Def13: the carrier of S is finite;
 antonym S is infinite;
end;

definition let G;
 assume
A1:  G is finite;
 func ord G -> Nat means
  :Def14: ex B being finite set st B = the carrier of G & it = card B;
 existence
  proof
    reconsider B = the carrier of G as finite set by A1,Def13;
   take card B, B;
   thus thesis;
  end;
 correctness;
end;

canceled 3;

theorem
   G is finite implies ord G >= 1
  proof
  assume A1: G is finite;
    consider g being Element of G;
     reconsider B = the carrier of G as finite set by A1,Def13;
       {g} c= the carrier of G & card{g} = 1 by CARD_1:79,ZFMISC_1:37;
     then 1 <= card B by CARD_1:80;
   hence thesis by A1,Def14;
  end;

  reconsider G0 = HGrStr (# REAL, addreal #) as Group by Th7;

definition
 cluster strict commutative Group;
  existence
   proof take G0; thus G0 is strict;
    let a,g be Element of G0;
      reconsider A = a, B = g as Real;
    thus a * g = addreal.(A,B) by VECTSP_1:def 10
            .= B + A by VECTSP_1:def 4
            .= addreal.(g,a) by VECTSP_1:def 4
            .= g * a by VECTSP_1:def 10;
   end;
end;

canceled;

theorem
   HGrStr (# REAL, addreal #) is commutative Group
  proof reconsider G = HGrStr (# REAL, addreal #) as Group by Th7;
      G is commutative
     proof
      let h,g be Element of G;
       reconsider A = h, B = g as Real;
      thus h * g = addreal.(A,B) by VECTSP_1:def 10
                 .= B + A by VECTSP_1:def 4
                 .= addreal.(g,h) by VECTSP_1:def 4
                 .= g * h by VECTSP_1:def 10;
     end;
   hence thesis;
  end;

reserve A for commutative Group;
reserve a,b for Element of A;

canceled;

theorem
   (a * b)" = a" * b" by Th25;

theorem
   (a * b) |^ n = a |^ n * (b |^ n) by Th54;

theorem
   (a * b) |^ i = a |^ i * (b |^ i) by Th73;

definition
 let A be non empty set, m be BinOp of A, u be Element of A;
 cluster LoopStr(#A,m,u#) -> non empty;
 coherence by STRUCT_0:def 1;
end;

theorem
   LoopStr (# the carrier of A, the mult of A, 1.A #)
             is Abelian add-associative right_zeroed right_complementable
  proof set G = LoopStr (# the carrier of A, the mult of A, 1.A #);
  thus G is Abelian
   proof let a,b be Element of G;
    reconsider x = a, y = b as Element of A;
     A1: now let a,b be Element of G,
          x,y be Element of A;
       assume a = x & b = y;
      hence a + b = (the mult of A).(x,y) by RLVECT_1:5
                 .= x * y by VECTSP_1:def 10;
     end;
   hence a + b = x * y
             .= b + a by A1;
   end;
A2: now let a,b be Element of G,
        x,y be Element of A;
      assume a = x & b = y;
      hence a + b = (the mult of A).(x,y) by RLVECT_1:5
                 .= x * y by VECTSP_1:def 10;
     end;
   hereby let a,b,c be Element of G;
    reconsider x = a, y = b, z = c as Element of A;
     A3: a + b = x * y & b + c = y * z by A2;
   hence a + b + c = x * y * z by A2
                  .= x * (y * z) by VECTSP_1:def 16
                  .= a + (b + c) by A2,A3;
   end;
A4:  0.G = 1.A by RLVECT_1:def 2;
   hereby let a be Element of G;
    reconsider x = a as Element of A;
    thus a + 0.G = x * 1.A by A2,A4
                .= a by Def4;
   end;
   let a be Element of G;
   reconsider x = a as Element of A;
   reconsider b = inverse_op(A).x as Element of G;
   take b;
   thus a + b = x * inverse_op(A).x by A2
              .= x * x" by Def6
              .= 0.G by A4,Def5;
  end;

reserve B for AbGroup;

theorem
   HGrStr (# the carrier of B, the add of B #) is commutative Group
  proof set G = HGrStr (# the carrier of B, the add of B #);
    A1: now let a,b be Element of G,
       x,y be Element of B;
      assume a = x & b = y;
     hence a * b = (the add of B).(x,y) by VECTSP_1:def 10
                .= x + y by RLVECT_1:5;
    end;
    A2: G is associative Group-like
     proof
      thus for a,b,c being Element of G
        holds a * b * c = a * (b * c)
       proof let a,b,c be Element of G;
         reconsider x = a, y = b, z = c as Element of B;
          A3: a * b = x + y & b * c = y + z by A1;
        hence a * b * c = x + y + z by A1
                      .= x + (y + z) by RLVECT_1:def 6
                      .= a * (b * c) by A1,A3;
       end;
       reconsider e = 0.B as Element of G;
      take e;
      let a be Element of G;
       reconsider x = a as Element of B;
      thus a * e = x + 0.B by A1
                .= a by RLVECT_1:10;
      thus e * a = x + 0.B by A1
                .= a by RLVECT_1:10;
       reconsider b = - x as Element of G;
      take b;
      thus a * b = x + (- x) by A1
                .= e by RLVECT_1:16;
      thus b * a = x + (- x) by A1
                .= e by RLVECT_1:16;
     end;
      now let a,b be Element of G;
      reconsider x = a, y = b as Element of B;
     thus a * b = y + x by A1
               .= b * a by A1;
    end;
   hence thesis by A2,VECTSP_1:def 17;
  end;

Back to top