THEOREM
*******
ALL(a):ALL(b):[a
e n & b e n => [~a=0
& ~b=0 => 0^a * 0^b = 0^(a+b)]]
This machine-verified, formal
proof was written with the aid of the author's DC Proof 2.0 freeware available
at http://www.dcproof.com 
Dan Christensen
2019-10-26
AXIOMS/DEFINTITIONS
*******************
Define: n, 0, 1
1     Set(n)
      Axiom
2     0 e n
      Axiom
3     1 e n
      Axiom
Properties of +
***************
Closed on n
4     ALL(a):ALL(b):[a e n & b e n => a+b e n]
      Axiom
Adding 0
5     ALL(a):[a e n => a+0=a]
      Axiom
+ Commutative
6     ALL(a):ALL(b):[a e n & b e n => a+b=b+a]
      Axiom
+ Associative
7     ALL(a):ALL(b):ALL(c):[a e n & b e n & c e n => a+b+c=a+(b+c)]
      Axiom
8     ALL(a):ALL(b):[a e n & b e n => [~a=0 & ~b=0 => ~a+b=0]]
      Axiom
Properties of *
***************
Closed on n
9     ALL(a):ALL(b):[a e n & b e n => a*b e n]
      Axiom
Multiplying by 0
10   ALL(a):[a e n => a*0=0]
      Axiom
Multiplying by 1
11   ALL(a):[a e n => a*1=a]
      Axiom
* Associative
12   ALL(a):ALL(b):ALL(c):[a e n & b e n & c e n =>
a*b*c=a*(b*c)]
      Axiom
* Commutative
13   ALL(a):ALL(b):[a e n & b e n => a*b=b*a]
      Axiom
Define: ^ on n
**************
14   ALL(a):ALL(b):[a e n & b e n => [~[a=0 & b=0] => a^b e n]]
      Axiom
15   0^1=0
      Axiom
16   ALL(a):[a e n => [~a=0 => a^0=1]]
      Axiom
17   ALL(a):ALL(b):[a e n & b e n
    =>
[~[a=0 & b=0] => a^(b+1)=a^b*a]]
      Axiom
Principle of Mathematical
Induction
***********************************
18   ALL(a):[Set(a) & ALL(b):[b e a => b e n]
    =>
[0 e a & ALL(b):[b e a => b+1 e a]
    =>
ALL(b):[b e n => b e a]]]
      Axiom
    
    PROOF
    *****
    
    Suppose...
      19   x e n & y e n & ~x=0
            Premise
      20   x e n
            Split, 19
      21   y e n
            Split, 19
      22   ~x=0
            Split, 19
    Construct p
    
    Apply Subset Axiom
      23   EXIST(sub):[Set(sub) & ALL(c):[c e sub <=> c e n & x^(y+c)=x^y*x^c]]
            Subset, 1
      24   Set(p) & ALL(c):[c e p <=> c e n & x^(y+c)=x^y*x^c]
            E Spec, 23
    
    Define: p
      25   Set(p)
            Split, 24
      26   ALL(c):[c e p <=> c e n & x^(y+c)=x^y*x^c]
            Split, 24
    Apply Principle of Mathematical Induction of set p
      27   Set(p) & ALL(b):[b e p => b e n]
         =>
[0 e p & ALL(b):[b e p => b+1 e p]
         =>
ALL(b):[b e n => b e p]]
            U Spec, 18
         
         Prove: ALL(b):[b e p => b e n]
         
         Suppose...
            28   t e p
                  Premise
         
         Apply definition of p
            29   t e p <=> t e n & x^(y+t)=x^y*x^t
                  U Spec, 26
            30   [t e p => t e n & x^(y+t)=x^y*x^t]
             &
