Closure of PROD operator Prove: ALL(f):[ALL(a):[a n => f(a) n] => ALL(a):ALL(b):[a n & b n & a<=b => PROD(i,a,b):f(i) n]] Peano's Axioms 1 Set(n) & 1 n & ALL(a):[a n => next(a) n] & ALL(a):[a n => ~next(a)=1] & ALL(a):ALL(b):[a n & b n & next(a)=next(b) => a=b] & ALL(a):[Set(a) & 1 a & ALL(b):[b n & b a => next(b) a] => ALL(b):[b n => b a]] Premise 2 Set(n) Split, 1 3 1 n Split, 1 4 ALL(a):[a n => next(a) n] Split, 1 5 ALL(a):[a n => ~next(a)=1] Split, 1 6 ALL(a):ALL(b):[a n & b n & next(a)=next(b) => a=b] Split, 1 7 ALL(a):[Set(a) & 1 a & ALL(b):[b n & b a => next(b) a] => ALL(b):[b n => b a]] Split, 1 Define: + 8 ALL(a):ALL(b):[a n & b n => a+b n] & ALL(a):[a n => a+1=next(a)] & ALL(a):ALL(b):[a n & b n => a+next(b)=next(a+b)] Definition 9 ALL(a):ALL(b):[a n & b n => a+b n] Split, 8 10 ALL(a):[a n => a+1=next(a)] Split, 8 11 ALL(a):ALL(b):[a n & b n => a+next(b)=next(a+b)] Split, 8 Define: * 12 ALL(a):ALL(b):[a n & b n => a*b n] & ALL(a):[a n => a*1=a] & ALL(a):ALL(b):[a n & b n => a*(b+1)=a*b+a] Definition 13 ALL(a):ALL(b):[a n & b n => a*b n] Split, 12 14 ALL(a):[a n => a*1=a] Split, 12 15 ALL(a):ALL(b):[a n & b n => a*(b+1)=a*b+a] Split, 12 16 ALL(f):[ALL(a):[a n => f(a) n] => ALL(a):[a n => SUM(i,a,a):f(i)=f(a)] & ALL(a):ALL(b):[a n & b n => SUM(i,a,b+1):f(i)=SUM(i,a,b):f(i)+f(b+1)]] Definition Define: < 17 ALL(a):ALL(b):[a n & b n => [a<b <=> EXIST(c):[c n & a+c=b]]] Definition Define: <= 18 ALL(a):ALL(b):[a n & b n => [a<=b <=> a<b | a=b]] Definition Previous result: + is associative 19 ALL(a):ALL(b):ALL(c):[a n & b n & c n => a+b+c=a+(b+c)] Premise Define: f 20 ALL(a):[a n => f(a) n] Premise 21 ALL(f):[ALL(a):[a n => f(a) n] => ALL(a):[a n => PROD(i,a,a):f(i)=f(a)] & ALL(a):ALL(b):[a n & b n => PROD(i,a,b+1):f(i)=PROD(i,a,b):f(i)*f(b+1)]] Definition 22 ALL(a):[a n => f(a) n] => ALL(a):[a n => PROD(i,a,a):f(i)=f(a)] & ALL(a):ALL(b):[a n & b n => PROD(i,a,b+1):f(i)=PROD(i,a,b):f(i)*f(b+1)] U Spec, 21 From the definition of PROD... 23 ALL(a):[a n => PROD(i,a,a):f(i)=f(a)] & ALL(a):ALL(b):[a n & b n => PROD(i,a,b+1):f(i)=PROD(i,a,b):f(i)*f(b+1)] Detach, 22, 20 24 ALL(a):[a n => PROD(i,a,a):f(i)=f(a)] Split, 23 25 ALL(a):ALL(b):[a n & b n => PROD(i,a,b+1):f(i)=PROD(i,a,b):f(i)*f(b+1)] Split, 23 Prove: x n => ALL(k):[k n => PROD(i,x,x+k):f(i) n] Suppose... 26 x n Premise Sufficient: For ALL(k):[k n => PROD(i,x,x+k):f(i) n] 27 PROD(i,x,x+1):f(i) n & ALL(k):[k n & PROD(i,x,x+k):f(i) n => PROD(i,x,x+(k+1)):f(i) n] => ALL(k):[k n => PROD(i,x,x+k):f(i) n] Induction Prove: PROD(i,x,x+1):f(i) n (Induction, Part 1) Applying the definition of PROD... 28 x n => PROD(i,x,x):f(i)=f(x) U Spec, 24 29 PROD(i,x,x):f(i)=f(x) Detach, 28, 26 30 x n => f(x) n U Spec, 20 31 f(x) n Detach, 30, 26 32 PROD(i,x,x):f(i) n Substitute, 29, 31 33 ALL(b):[x n & b n => PROD(i,x,b+1):f(i)=PROD(i,x,b):f(i)*f(b+1)] U Spec, 25 34 x n & x n => PROD(i,x,x+1):f(i)=PROD(i,x,x):f(i)*f(x+1) U Spec, 33 35 x n & x n Join, 26, 26 36 PROD(i,x,x+1):f(i)=PROD(i,x,x):f(i)*f(x+1) Detach, 34, 35 37 ALL(b):[x n & b n => x+b n] U Spec, 9 38 x n & 1 n => x+1 n U Spec, 37 39 x n & 1 n Join, 26, 3 40 x+1 n Detach, 38, 39 41 x+1 n => f(x+1) n U Spec, 20 42 f(x+1) n Detach, 41, 40 Applying the definition of *... 43 ALL(b):[PROD(i,x,x):f(i) n & b n => PROD(i,x,x):f(i)*b n] U Spec, 13 44 PROD(i,x,x):f(i) n & f(x+1) n => PROD(i,x,x):f(i)*f(x+1) n U Spec, 43 45 PROD(i,x,x):f(i) n & f(x+1) n Join, 32, 42 46 PROD(i,x,x):f(i)*f(x+1) n Detach, 44, 45 As Required: (Induction, Part 1) 47 PROD(i,x,x+1):f(i) n Substitute, 36, 46 Prove: y n & PROD(i,x,x+y):f(i) n => PROD(i,x,x+(y+1)):f(i) n (Induction, Part 2) Suppose... 48 y n & PROD(i,x,x+y):f(i) n Premise 49 y n Split, 48 50 PROD(i,x,x+y):f(i) n Split, 48 Applying the definition of PROD... 51 ALL(b):[x n & b n => PROD(i,x,b+1):f(i)=PROD(i,x,b):f(i)*f(b+1)] U Spec, 25 52 x n & x+y n => PROD(i,x,x+y+1):f(i)=PROD(i,x,x+y):f(i)*f(x+y+1) U Spec, 51 53 ALL(b):[x n & b n => x+b n] U Spec, 9 54 x n & y n => x+y n U Spec, 53 55 x n & y n Join, 26, 49 56 x+y n Detach, 54, 55 57 x n & y n Join, 26, 49 58 x+y n Detach, 54, 57 59 x n & x+y n Join, 26, 58 60 PROD(i,x,x+y+1):f(i)=PROD(i,x,x+y):f(i)*f(x+y+1) Detach, 52, 59 61 x+y+1 n => f(x+y+1) n U Spec, 20 Applying the definition of + 62 ALL(b):[x+y n & b n => x+y+b n] U Spec, 9 63 x+y n & 1 n => x+y+1 n U Spec, 62 64 x+y n & 1 n Join, 58, 3 65 x+y+1 n Detach, 63, 64 66 f(x+y+1) n Detach, 61, 65 Applying the definition of * 67 ALL(b):[PROD(i,x,x+y):f(i) n & b n => PROD(i,x,x+y):f(i)*b n] U Spec, 13 68 PROD(i,x,x+y):f(i) n & f(x+y+1) n => PROD(i,x,x+y):f(i)*f(x+y+1) n U Spec, 67 69 PROD(i,x,x+y):f(i) n & f(x+y+1) n Join, 50, 66 70 PROD(i,x,x+y):f(i)*f(x+y+1) n Detach, 68, 69 71 PROD(i,x,x+y+1):f(i) n Substitute, 60, 70 Applying associativity of +... 72 ALL(b):ALL(c):[x n & b n & c n => x+b+c=x+(b+c)] U Spec, 19 73 ALL(c):[x n & y n & c n => x+y+c=x+(y+c)] U Spec, 72 74 x n & y n & 1 n => x+y+1=x+(y+1) U Spec, 73 75 x n & y n & 1 n Join, 57, 3 76 x+y+1=x+(y+1) Detach, 74, 75 77 PROD(i,x,x+(y+1)):f(i) n Substitute, 76, 71 As Required: 78 y n & PROD(i,x,x+y):f(i) n => PROD(i,x,x+(y+1)):f(i) n Conclusion, 48 As Required: (Induction, Part 2) 79 ALL(k):[k n & PROD(i,x,x+k):f(i) n => PROD(i,x,x+(k+1)):f(i) n] U Gen, 78 80 PROD(i,x,x+1):f(i) n & ALL(k):[k n & PROD(i,x,x+k):f(i) n => PROD(i,x,x+(k+1)):f(i) n] Join, 47, 79 81 ALL(k):[k n => PROD(i,x,x+k):f(i) n] Detach, 27, 80 As Required: 82 x n => ALL(k):[k n => PROD(i,x,x+k):f(i) n] Conclusion, 26 Generalizing... 83 ALL(j):[j n => ALL(k):[k n => PROD(i,j,j+k):f(i) n]] U Gen, 82 Prove: x n & y n & x<y => PROD(i,x,y):f(i) n Suppose... 84 x n & y n & x<y Premise 85 x n Split, 84 86 y n Split, 84 87 x<y Split, 84 Applying the definition of < 88 ALL(b):[x n & b n => [x<b <=> EXIST(c):[c n & x+c=b]]] U Spec, 17 89 x n & y n => [x<y <=> EXIST(c):[c n & x+c=y]] U Spec, 88 90 x n & y n Join, 85, 86 91 x<y <=> EXIST(c):[c n & x+c=y] Detach, 89, 90 92 [x<y => EXIST(c):[c n & x+c=y]] & [EXIST(c):[c n & x+c=y] => x<y] Iff-And, 91 93 x<y => EXIST(c):[c n & x+c=y] Split, 92 94 EXIST(c):[c n & x+c=y] => x<y Split, 92 95 EXIST(c):[c n & x+c=y] Detach, 93, 87 Define: z 96 z n & x+z=y E Spec, 95 97 z n Split, 96 98 x+z=y Split, 96 99 x n => ALL(k):[k n => PROD(i,x,x+k):f(i) n] U Spec, 83 100 ALL(k):[k n => PROD(i,x,x+k):f(i) n] Detach, 99, 85 101 z n => PROD(i,x,x+z):f(i) n U Spec, 100 102 PROD(i,x,x+z):f(i) n Detach, 101, 97 103 PROD(i,x,y):f(i) n Substitute, 98, 102 As Required: 104 x n & y n & x<y => PROD(i,x,y):f(i) n Conclusion, 84 Generalizing... 105 ALL(b):[x n & b n & x<b => PROD(i,x,b):f(i) n] U Gen, 104 As Required: 106 ALL(a):ALL(b):[a n & b n & a<b => PROD(i,a,b):f(i) n] U Gen, 105 Prove: x n & y n & x<=y => PROD(i,x,y):f(i) n Suppose... 107 x n & y n & x<=y Premise 108 x n Split, 107 109 y n Split, 107 110 x<=y Split, 107 Applying the definition of <=... 111 ALL(b):[x n & b n => [x<=b <=> x<b | x=b]] U Spec, 18 112 x n & y n => [x<=y <=> x<y | x=y] U Spec, 111 113 x n & y n Join, 108, 109 114 x<=y <=> x<y | x=y Detach, 112, 113 115 [x<=y => x<y | x=y] & [x<y | x=y => x<=y] Iff-And, 114 116 x<=y => x<y | x=y Split, 115 117 x<y | x=y => x<=y Split, 115 Cases 118 x<y | x=y Detach, 116, 110 Case 1 Suppose... 119 x<y Premise Applying previous result... 120 ALL(b):[x n & b n & x<b => PROD(i,x,b):f(i) n] U Spec, 106 121 x n & y n & x<y => PROD(i,x,y):f(i) n U Spec, 120 122 x n & y n Join, 108, 109 123 x n & y n & x<y Join, 122, 119 124 PROD(i,x,y):f(i) n Detach, 121, 123 Case 1 125 x<y => PROD(i,x,y):f(i) n Conclusion, 119 Case 2 Suppose... 126 x=y Premise Applying definition of PROD... 127 x n => PROD(i,x,x):f(i)=f(x) U Spec, 24 128 PROD(i,x,x):f(i)=f(x) Detach, 127, 108 129 PROD(i,x,y):f(i)=f(x) Substitute, 126, 128 130 x n => f(x) n U Spec, 20 131 f(x) n Detach, 130, 108 132 PROD(i,x,x):f(i) n Substitute, 128, 131 133 PROD(i,x,y):f(i) n Substitute, 126, 132 Case 2 134 x=y => PROD(i,x,y):f(i) n Conclusion, 126 135 [x<y => PROD(i,x,y):f(i) n] & [x=y => PROD(i,x,y):f(i) n] Join, 125, 134 136 PROD(i,x,y):f(i) n Cases, 118, 135 As Required: 137 x n & y n & x<=y => PROD(i,x,y):f(i) n Conclusion, 107 Generalizing... 138 ALL(b):[x n & b n & x<=b => PROD(i,x,b):f(i) n] U Gen, 137 139 ALL(a):ALL(b):[a n & b n & a<=b => PROD(i,a,b):f(i) n] U Gen, 138 As Required: 140 ALL(a):[a n => f(a) n] => ALL(a):ALL(b):[a n & b n & a<=b => PROD(i,a,b):f(i) n] Conclusion, 20 As Required: 141 ALL(f):[ALL(a):[a n => f(a) n] => ALL(a):ALL(b):[a n & b n & a<=b => PROD(i,a,b):f(i) n]] U Gen, 140