Constructing the MULTIPLY Function
Here, we construct the multiply function for the natural numbers using Peano's
Axioms and previous results for the add function (+).
(F5 to view highlights only)
Peano's axioms for the natural numbers
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
Splitting...
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: + for the natural numbers
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
Properties of + (previous results)
12 ALL(a):ALL(b):ALL(c):[a
n & b
n & c
n => a+b+c=a+(b+c)]
& ALL(a):ALL(b):[a
n & b
n => a+b=b+a]
& ALL(a):ALL(b):ALL(c):[a
n & b
n & c
n & a+b=c+b => a=c]
Premise
+ is associative
13 ALL(a):ALL(b):ALL(c):[a
n & b
n & c
n => a+b+c=a+(b+c)]
Split, 12
+ is commutative
14 ALL(a):ALL(b):[a
n & b
n => a+b=b+a]
Split, 12
+ is cancellable
15 ALL(a):ALL(b):ALL(c):[a
n & b
n & c
n & a+b=c+b => a=c]
Split, 12
Construct the set of ordered triples of natural numbers, n3
Applying the Cartesian Product rule...
16 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 <=> c1
a1 & c2
a2 & c3
a3]]]
Cart Prod
17 ALL(a2):ALL(a3):[Set(n) & Set(a2) & Set(a3) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
b <=> c1
n & c2
a2 & c3
a3]]]
U Spec, 16
18 ALL(a3):[Set(n) & Set(n) & Set(a3) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
b <=> c1
n & c2
n & c3
a3]]]
U Spec, 17
19 Set(n) & Set(n) & Set(n) => EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
b <=> c1
n & c2
n & c3
n]]
U Spec, 18
20 Set(n) & Set(n)
Join, 2, 2
21 Set(n) & Set(n) & Set(n)
Join, 20, 2
22 EXIST(b):[Set''(b) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
b <=> c1
n & c2
n & c3
n]]
Detach, 19, 21
Define: n3, the set of ordered triples of natural numbers
23 Set''(n3) & ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
n3 <=> c1
n & c2
n & c3
n]
E Spec, 22
24 Set''(n3)
Split, 23
25 ALL(c1):ALL(c2):ALL(c3):[(c1,c2,c3)
n3 <=> c1
n & c2
n & c3
n]
Split, 23
26 EXIST(multiply):[Set''(multiply) & ALL(a):ALL(b):ALL(c):[(a,b,c)
multiply
<=> (a,b,c)
n3 & [b=1 & c=a | EXIST(b'):EXIST(c'):[b'
n & c'
n & (a,b',c')
multiply & b=b'+1 & c=c'+a]]]]
Subset, 24
Define: multiply, a subset of n3
27 Set''(multiply) & ALL(a):ALL(b):ALL(c):[(a,b,c)
multiply
<=> (a,b,c)
n3 & [b=1 & c=a | EXIST(b'):EXIST(c'):[b'
n & c'
n & (a,b',c')
multiply & b=b'+1 & c=c'+a]]]
E Spec, 26
28 Set''(multiply)
Split, 27
29 ALL(a):ALL(b):ALL(c):[(a,b,c)
multiply
<=> (a,b,c)
n3 & [b=1 & c=a | EXIST(b'):EXIST(c'):[b'
n & c'
n & (a,b',c')
multiply & b=b'+1 & c=c'+a]]]
Split, 27
Prove: x
n => (x,1,x)
mulitply
Suppose...
30 x
n
Premise
31 ALL(b):ALL(c):[(x,b,c)
multiply
<=> (x,b,c)
n3 & [b=1 & c=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & b=b'+1 & c=c'+x]]]
U Spec, 29
32 ALL(c):[(x,1,c)
multiply
<=> (x,1,c)
n3 & [1=1 & c=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & c=c'+x]]]
U Spec, 31
33 (x,1,x)
multiply
<=> (x,1,x)
n3 & [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]]
U Spec, 32
34 [(x,1,x)
multiply => (x,1,x)
n3 & [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]]]
& [(x,1,x)
n3 & [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]] => (x,1,x)
multiply]
Iff-And, 33
35 (x,1,x)
multiply => (x,1,x)
n3 & [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]]
Split, 34
Sufficient: For (x,1,x)
multiply
36 (x,1,x)
n3 & [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]] => (x,1,x)
multiply
Split, 34
Prove: (x,1,x)
n3
37 ALL(c2):ALL(c3):[(x,c2,c3)
n3 <=> x
n & c2
n & c3
n]
U Spec, 25
38 ALL(c3):[(x,1,c3)
n3 <=> x
n & 1
n & c3
n]
U Spec, 37
39 (x,1,x)
n3 <=> x
n & 1
n & x
n
U Spec, 38
40 [(x,1,x)
n3 => x
n & 1
n & x
n]
& [x
n & 1
n & x
n => (x,1,x)
n3]
Iff-And, 39
41 (x,1,x)
n3 => x
n & 1
n & x
n
Split, 40
42 x
n & 1
n & x
n => (x,1,x)
n3
Split, 40
43 x
n & 1
n
Join, 30, 3
44 x
n & 1
n & x
n
Join, 43, 30
As Required:
45 (x,1,x)
n3
Detach, 42, 44
46 1=1
Reflex
47 x=x
Reflex
48 1=1 & x=x
Join, 46, 47
49 1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]
Arb Or, 48
50 (x,1,x)
n3
& [1=1 & x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & 1=b'+1 & x=c'+x]]
Join, 45, 49
51 (x,1,x)
multiply
Detach, 36, 50
As Required:
52 x
n => (x,1,x)
multiply
Conclusion, 30
Lemma 1
53 ALL(a):[a
n => (a,1,a)
multiply]
U Gen, 52
Prove: x
n & y
n & z
n & (x,y,z)
multiply => (x,y+1,z+x)
multiply
Suppose...
54 x
n & y
n & z
n & (x,y,z)
multiply
Premise
55 x
n
Split, 54
56 y
n
Split, 54
57 z
n
Split, 54
58 (x,y,z)
multiply
Split, 54
59 ALL(b):ALL(c):[(x,b,c)
multiply
<=> (x,b,c)
n3 & [b=1 & c=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & b=b'+1 & c=c'+x]]]
U Spec, 29
60 ALL(c):[(x,y+1,c)
multiply
<=> (x,y+1,c)
n3 & [y+1=1 & c=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & c=c'+x]]]
U Spec, 59
61 (x,y+1,z+x)
multiply
<=> (x,y+1,z+x)
n3 & [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]]
U Spec, 60
62 [(x,y+1,z+x)
multiply => (x,y+1,z+x)
n3 & [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]]]
& [(x,y+1,z+x)
n3 & [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]] => (x,y+1,z+x)
multiply]
Iff-And, 61
63 (x,y+1,z+x)
multiply => (x,y+1,z+x)
n3 & [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]]
Split, 62
Sufficient: For (x,y+1,z+x)
multiply
64 (x,y+1,z+x)
n3 & [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]] => (x,y+1,z+x)
multiply
Split, 62
Prove: (x,y+1,z+x)
n3
65 ALL(c2):ALL(c3):[(x,c2,c3)
n3 <=> x
n & c2
n & c3
n]
U Spec, 25
66 ALL(c3):[(x,y+1,c3)
n3 <=> x
n & y+1
n & c3
n]
U Spec, 65
67 (x,y+1,z+x)
n3 <=> x
n & y+1
n & z+x
n
U Spec, 66
68 [(x,y+1,z+x)
n3 => x
n & y+1
n & z+x
n]
& [x
n & y+1
n & z+x
n => (x,y+1,z+x)
n3]
Iff-And, 67
69 (x,y+1,z+x)
n3 => x
n & y+1
n & z+x
n
Split, 68
70 x
n & y+1
n & z+x
n => (x,y+1,z+x)
n3
Split, 68
71 ALL(b):[y
n & b
n => y+b
n]
U Spec, 9
72 y
n & 1
n => y+1
n
U Spec, 71
73 y
n & 1
n
Join, 56, 3
74 y+1
n
Detach, 72, 73
75 ALL(b):[z
n & b
n => z+b
n]
U Spec, 9
76 z
n & x
n => z+x
n
U Spec, 75
77 z
n & x
n
Join, 57, 55
78 z+x
n
Detach, 76, 77
79 x
n & y+1
n
Join, 55, 74
80 x
n & y+1
n & z+x
n
Join, 79, 78
As Required:
81 (x,y+1,z+x)
n3
Detach, 70, 80
82 y+1=y+1
Reflex
83 z+x=z+x
Reflex
84 y
n & z
n
Join, 56, 57
85 y
n & z
n & (x,y,z)
multiply
Join, 84, 58
86 y
n & z
n & (x,y,z)
multiply & y+1=y+1
Join, 85, 82
87 y
n & z
n & (x,y,z)
multiply & y+1=y+1 & z+x=z+x
Join, 86, 83
88 EXIST(c'):[y
n & c'
n & (x,y,c')
multiply & y+1=y+1 & z+x=c'+x]
E Gen, 87
89 EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]
E Gen, 88
90 y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]
Arb Or, 89
91 (x,y+1,z+x)
n3
& [y+1=1 & z+x=x | EXIST(b'):EXIST(c'):[b'
n & c'
n & (x,b',c')
multiply & y+1=b'+1 & z+x=c'+x]]
Join, 81, 90
92 (x,y+1,z+x)
multiply
Detach, 64, 91
As Required:
93 x
n & y
n & z
n & (x,y,z)
multiply
=> (x,y+1,z+x)
multiply
Conclusion, 54
94 ALL(c):[x
n & y
n & c
n & (x,y,c)
multiply
=> (x,y+1,c+x)
multiply]
U Gen, 93
95 ALL(b):ALL(c):[x
n & b
n & c
n & (x,b,c)
multiply
=> (x,b+1,c+x)
multiply]
U Gen, 94
Lemma 2
96 ALL(a):ALL(b):ALL(c):[a
n & b
n & c
n & (a,b,c)
multiply
=> (a,b+1,c+a)
multiply]
U Gen, 95
97 ALL(f):ALL(a1):ALL(a2):ALL(b):[Set''(f)
& Set(a1) & Set(a2) & Set(b)
& ALL(c1):ALL(c2):[c1
a1 & c2
a2 => EXIST(d):[d
b & (c1,c2,d)
f]]
& ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1
a1 & c2
a2 & d1
b & d2
b & (c1,c2,d1)
f & (c1,c2,d2)
f => d1=d2]
=> ALL(c1):ALL(c2):ALL(d):[c1
a1 & c2
a2 & d
b => [d=f(c1,c2) <=> (c1,c2,d)
f]]]
Function
98 ALL(a1):ALL(a2):ALL(b):[Set''(multiply)
& Set(a1) & Set(a2) & Set(b)
& ALL(c1):ALL(c2):[c1
a1 & c2
a2 => EXIST(d):[d
b & (c1,c2,d)
multiply]]
& ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1
a1 & c2
a2 & d1
b & d2
b & (c1,c2,d1)
multiply & (c1,c2,d2)
multiply => d1=d2]
=> ALL(c1):ALL(c2):ALL(d):[c1
a1 & c2
a2 & d
b => [d=multiply(c1,c2) <=> (c1,c2,d)
multiply]]]
U Spec, 97
99 ALL(a2):ALL(b):[Set''(multiply)
& Set(n) & Set(a2) & Set(b)
& ALL(c1):ALL(c2):[c1
n & c2
a2 => EXIST(d):[d
b & (c1,c2,d)
multiply]]
& ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1
n & c2
a2 & d1
b & d2
b & (c1,c2,d1)
multiply & (c1,c2,d2)
multiply => d1=d2]
=> ALL(c1):ALL(c2):ALL(d):[c1
n & c2
a2 & d
b => [d=multiply(c1,c2) <=> (c1,c2,d)
multiply]]]
U Spec, 98
100 ALL(b):[Set''(multiply)
& Set(n) & Set(n) & Set(b)
& ALL(c1):ALL(c2):[c1
n & c2
n => EXIST(d):[d
b & (c1,c2,d)
multiply]]
& ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1
n & c2
n & d1
b & d2
b & (c1,c2,d1)
multiply & (c1,c2,d2)
multiply => d1=d2]
=> ALL(c1):ALL(c2):ALL(d):[c1
n & c2
n & d
b => [d=multiply(c1,c2) <=> (c1,c2,d)
multiply]]]
U Spec, 99
Sufficient: For functionality of multiply
101 Set''(multiply)
& Set(n) & Set(n) & Set(n)
& ALL(c1):ALL(c2):[c1
n & c2
n => EXIST(d):[d
n & (c1,c2,d)
multiply]]
& ALL(c1):ALL(c2):ALL(d1):ALL(d2):[c1
n & c2
n & d1
n & d2
n & (c1,c2,d1)
multiply & (c1,c2,d2)
multiply => d1=d2]
=> ALL(c1):ALL(c2):ALL(d):[c1
n & c2
n & d
n => [d=multiply(c1,c2) <=> (c1,c2,d)
multiply]]
U Spec, 100