[t e n & x^(y+t)=x^y*x^t => t e p]
                  Iff-And, 29
            31   t e p => t e n & x^(y+t)=x^y*x^t
                  Split, 30
            32   t e n & x^(y+t)=x^y*x^t => t e p
                  Split, 30
            33   t e n & x^(y+t)=x^y*x^t
                  Detach, 31, 28
            34   t e n
                  Split, 33
    As Required:
      35   ALL(b):[b e p => b e n]
            4 Conclusion, 28
      36   Set(p) & ALL(b):[b e p => b e n]
            Join, 25, 35
    
    Sufficient: For ALL(b):[b e n => b e p]
      37   0 e p & ALL(b):[b e p => b+1 e p]
         =>
ALL(b):[b e n => b e p]
            Detach, 27, 36
    
    BASE CASE
    *********
    
    Prove: 0 e p
      38   0 e p <=> 0 e n & x^(y+0)=x^y*x^0
            U Spec, 26
      39   [0 e p => 0 e n & x^(y+0)=x^y*x^0]
         &
[0 e n & x^(y+0)=x^y*x^0 => 0 e p]
            Iff-And, 38
      40   0 e p => 0 e n & x^(y+0)=x^y*x^0
            Split, 39
    Sufficient: For 0 e p
      41   0 e n & x^(y+0)=x^y*x^0 => 0 e p
            Split, 39
    Apply definition of ^ on n
      42   ALL(b):[x e n & b e n => [~[x=0 & b=0] => x^b e n]]
            U Spec, 14
      43   x e n & y e n => [~[x=0 & y=0] => x^y e n]
            U Spec, 42
      44   x e n & y e n
            Join, 20, 21
      45   ~[x=0 & y=0] => x^y e n
            Detach, 43, 44
         
         Prove: ~[x=0 & y=0]
         
         Suppose to the contrary...
            46   x=0 & y=0
                  Premise
            47   x=0
                  Split, 46
            48   y=0
                  Split, 46
            49   x=0 & ~x=0
                  Join, 47, 22
    As Required:
      50   ~[x=0 & y=0]
            4 Conclusion, 46
      51   x^y e n
            Detach, 45, 50
      52   x^y=x^y
            Reflex, 51
      53   y e n => y+0=y
            U Spec, 5
      54   y+0=y
            Detach, 53, 21
      55   x^(y+0)=x^y
            Substitute, 54,
52
      56   x^y e n => x^y*1=x^y
            U Spec, 11, 51
      57   x^y*1=x^y
            Detach, 56, 51
      58   x^(y+0)=x^y*1
            Substitute, 57,
55
      59   x e n => [~x=0 => x^0=1]
            U Spec, 16
      60   ~x=0 => x^0=1
            Detach, 59, 20
      61   x^0=1
            Detach, 60, 22
      62   x^(y+0)=x^y*x^0
            Substitute, 61,
58
      63   0 e n & x^(y+0)=x^y*x^0
            Join, 2, 62
    As Required:
      64   0 e p
            Detach, 41, 63
         
         INDUCTIVE STEP
         **************
         
         Prove: ALL(b):[b e p => b+1 e p]
         
         Suppose...
            65   t e p
                  Premise
         Apply definition of p
            66   t e p <=> t e n & x^(y+t)=x^y*x^t
                  U Spec, 26
            67   [t e p => t e n & x^(y+t)=x^y*x^t]
             &
[t e n & x^(y+t)=x^y*x^t => t e p]
                  Iff-And, 66
            68   t e p => t e n & x^(y+t)=x^y*x^t
                  Split, 67
            69   t e n & x^(y+t)=x^y*x^t => t e p
                  Split, 67
            70   t e n & x^(y+t)=x^y*x^t
                  Detach, 68, 65
            71   t e n
                  Split, 70
            72   x^(y+t)=x^y*x^t
                  Split, 70
            73   ALL(b):[t e n & b e n => t+b e n]
                  U Spec, 4
            74   t e n & 1 e n => t+1 e n
                  U Spec, 73
            75   t e n & 1 e n
                  Join, 71, 3
            76   t+1 e n
                  Detach, 74, 75
         Apply definition of p
            77   t+1 e p <=> t+1 e n & x^(y+(t+1))=x^y*x^(t+1)
                  U Spec, 26, 76
            78   [t+1 e p => t+1 e n & x^(y+(t+1))=x^y*x^(t+1)]
             &
