Constructing the ADD Function Construct the add function for the natural numbers given Peano's Axioms. (F5 to view highlights only) Peano's axioms for the natural numbers 1 Set(n) & 1n & ALL(a):[an => next(a)n] & ALL(a):[an => ~next(a)=1] & ALL(a):ALL(b):[an & bn & next(a)=next(b) => a=b] & ALL(a):[Set(a) & 1a & ALL(b):[bn & ba => next(b)a] => ALL(b):[bn => ba]] Premise Splitting... 2 Set(n) Split, 1 3 1n Split, 1 4 ALL(a):[an => next(a)n] Split, 1 5 ALL(a):[an => ~next(a)=1] Split, 1 6 ALL(a):ALL(b):[an & bn & next(a)=next(b) => a=b] Split, 1 7 ALL(a):[Set(a) & 1a & ALL(b):[bn & ba => next(b)a] => ALL(b):[bn => ba]] Split, 1 Construct the set of ordered triples of natural numbers, n3 Applying the Cartesian Product rule... 8 ALL(a1):ALL(a2):ALL(a3):[Set(a1) & Set(a2) & Set(a3) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)b <=> c1a1 & c2a2 & c3a3]]] Cart Prod 9 ALL(a2):ALL(a3):[Set(n) & Set(a2) & Set(a3) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)b <=> c1n & c2a2 & c3a3]]] U Spec, 8 10 ALL(a3):[Set(n) & Set(n) & Set(a3) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)b <=> c1n & c2n & c3a3]]] U Spec, 9 11 Set(n) & Set(n) & Set(n) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)b <=> c1n & c2n & c3n]] U Spec, 10 12 Set(n) & Set(n) Join, 2, 2 13 Set(n) & Set(n) & Set(n) Join, 12, 2 14 EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)b <=> c1n & c2n & c3n]] Detach, 11, 13 Define: n3, the set of ordered triples of natural numbers 15 Set''(n3) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)n3 <=> c1n & c2n & c3n] E Spec, 14 16 Set''(n3) Split, 15 17 ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)n3 <=> c1n & c2n & c3n] Split, 15 Construct the add function, a subset of n3 Applying the Subset rule... 18 EXIST(s):[Set''(s) & ALL(a):ALL(b):ALL(c):[(a,b,c)s <=> (a,b,c)n3 & [b=1 & next(a)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (a,b',c')s & next(b')=b & next(c')=c]]]] Subset, 16 Define: add, a subset of n3 19 Set''(add) & ALL(a):ALL(b):ALL(c):[(a,b,c)add <=> (a,b,c)n3 & [b=1 & next(a)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (a,b',c')add & next(b')=b & next(c')=c]]] E Spec, 18 20 Set''(add) Split, 19 21 ALL(a):ALL(b):ALL(c):[(a,b,c)add <=> (a,b,c)n3 & [b=1 & next(a)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (a,b',c')add & next(b')=b & next(c')=c]]] Split, 19 Prove: Add is a function Applying the definiton of functionality... 22 ALL(f):ALL(a1):ALL(a2):ALL(b):[Set''(f) & Set(a1) & Set(a2) & Set(b) & ALL(c1):ALL(c2):[c1a1 & c2a2 => EXIST(d):[db & (c1,c2,d)f]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1a1 & c2a2 & d1b & d2b & (c1,c2,d1)f & (c1,c2,d2)f => d1=d2] => ALL(c1):ALL(c2):ALL(d):[c1a1 & c2a2 & db => [d=f(c1,c2) <=> (c1,c2,d)f]]] Function 23 ALL(a1):ALL(a2):ALL(b):[Set''(add) & Set(a1) & Set(a2) & Set(b) & ALL(c1):ALL(c2):[c1a1 & c2a2 => EXIST(d):[db & (c1,c2,d)add]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1a1 & c2a2 & d1b & d2b & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] => ALL(c1):ALL(c2):ALL(d):[c1a1 & c2a2 & db => [d=add(c1,c2) <=> (c1,c2,d)add]]] U Spec, 22 24 ALL(a2):ALL(b):[Set''(add) & Set(n) & Set(a2) & Set(b) & ALL(c1):ALL(c2):[c1n & c2a2 => EXIST(d):[db & (c1,c2,d)add]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1n & c2a2 & d1b & d2b & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] => ALL(c1):ALL(c2):ALL(d):[c1n & c2a2 & db => [d=add(c1,c2) <=> (c1,c2,d)add]]] U Spec, 23 25 ALL(b):[Set''(add) & Set(n) & Set(n) & Set(b) & ALL(c1):ALL(c2):[c1n & c2n => EXIST(d):[db & (c1,c2,d)add]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1n & c2n & d1b & d2b & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] => ALL(c1):ALL(c2):ALL(d):[c1n & c2n & db => [d=add(c1,c2) <=> (c1,c2,d)add]]] U Spec, 24 Sufficient: For functionality of add 26 Set''(add) & Set(n) & Set(n) & Set(n) & ALL(c1):ALL(c2):[c1n & c2n => EXIST(d):[dn & (c1,c2,d)add]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] => ALL(c1):ALL(c2):ALL(d):[c1n & c2n & dn => [d=add(c1,c2) <=> (c1,c2,d)add]] U Spec, 25 Prove: xn => ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] Suppose... 27 xn Premise Sufficient: For ALL(y):[yn => EXIST(z):[dn & (x,y,z)add]] Apply the Induction shortcut (on Numbers menu). 28 EXIST(z):[zn & (x,1,z)add] & ALL(y):[yn & EXIST(z):[zn & (x,y,z)add] => EXIST(z):[zn & (x,next(y),z)add]] => ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] Induction Prove: (x,1,next(x))add (the case for y=1) Applying the definition add... 29 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 30 ALL(c):[(x,1,c)add <=> (x,1,c)n3 & [1=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=c]]] U Spec, 29 31 (x,1,next(x))add <=> (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] U Spec, 30 32 [(x,1,next(x))add => (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]]] & [(x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] => (x,1,next(x))add] Iff-And, 31 33 (x,1,next(x))add => (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] Split, 32 Sufficient: For (x,1,next(x))add 34 (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] => (x,1,next(x))add Split, 32 Prove: (x,1,next(x))n3 Applying the definition of n3... 35 ALL(c2):ALL(c3):[(x,c2,c3)n3 <=> xn & c2n & c3n] U Spec, 17 36 ALL(c3):[(x,1,c3)n3 <=> xn & 1n & c3n] U Spec, 35 37 (x,1,next(x))n3 <=> xn & 1n & next(x)n U Spec, 36 38 [(x,1,next(x))n3 => xn & 1n & next(x)n] & [xn & 1n & next(x)n => (x,1,next(x))n3] Iff-And, 37 39 (x,1,next(x))n3 => xn & 1n & next(x)n Split, 38 Sufficient: For (x,1,next(x))n3 40 xn & 1n & next(x)n => (x,1,next(x))n3 Split, 38 41 xn => next(x)n U Spec, 4 42 next(x)n Detach, 41, 27 43 xn & 1n Join, 27, 3 44 xn & 1n & next(x)n Join, 43, 42 As Required: 45 (x,1,next(x))n3 Detach, 40, 44 Prove: 1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)] 46 1=1 Reflex 47 next(x)=next(x) Reflex 48 1=1 & next(x)=next(x) Join, 46, 47 As Required: 49 1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)] Arb Or, 48 50 (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] Join, 45, 49 51 (x,1,next(x))add Detach, 34, 50 52 next(x)n & (x,1,next(x))add Join, 42, 51 As Required: The case for y=1 53 EXIST(z):[zn & (x,1,z)add] E Gen, 52 Prove: yn & EXIST(z):[zn & (x,y,z)add] => EXIST(z):[zn & (x,next(y),z)add] The case for if true for y, then true for next(y) (y+1) Suppose... 54 yn & EXIST(z):[zn & (x,y,z)add] Premise 55 yn Split, 54 56 EXIST(z):[zn & (x,y,z)add] Split, 54 Define: z 57 zn & (x,y,z)add E Spec, 56 58 zn Split, 57 59 (x,y,z)add Split, 57 Prove: (x,next(y),next(z))add Applying the definition of add... 60 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 61 ALL(c):[(x,next(y),c)add <=> (x,next(y),c)n3 & [next(y)=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=c]]] U Spec, 60 62 (x,next(y),next(z))add <=> (x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(z)]] U Spec, 61 63 [(x,next(y),next(z))add => (x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(z)]]] & [(x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(z)]] => (x,next(y),next(z))add] Iff-And, 62 64 (x,next(y),next(z))add => (x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(z)]] Split, 63 Sufficient: For (x,next(y),next(z))add 65 (x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(z)]] => (x,next(y),next(z))add Split, 63 Prove: (x,next(y),next(z))n3 Applying the definition of n3... 66 ALL(c2):ALL(c3):[(x,c2,c3)n3 <=> xn & c2n & c3n] U Spec, 17 67 ALL(c3):[(x,next(y),c3)n3 <=> xn & next(y)n & c3n] U Spec, 66 68 (x,next(y),next(z))n3 <=> xn & next(y)n & next(z)n U Spec, 67 69 [(x,next(y),next(z))n3 => xn & next(y)n & next(z)n] & [xn & next(y)n & next(z)n => (x,next(y),next(z))n3] Iff-And, 68 70 (x,next(y),next(z))n3 => xn & next(y)n & next(z)n Split, 69 Sufficient: For (x,next(y),next(z))n3 71 xn & next(y)n & next(z)n => (x,next(y),next(z))n3 Split, 69 72 yn => next(y)n U Spec, 4 73 next(y)n Detach, 72, 55 74 zn => next(z)n U Spec, 4 75 next(z)n Detach, 74, 58 76 xn & next(y)n Join, 27, 73 77 xn & next(y)n & next(z)n Join, 76, 75 As Required: 78 (x,next(y),next(z))n3 Detach, 71, 77 Prove: EXIST(b):EXIST(c):[bn & cn & (x,b,c)add & next(b)=next(y) & next(c)=next(z)] 79 next(y)=next(y) Reflex 80 next(z)=next(z) Reflex 81 yn & zn Join, 55, 58 82 yn & zn & (x,y,z)add Join, 81, 59 83 yn & zn & (x,y,z)add & next(y)=next(y) Join, 82, 79 84 yn & zn & (x,y,z)add & next(y)=next(y) & next(z)=next(z) Join, 83, 80 85 EXIST(c):[yn & cn & (x,y,c)add & next(y)=next(y) & next(c)=next(z)] E Gen, 84 As Required: 86 EXIST(b):EXIST(c):[bn & cn & (x,b,c)add & next(b)=next(y) & next(c)=next(z)] E Gen, 85 87 next(y)=1 & next(x)=next(z) | EXIST(b):EXIST(c):[bn & cn & (x,b,c)add & next(b)=next(y) & next(c)=next(z)] Arb Or, 86 88 (x,next(y),next(z))n3 & [next(y)=1 & next(x)=next(z) | EXIST(b):EXIST(c):[bn & cn & (x,b,c)add & next(b)=next(y) & next(c)=next(z)]] Join, 78, 87 As Required: 89 (x,next(y),next(z))add Detach, 65, 88 90 next(z)n & (x,next(y),next(z))add Join, 75, 89 91 EXIST(c):[cn & (x,next(y),c)add] E Gen, 90 As Required: The case for if true for y, then true for next(y) (y+1) 92 yn & EXIST(z):[zn & (x,y,z)add] => EXIST(c):[cn & (x,next(y),c)add] Conclusion, 54 Generalizing... 93 ALL(y):[yn & EXIST(z):[zn & (x,y,z)add] => EXIST(c):[cn & (x,next(y),c)add]] U Gen, 92 94 EXIST(z):[zn & (x,1,z)add] & ALL(y):[yn & EXIST(z):[zn & (x,y,z)add] => EXIST(c):[cn & (x,next(y),c)add]] Join, 53, 93 By induction... 95 ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] Detach, 28, 94 As Required: 96 xn => ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] Conclusion, 27 Generalizing... 97 ALL(x):[xn => ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]]] U Gen, 96 Prove: xn & yn => EXIST(z):[zn & (x,y,z)add] Suppose... 98 xn & yn Premise 99 xn Split, 98 100 yn Split, 98 101 xn => ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] U Spec, 97 102 ALL(y):[yn => EXIST(z):[zn & (x,y,z)add]] Detach, 101, 99 103 yn => EXIST(z):[zn & (x,y,z)add] U Spec, 102 104 EXIST(z):[zn & (x,y,z)add] Detach, 103, 100 As Required: 105 xn & yn => EXIST(z):[zn & (x,y,z)add] Conclusion, 98 Generalizing... 106 ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] U Gen, 105 As Required: Every order pair of natural numbers has an image under add. 107 ALL(x):ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] U Gen, 106 Prove: xn => ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2]] Suppose... 108 xn Premise Sufficient: ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] Applying the Induction shortcut... 109 ALL(z1):ALL(z2):[z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2] & ALL(y):[yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] => ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2]] => ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2]] Induction Prove: z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2 (Case for y=1) Suppose... 110 z1n & z2n & (x,1,z1)add & (x,1,z2)add Premise 111 z1n Split, 110 112 z2n Split, 110 113 (x,1,z1)add Split, 110 114 (x,1,z2)add Split, 110 Applying the definition of add... 115 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 116 ALL(c):[(x,1,c)add <=> (x,1,c)n3 & [1=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=c]]] U Spec, 115 117 (x,1,z1)add <=> (x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]] U Spec, 116 118 [(x,1,z1)add => (x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]]] & [(x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]] => (x,1,z1)add] Iff-And, 117 119 (x,1,z1)add => (x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]] Split, 118 120 (x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]] => (x,1,z1)add Split, 118 121 (x,1,z1)n3 & [1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1]] Detach, 119, 113 122 (x,1,z1)n3 Split, 121 123 1=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Split, 121 124 ~[1=1 & next(x)=z1] => EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Imply-Or, 123 125 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] => ~~[1=1 & next(x)=z1] Contra, 124 Sufficient: For next(x)=z1 126 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] => 1=1 & next(x)=z1 Rem DNeg, 125 Applying the definition of add... 127 (x,1,z2)add <=> (x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]] U Spec, 116 128 [(x,1,z2)add => (x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]]] & [(x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]] => (x,1,z2)add] Iff-And, 127 129 (x,1,z2)add => (x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]] Split, 128 130 (x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]] => (x,1,z2)add Split, 128 From the definition of add... 131 (x,1,z2)n3 & [1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2]] Detach, 129, 114 132 (x,1,z2)n3 Split, 131 133 1=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Split, 131 134 ~[1=1 & next(x)=z2] => EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Imply-Or, 133 135 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] => ~~[1=1 & next(x)=z2] Contra, 134 Sufficient: For next(x)=z2 136 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] => 1=1 & next(x)=z2 Rem DNeg, 135 137 b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1 Premise 138 b'n Split, 137 139 c'n Split, 137 140 (x,b',c')add Split, 137 141 next(b')=1 Split, 137 142 next(c')=z1 Split, 137 143 b'n => ~next(b')=1 U Spec, 5 144 ~next(b')=1 Detach, 143, 138 145 next(b')=1 & ~next(b')=1 Join, 141, 144 146 ~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Conclusion, 137 147 ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] U Gen, 146 148 ALL(b'):ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] U Gen, 147 149 ~EXIST(b'):~ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Quant, 148 150 ~EXIST(b'):~~EXIST(c'):~~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Quant, 149 151 ~EXIST(b'):EXIST(c'):~~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Rem DNeg, 150 152 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z1] Rem DNeg, 151 153 1=1 & next(x)=z1 Detach, 126, 152 154 1=1 Split, 153 As Required: 155 next(x)=z1 Split, 153 156 b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2 Premise 157 b'n Split, 156 158 c'n Split, 156 159 (x,b',c')add Split, 156 160 next(b')=1 Split, 156 161 next(c')=z2 Split, 156 162 b'n => ~next(b')=1 U Spec, 5 163 ~next(b')=1 Detach, 162, 157 164 next(b')=1 & ~next(b')=1 Join, 160, 163 165 ~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Conclusion, 156 166 ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] U Gen, 165 167 ALL(b'):ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] U Gen, 166 168 ~EXIST(b'):~ALL(c'):~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Quant, 167 169 ~EXIST(b'):~~EXIST(c'):~~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Quant, 168 170 ~EXIST(b'):EXIST(c'):~~[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Rem DNeg, 169 171 ~EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=z2] Rem DNeg, 170 172 1=1 & next(x)=z2 Detach, 136, 171 173 1=1 Split, 172 174 next(x)=z2 Split, 172 175 z1=z2 Substitute, 155, 174 As Required: 176 z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2 Conclusion, 110 Generalizing... 177 ALL(z2):[z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2] U Gen, 176 Case for y=1: 178 ALL(z1):ALL(z2):[z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2] U Gen, 177 Prove: yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] => ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2] Suppose... 179 yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] Premise 180 yn Split, 179 181 ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] Split, 179 Prove: z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2 Suppose... 182 z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add Premise 183 z1n Split, 182 184 z2n Split, 182 185 (x,next(y),z1)add Split, 182 186 (x,next(y),z2)add Split, 182 187 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 188 ALL(c):[(x,next(y),c)add <=> (x,next(y),c)n3 & [next(y)=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=c]]] U Spec, 187 189 (x,next(y),z1)add <=> (x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]] U Spec, 188 190 [(x,next(y),z1)add => (x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]]] & [(x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]] => (x,next(y),z1)add] Iff-And, 189 191 (x,next(y),z1)add => (x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]] Split, 190 192 (x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]] => (x,next(y),z1)add Split, 190 193 (x,next(y),z1)n3 & [next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1]] Detach, 191, 185 From the definition of add... 194 (x,next(y),z1)n3 Split, 193 195 next(y)=1 & next(x)=z1 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1] Split, 193 196 (x,next(y),z2)add <=> (x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]] U Spec, 188 197 [(x,next(y),z2)add => (x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]]] & [(x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]] => (x,next(y),z2)add] Iff-And, 196 198 (x,next(y),z2)add => (x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]] Split, 197 199 (x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]] => (x,next(y),z2)add Split, 197 200 (x,next(y),z2)n3 & [next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2]] Detach, 198, 186 201 (x,next(y),z2)n3 Split, 200 202 next(y)=1 & next(x)=z2 | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2] Split, 200 203 ~[next(y)=1 & next(x)=z1] => EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1] Imply-Or, 195 204 next(y)=1 & next(x)=z1 Premise 205 next(y)=1 Split, 204 206 next(x)=z1 Split, 204 207 yn => ~next(y)=1 U Spec, 5 208 ~next(y)=1 Detach, 207, 180 209 next(y)=1 & ~next(y)=1 Join, 205, 208 210 ~[next(y)=1 & next(x)=z1] Conclusion, 204 211 EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z1] Detach, 203, 210 212 ~[next(y)=1 & next(x)=z2] => EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2] Imply-Or, 202 213 next(y)=1 & next(x)=z2 Premise 214 next(y)=1 Split, 213 215 next(x)=z2 Split, 213 216 yn => ~next(y)=1 U Spec, 5 217 ~next(y)=1 Detach, 216, 180 218 next(y)=1 & ~next(y)=1 Join, 214, 217 219 ~[next(y)=1 & next(x)=z2] Conclusion, 213 220 EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=z2] Detach, 212, 219 221 EXIST(c'):[y1'n & c'n & (x,y1',c')add & next(y1')=next(y) & next(c')=z1] E Spec, 211 Define: y1' and z1' 222 y1'n & z1'n & (x,y1',z1')add & next(y1')=next(y) & next(z1')=z1 E Spec, 221 223 y1'n Split, 222 224 z1'n Split, 222 225 (x,y1',z1')add Split, 222 226 next(y1')=next(y) Split, 222 227 next(z1')=z1 Split, 222 228 EXIST(c'):[y2'n & c'n & (x,y2',c')add & next(y2')=next(y) & next(c')=z2] E Spec, 220 Define: y2' and z2' 229 y2'n & z2'n & (x,y2',z2')add & next(y2')=next(y) & next(z2')=z2 E Spec, 228 230 y2'n Split, 229 231 z2'n Split, 229 232 (x,y2',z2')add Split, 229 233 next(y2')=next(y) Split, 229 234 next(z2')=z2 Split, 229 235 ALL(b):[y1'n & bn & next(y1')=next(b) => y1'=b] U Spec, 6 236 y1'n & yn & next(y1')=next(y) => y1'=y U Spec, 235 237 y1'n & yn Join, 223, 180 238 y1'n & yn & next(y1')=next(y) Join, 237, 226 239 y1'=y Detach, 236, 238 240 (x,y,z1')add Substitute, 239, 225 241 ALL(b):[y2'n & bn & next(y2')=next(b) => y2'=b] U Spec, 6 242 y2'n & yn & next(y2')=next(y) => y2'=y U Spec, 241 243 y2'n & yn Join, 230, 180 244 y2'n & yn & next(y2')=next(y) Join, 243, 233 245 y2'=y Detach, 242, 244 246 (x,y,z2')add Substitute, 245, 232 247 ALL(z2):[z1'n & z2n & (x,y,z1')add & (x,y,z2)add => z1'=z2] U Spec, 181 248 z1'n & z2'n & (x,y,z1')add & (x,y,z2')add => z1'=z2' U Spec, 247 249 z1'n & z2'n Join, 224, 231 250 z1'n & z2'n & (x,y,z1')add Join, 249, 240 251 z1'n & z2'n & (x,y,z1')add & (x,y,z2')add Join, 250, 246 252 z1'=z2' Detach, 248, 251 253 next(z1')=z2 Substitute, 252, 234 254 z1=z2 Substitute, 227, 253 255 z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2 Conclusion, 182 256 ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2] U Gen, 255 257 ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2] U Gen, 256 As Required: 258 yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] => ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2] Conclusion, 179 Generalizing... 259 ALL(y):[yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] => ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2]] U Gen, 258 260 ALL(z1):ALL(z2):[z1n & z2n & (x,1,z1)add & (x,1,z2)add => z1=z2] & ALL(y):[yn & ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2] => ALL(z1):ALL(z2):[z1n & z2n & (x,next(y),z1)add & (x,next(y),z2)add => z1=z2]] Join, 178, 259 261 ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2]] Detach, 109, 260 As Required: 262 xn => ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2]] Conclusion, 108 Generalizing... 263 ALL(x):[xn => ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (x,y,z1)add & (x,y,z2)add => z1=z2]]] U Gen, 262 264 c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add Premise 265 c1n Split, 264 266 c2n Split, 264 267 d1n Split, 264 268 d2n Split, 264 269 (c1,c2,d1)add Split, 264 270 (c1,c2,d2)add Split, 264 271 c1n => ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (c1,y,z1)add & (c1,y,z2)add => z1=z2]] U Spec, 263 272 ALL(y):[yn => ALL(z1):ALL(z2):[z1n & z2n & (c1,y,z1)add & (c1,y,z2)add => z1=z2]] Detach, 271, 265 273 c2n => ALL(z1):ALL(z2):[z1n & z2n & (c1,c2,z1)add & (c1,c2,z2)add => z1=z2] U Spec, 272 274 ALL(z1):ALL(z2):[z1n & z2n & (c1,c2,z1)add & (c1,c2,z2)add => z1=z2] Detach, 273, 266 275 ALL(z2):[d1n & z2n & (c1,c2,d1)add & (c1,c2,z2)add => d1=z2] U Spec, 274 276 d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2 U Spec, 275 277 d1n & d2n Join, 267, 268 278 d1n & d2n & (c1,c2,d1)add Join, 277, 269 279 d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add Join, 278, 270 280 d1=d2 Detach, 276, 279 As Required: 281 c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2 Conclusion, 264 Generalizing... 282 ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] U Gen, 281 283 ALL(d1):ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] U Gen, 282 284 ALL(c2):ALL(d1):ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] U Gen, 283 285 ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] U Gen, 284 Joining results... 286 Set''(add) & Set(n) Join, 20, 2 287 Set''(add) & Set(n) & Set(n) Join, 286, 2 288 Set''(add) & Set(n) & Set(n) & Set(n) Join, 287, 2 289 Set''(add) & Set(n) & Set(n) & Set(n) & ALL(x):ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] Join, 288, 107 290 Set''(add) & Set(n) & Set(n) & Set(n) & ALL(x):ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] & ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1n & c2n & d1n & d2n & (c1,c2,d1)add & (c1,c2,d2)add => d1=d2] Join, 289, 285 As Required: add is a function 291 ALL(c1):ALL(c2):ALL(d):[c1n & c2n & dn => [d=add(c1,c2) <=> (c1,c2,d)add]] Detach, 26, 290 Prove: xn & yn => add(x,y)n Suppose... 292 xn & yn Premise 293 xn Split, 292 294 yn Split, 292 295 ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] U Spec, 107 296 xn & yn => EXIST(z):[zn & (x,y,z)add] U Spec, 295 297 EXIST(z):[zn & (x,y,z)add] Detach, 296, 292 298 zn & (x,y,z)add E Spec, 297 299 zn Split, 298 300 (x,y,z)add Split, 298 301 ALL(c2):ALL(d):[xn & c2n & dn => [d=add(x,c2) <=> (x,c2,d)add]] U Spec, 291 302 ALL(d):[xn & yn & dn => [d=add(x,y) <=> (x,y,d)add]] U Spec, 301 303 xn & yn & zn => [z=add(x,y) <=> (x,y,z)add] U Spec, 302 304 xn & yn & zn Join, 292, 299 305 z=add(x,y) <=> (x,y,z)add Detach, 303, 304 306 [z=add(x,y) => (x,y,z)add] & [(x,y,z)add => z=add(x,y)] Iff-And, 305 307 z=add(x,y) => (x,y,z)add Split, 306 308 (x,y,z)add => z=add(x,y) Split, 306 309 z=add(x,y) Detach, 308, 300 310 add(x,y)n Substitute, 309, 299 As Required: 311 xn & yn => add(x,y)n Conclusion, 292 Generalizing... 312 ALL(b):[xn & bn => add(x,b)n] U Gen, 311 313 ALL(a):ALL(b):[an & bn => add(a,b)n] U Gen, 312 Prove: xn => add(x,1)=next(x) Suppose... 314 xn Premise Prove: (x,1,next(x))add Applying the definitin of add... 315 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 316 ALL(c):[(x,1,c)add <=> (x,1,c)n3 & [1=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=c]]] U Spec, 315 317 (x,1,next(x))add <=> (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] U Spec, 316 318 [(x,1,next(x))add => (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]]] & [(x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] => (x,1,next(x))add] Iff-And, 317 319 (x,1,next(x))add => (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] Split, 318 Sufficient: For (x,1,next(x))add 320 (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] => (x,1,next(x))add Split, 318 321 ALL(c2):ALL(c3):[(x,c2,c3)n3 <=> xn & c2n & c3n] U Spec, 17 322 ALL(c3):[(x,1,c3)n3 <=> xn & 1n & c3n] U Spec, 321 323 (x,1,next(x))n3 <=> xn & 1n & next(x)n U Spec, 322 324 [(x,1,next(x))n3 => xn & 1n & next(x)n] & [xn & 1n & next(x)n => (x,1,next(x))n3] Iff-And, 323 325 (x,1,next(x))n3 => xn & 1n & next(x)n Split, 324 Sufficient: For (x,1,next(x))n3 326 xn & 1n & next(x)n => (x,1,next(x))n3 Split, 324 327 xn => next(x)n U Spec, 4 328 next(x)n Detach, 327, 314 329 xn & 1n Join, 314, 3 330 xn & 1n & next(x)n Join, 329, 328 As Required: 331 (x,1,next(x))n3 Detach, 326, 330 332 1=1 Reflex 333 next(x)=next(x) Reflex 334 1=1 & next(x)=next(x) Join, 332, 333 335 1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)] Arb Or, 334 336 (x,1,next(x))n3 & [1=1 & next(x)=next(x) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=1 & next(c')=next(x)]] Join, 331, 335 337 (x,1,next(x))add Detach, 320, 336 338 ALL(c2):ALL(d):[xn & c2n & dn => [d=add(x,c2) <=> (x,c2,d)add]] U Spec, 291 339 ALL(d):[xn & 1n & dn => [d=add(x,1) <=> (x,1,d)add]] U Spec, 338 340 xn & 1n & next(x)n => [next(x)=add(x,1) <=> (x,1,next(x))add] U Spec, 339 341 next(x)=add(x,1) <=> (x,1,next(x))add Detach, 340, 330 342 [next(x)=add(x,1) => (x,1,next(x))add] & [(x,1,next(x))add => next(x)=add(x,1)] Iff-And, 341 343 next(x)=add(x,1) => (x,1,next(x))add Split, 342 344 (x,1,next(x))add => next(x)=add(x,1) Split, 342 345 next(x)=add(x,1) Detach, 344, 337 346 add(x,1)=next(x) Sym, 345 As Required: 347 xn => add(x,1)=next(x) Conclusion, 314 Generalizing... 348 ALL(a):[an => add(a,1)=next(a)] U Gen, 347 Prove: xn & yn => add(x,next(y))=next(add(x,y)) Suppose... 349 xn & yn Premise 350 xn Split, 349 351 yn Split, 349 Applying the definition of add... 352 ALL(b):ALL(c):[(x,b,c)add <=> (x,b,c)n3 & [b=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=b & next(c')=c]]] U Spec, 21 353 ALL(c):[(x,next(y),c)add <=> (x,next(y),c)n3 & [next(y)=1 & next(x)=c | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=c]]] U Spec, 352 354 (x,next(y),next(add(x,y)))add <=> (x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]] U Spec, 353 355 [(x,next(y),next(add(x,y)))add => (x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]]] & [(x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]] => (x,next(y),next(add(x,y)))add] Iff-And, 354 356 (x,next(y),next(add(x,y)))add => (x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]] Split, 355 Sufficient: For (x,next(y),next(add(x,y)))add 357 (x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]] => (x,next(y),next(add(x,y)))add Split, 355 358 ALL(y):[xn & yn => EXIST(z):[zn & (x,y,z)add]] U Spec, 107 359 xn & yn => EXIST(z):[zn & (x,y,z)add] U Spec, 358 360 EXIST(z):[zn & (x,y,z)add] Detach, 359, 349 361 zn & (x,y,z)add E Spec, 360 362 zn Split, 361 363 (x,y,z)add Split, 361 364 ALL(b):[xn & bn => add(x,b)n] U Spec, 313 365 xn & yn => add(x,y)n U Spec, 364 366 add(x,y)n Detach, 365, 349 367 ALL(c2):ALL(d):[xn & c2n & dn => [d=add(x,c2) <=> (x,c2,d)add]] U Spec, 291 368 ALL(d):[xn & yn & dn => [d=add(x,y) <=> (x,y,d)add]] U Spec, 367 369 xn & yn & zn => [z=add(x,y) <=> (x,y,z)add] U Spec, 368 370 xn & yn & zn Join, 349, 362 371 z=add(x,y) <=> (x,y,z)add Detach, 369, 370 372 [z=add(x,y) => (x,y,z)add] & [(x,y,z)add => z=add(x,y)] Iff-And, 371 373 z=add(x,y) => (x,y,z)add Split, 372 374 (x,y,z)add => z=add(x,y) Split, 372 375 z=add(x,y) Detach, 374, 363 376 (x,y,add(x,y))add Substitute, 375, 363 377 next(y)=next(y) Reflex 378 next(add(x,y))=next(add(x,y)) Reflex 379 yn & add(x,y)n Join, 351, 366 380 yn & add(x,y)n & (x,y,add(x,y))add Join, 379, 376 381 yn & add(x,y)n & (x,y,add(x,y))add & next(y)=next(y) Join, 380, 377 382 yn & add(x,y)n & (x,y,add(x,y))add & next(y)=next(y) & next(add(x,y))=next(add(x,y)) Join, 381, 378 383 EXIST(c'):[yn & c'n & (x,y,c')add & next(y)=next(y) & next(c')=next(add(x,y))] E Gen, 382 384 EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))] E Gen, 383 385 next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))] Arb Or, 384 386 ALL(c2):ALL(c3):[(x,c2,c3)n3 <=> xn & c2n & c3n] U Spec, 17 387 ALL(c3):[(x,next(y),c3)n3 <=> xn & next(y)n & c3n] U Spec, 386 388 (x,next(y),next(add(x,y)))n3 <=> xn & next(y)n & next(add(x,y))n U Spec, 387 389 [(x,next(y),next(add(x,y)))n3 => xn & next(y)n & next(add(x,y))n] & [xn & next(y)n & next(add(x,y))n => (x,next(y),next(add(x,y)))n3] Iff-And, 388 390 (x,next(y),next(add(x,y)))n3 => xn & next(y)n & next(add(x,y))n Split, 389 Sufficient: 391 xn & next(y)n & next(add(x,y))n => (x,next(y),next(add(x,y)))n3 Split, 389 392 yn => next(y)n U Spec, 4 393 next(y)n Detach, 392, 351 394 add(x,y)n => next(add(x,y))n U Spec, 4 395 next(add(x,y))n Detach, 394, 366 396 xn & next(y)n Join, 350, 393 397 xn & next(y)n & next(add(x,y))n Join, 396, 395 As Required: 398 (x,next(y),next(add(x,y)))n3 Detach, 391, 397 399 (x,next(y),next(add(x,y)))n3 & [next(y)=1 & next(x)=next(add(x,y)) | EXIST(b'):EXIST(c'):[b'n & c'n & (x,b',c')add & next(b')=next(y) & next(c')=next(add(x,y))]] Join, 398, 385 400 (x,next(y),next(add(x,y)))add Detach, 357, 399 401 ALL(c2):ALL(d):[xn & c2n & dn => [d=add(x,c2) <=> (x,c2,d)add]] U Spec, 291 402 ALL(d):[xn & next(y)n & dn => [d=add(x,next(y)) <=> (x,next(y),d)add]] U Spec, 401 403 xn & next(y)n & next(add(x,y))n => [next(add(x,y))=add(x,next(y)) <=> (x,next(y),next(add(x,y)))add] U Spec, 402 404 xn & next(y)n Join, 350, 393 405 xn & next(y)n & next(add(x,y))n Join, 404, 395 406 next(add(x,y))=add(x,next(y)) <=> (x,next(y),next(add(x,y)))add Detach, 403, 405 407 [next(add(x,y))=add(x,next(y)) => (x,next(y),next(add(x,y)))add] & [(x,next(y),next(add(x,y)))add => next(add(x,y))=add(x,next(y))] Iff-And, 406 408 next(add(x,y))=add(x,next(y)) => (x,next(y),next(add(x,y)))add Split, 407 409 (x,next(y),next(add(x,y)))add => next(add(x,y))=add(x,next(y)) Split, 407 410 next(add(x,y))=add(x,next(y)) Detach, 409, 400 411 add(x,next(y))=next(add(x,y)) Sym, 410 As Required: 412 xn & yn => add(x,next(y))=next(add(x,y)) Conclusion, 349 Generalizing... 413 ALL(b):[xn & bn => add(x,next(b))=next(add(x,b))] U Gen, 412 414 ALL(a):ALL(b):[an & bn => add(a,next(b))=next(add(a,b))] U Gen, 413 Joining results... 415 ALL(a):ALL(b):[an & bn => add(a,b)n] & ALL(a):[an => add(a,1)=next(a)] Join, 313, 348 416 ALL(a):ALL(b):[an & bn => add(a,b)n] & ALL(a):[an => add(a,1)=next(a)] & ALL(a):ALL(b):[an & bn => add(a,next(b))=next(add(a,b))] Join, 415, 414 As Required: 417 EXIST(addn):[ALL(a):ALL(b):[an & bn => addn(a,b)n] & ALL(a):[an => addn(a,1)=next(a)] & ALL(a):ALL(b):[an & bn => addn(a,next(b))=next(addn(a,b))]] E Gen, 416