[t+1 e n & x^(y+(t+1))=x^y*x^(t+1) => t+1 e p]
                  Iff-And, 77
            79   t+1 e p => t+1 e n & x^(y+(t+1))=x^y*x^(t+1)
                  Split, 78
         
         Sufficient: For t+1 e p
            80   t+1 e n & x^(y+(t+1))=x^y*x^(t+1) => t+1 e p
                  Split, 78
            81   ALL(b):[y e n & b e n => y+b e n]
                  U Spec, 4
            82   y e n & t+1 e n => y+(t+1) e n
                  U Spec, 81, 76
            83   y e n & t+1 e n
                  Join, 21, 76
            84   y+(t+1) e n
                  Detach, 82, 83
         Apply definition of p
            85   ALL(b):[x e n & b e n => [~[x=0 & b=0] => x^b e n]]
                  U Spec, 14
            86   x e n & y+(t+1) e n => [~[x=0 & y+(t+1)=0] => x^(y+(t+1)) e n]
                  U Spec, 85, 84
            87   x e n & y+(t+1) e n
                  Join, 20, 84
            88   ~[x=0 & y+(t+1)=0] => x^(y+(t+1)) e n
                  Detach, 86, 87
             
             Prove: ~[x=0 & y+(t+1)=0]
             
             Suppose to the contrary...
                  89   x=0 & y+(t+1)=0
                        Premise
                  90   x=0
                        Split, 89
                  91   y+(t+1)=0
                        Split, 89
                  92   x=0 & ~x=0
                        Join, 90, 22
         As Required:
            93   ~[x=0 & y+(t+1)=0]
                  4 Conclusion, 89
            94   x^(y+(t+1)) e n
                  Detach, 88, 93
            95   x^(y+(t+1))=x^(y+(t+1))
                  Reflex, 94
         Apply associativity of +
            96   ALL(b):ALL(c):[y e n & b e n & c e n => y+b+c=y+(b+c)]
                  U Spec, 7
            97   ALL(c):[y e n & t e n & c e n => y+t+c=y+(t+c)]
                  U Spec, 96
            98   y e n & t e n & 1 e n => y+t+1=y+(t+1)
                  U Spec, 97
            99   y e n & t e n
                  Join, 21, 71
            100  y e n & t e n & 1 e n
                  Join, 99, 3
            101  y+t+1=y+(t+1)
                  Detach, 98, 100
            102  x^(y+(t+1))=x^(y+t+1)
                  Substitute, 101,
95
         Apply definition of ^
            103  ALL(b):[x e n & b e n
             =>
[~[x=0 & b=0] => x^(b+1)=x^b*x]]
                  U Spec, 17
            104  ALL(b):[y e n & b e n => y+b e n]
                  U Spec, 4
            105  y e n & t e n => y+t e n
                  U Spec, 104
            106  y+t e n
                  Detach, 105, 99
         Apply definition of p
            107  x e n & y+t e n
             =>
[~[x=0 & y+t=0] => x^(y+t+1)=x^(y+t)*x]
                  U Spec, 103, 106
            108  x e n & y+t e n
                  Join, 20, 106
            109  ~[x=0 & y+t=0] => x^(y+t+1)=x^(y+t)*x
                  Detach, 107, 108
             
             Prove: ~[x=0 & y+t=0]
             
             Suppose to the contrary...
                  110  x=0 & y+t=0
                        Premise
                  111  x=0
                        Split, 110
                  112  y+t=0
                        Split, 110
                  113  x=0 & ~x=0
                        Join, 111, 22
         As Required:
            114  ~[x=0 & y+t=0]
                  4 Conclusion, 110
            115  x^(y+t+1)=x^(y+t)*x
                  Detach, 109, 114
            116  x^(y+(t+1))=x^(y+t)*x
                  Substitute, 115,
102
            117  x^(y+(t+1))=x^y*x^t*x
                  Substitute, 72,
116
         Apply definition of ^
            118  ALL(b):[x e n & b e n => [~[x=0 & b=0] => x^b e n]]
                  U Spec, 14
            119  x e n & y e n => [~[x=0 & y=0] => x^y e n]
                  U Spec, 118
            120  ~[x=0 & y=0] => x^y e n
                  Detach, 119, 44
             
             Prove: ~[x=0 & y=0]
             
             Suppose to the contrary...
                  121  x=0 & y=0
                        Premise
                  122  x=0
                        Split, 121
                  123  y=0
                        Split, 121
                  124  x=0 & ~x=0
                        Join, 122, 22
         As Required:
            125  ~[x=0 & y=0]
                  4 Conclusion, 121
            126  x^y e n
                  Detach, 120, 125
         Apply definition of ^
            127  x e n & t+1 e n => [~[x=0 & t+1=0] => x^(t+1) e n]
                  U Spec, 118, 76
            128  x e n & t+1 e n
                  Join, 20, 76
            129  ~[x=0 & t+1=0] => x^(t+1) e n
                  Detach, 127, 128
             
             Prove: ~[x=0 & t+1=0]
             
             Suppose to the contrary...
                  130  x=0 & t+1=0
                        Premise
                  131  x=0
                        Split, 130
                  132  t+1=0
                        Split, 130
                  133  x=0 & ~x=0
                        Join, 131, 22
         As Required:
            134  ~[x=0 & t+1=0]
                  4 Conclusion, 130
            135  x^(t+1) e n
                  Detach, 129, 134
         Apply definition of *
            136  ALL(b):[x^y e n & b e n => x^y*b e n]
                  U Spec, 9, 126
            137  x^y e n & x^(t+1) e n => x^y*x^(t+1) e n
                  U Spec, 136, 135
            138  x^y e n & x^(t+1) e n
                  Join, 126, 135
            139  x^y*x^(t+1) e n
                  Detach, 137, 138
            140  x^y*x^(t+1)=x^y*x^(t+1)
                  Reflex, 139
         Apply definition of ^
            141  ALL(b):[x e n & b e n
             =>
[~[x=0 & b=0] => x^(b+1)=x^b*x]]
                  U Spec, 17
            142  x e n & t e n
             =>
[~[x=0 & t=0] => x^(t+1)=x^t*x]
                  U Spec, 141
            143  x e n & t e n
                  Join, 20, 71
            144  ~[x=0 & t=0] => x^(t+1)=x^t*x
                  Detach, 142, 143
             
             Prove: ~[x=0 & t=0]
             
             Suppose to the contrary...
                  145  x=0 & t=0
                        Premise
                  146  x=0
                        Split, 145
                  147  t=0
                        Split, 145
                  148  x=0 & ~x=0
                        Join, 146, 22
         As Required:
            149  ~[x=0 & t=0]
                  4 Conclusion, 145
         113
            150  x^(t+1)=x^t*x
                  Detach, 144, 149
            151  x^y*x^(t+1)=x^y*(x^t*x)
                  Substitute, 150,
140
         Apply associativity of * on n
            152  ALL(b):ALL(c):[x^y e n & b e n & c e n => x^y*b*c=x^y*(b*c)]
                  U Spec, 12, 126
            153  ALL(b):[x e n & b e n => [~[x=0 & b=0] => x^b e n]]
                  U Spec, 14
            154  x e n & t e n => [~[x=0 & t=0] => x^t e n]
                  U Spec, 153
            155  x e n & t e n
                  Join, 20, 71
            156  ~[x=0 & t=0] => x^t e n
                  Detach, 154, 155
             
             Prove: ~[x=0 & t=0]
             
             Suppose to the contrary...
                  157  x=0 & t=0
                        Premise
                  158  x=0
                        Split, 157
                  159  t=0
                        Split, 157
                  160  x=0 & ~x=0
                        Join, 158, 22
         As Required:
            161  ~[x=0 & t=0]
                  4 Conclusion, 157
            162  x^t e n
                  Detach, 156, 161
         Apply associativity of *
            163  ALL(c):[x^y e n & x^t e n & c e n => x^y*x^t*c=x^y*(x^t*c)]
                  U Spec, 152, 162
            164  x^y e n & x^t e n & x e n => x^y*x^t*x=x^y*(x^t*x)
                  U Spec, 163
            165  x^y e n & x^t e n
                  Join, 126, 162
            166  x^y e n & x^t e n & x e n
                  Join, 165, 20
            167  x^y*x^t*x=x^y*(x^t*x)
                  Detach, 164, 166
            168  x^y*x^(t+1)=x^y*x^t*x
                  Substitute, 167,
151
            169  x^(y+(t+1))=x^y*x^(t+1)
                  Substitute, 168,
117
            170  t+1 e n & x^(y+(t+1))=x^y*x^(t+1)
                  Join, 76, 169
            171  t+1 e p
                  Detach, 80, 170
    As Required:
      172  ALL(b):[b e p => b+1 e p]
            4 Conclusion, 65
      173  0 e p & ALL(b):[b e p => b+1 e p]
            Join, 64, 172
    As Required:
      174  ALL(b):[b e n => b e p]
            Detach, 37, 173
         
         Prove: ALL(c):[c e n => x^(y+c)=x^y*x^c]
         
         Suppose...
            175  t e n
                  Premise
            176  t e n => t e p
                  U Spec, 174
            177  t e p
                  Detach, 176, 175
         Apply definition of p
            178  t e p <=> t e n & x^(y+t)=x^y*x^t
                  U Spec, 26
            179  [t e p => t e n & x^(y+t)=x^y*x^t]
             & [t e n & x^(y+t)=x^y*x^t => t e p]
                  Iff-And, 178
            180  t e p => t e n & x^(y+t)=x^y*x^t
                  Split, 179
            181  t e n & x^(y+t)=x^y*x^t => t e p
                  Split, 179
            182  t e n & x^(y+t)=x^y*x^t
                  Detach, 180, 177
            183  t e n
                  Split, 182
            184  x^(y+t)=x^y*x^t
                  Split, 182
    As Required:
      185  ALL(c):[c e n => x^(y+c)=x^y*x^c]
            4 Conclusion, 175
As Required:
186  ALL(a):ALL(b):[a e n & b e n & ~a=0
    =>
ALL(c):[c e n => a^(b+c)=a^b*a^c]]
      4 Conclusion, 19
    
    Prove: ALL(a):ALL(b):ALL(c):[a e n & b e n & c e n => [~a=0 => a^(b+c)=a^b*a^c]]
    
    Suppose...
      187  x e n & y e n & z e n
            Premise
      188  x e n
            Split, 187
      189  y e n
            Split, 187
      190  z e n
            Split, 187
         
         Prove: ~x=0 => x^(y+z)=x^y*x^z
         
         Suppose...
            191  ~x=0
                  Premise
         Apply previous result
            192  ALL(b):[x e n & b e n & ~x=0
             =>
ALL(c):[c e n => x^(b+c)=x^b*x^c]]
                  U Spec, 186
            193  x e n & y e n & ~x=0
             =>
ALL(c):[c e n => x^(y+c)=x^y*x^c]
                  U Spec, 192
            194  x e n & y e n
                  Join, 188, 189
            195  x e n & y e n & ~x=0
                  Join, 194, 191
            196  ALL(c):[c e n => x^(y+c)=x^y*x^c]
                  Detach, 193, 195
            197  z e n => x^(y+z)=x^y*x^z
                  U Spec, 196
            198  x^(y+z)=x^y*x^z
                  Detach, 197, 190
    As Required:
      199  ~x=0 => x^(y+z)=x^y*x^z
            4 Conclusion, 191
As Required:
200  ALL(a):ALL(b):ALL(c):[a e n & b e n & c e n => [~a=0 => a^(b+c)=a^b*a^c]]
      4 Conclusion, 187