|
0 |
Rule of Constancy
|
|
1 |
=================
|
|
2 |
|
|
3 |
<!--
|
|
4 |
SPDX-FileCopyrightText: The authors of this work have dedicated it to the public domain.
|
|
5 |
For more information, please refer to <https://unlicense.org/>
|
|
6 |
SPDX-License-Identifier: Unlicense
|
|
7 |
-->
|
|
8 |
|
|
9 |
Here we take Johnson's 1892 equational axiom system for propositional logic, as
|
|
10 |
related in Meredith and Prior's 1967 paper [Equational Logic](https://projecteuclid.org/download/pdf_1/euclid.ndjfl/1093893457),
|
|
11 |
and write it in Eqthy:
|
|
12 |
|
|
13 |
axiom (#conj-comm) conj(X, Y) = conj(Y, X)
|
|
14 |
axiom (#conj-assoc) conj(X, conj(Y, Z)) = conj(conj(X, Y), Z)
|
|
15 |
axiom (#conj-idem) conj(X, X) = X
|
|
16 |
axiom (#neg-invol) not(not(X)) = X
|
|
17 |
axiom (#implication) not(X) = conj(not(conj(X, Y)), not(conj(X, not(Y))))
|
|
18 |
|
|
19 |
I don't have a good reason for calling axiom 5 "implication", only that it's
|
|
20 |
plausible that it serves a function similar to implication in this system,
|
|
21 |
and it's a nicer name than "axiom5".
|
|
22 |
|
|
23 |
Anyway, with these we can prove the "Rule of Constancy".
|
|
24 |
|
|
25 |
But first we're going to introduce a lemma to make this less tiresome.
|
|
26 |
We really should introduce this as its own theorem, and prove it. But
|
|
27 |
because it's "obvious", and tiresome, we'll cheat and assert it as an axiom.
|
|
28 |
|
|
29 |
axiom (#conj-perm) conj(A, conj(B, conj(C, D))) = conj(D, conj(B, conj(C, A)))
|
|
30 |
|
|
31 |
OK, now the theorem.
|
|
32 |
|
|
33 |
theorem (#rule-of-constancy)
|
|
34 |
conj(A, not(A)) = conj(C, not(C))
|
|
35 |
proof
|
|
36 |
A = A
|
|
37 |
conj(A, not(A)) = conj(A, not(A)) [by substitution of conj(A, not(A)) into A]
|
|
38 |
conj(A, not(A)) = conj(not(not(A)), not(A))
|
|
39 |
conj(A, not(A)) = conj(
|
|
40 |
not(not(A)),
|
|
41 |
conj(not(conj(A, C)), not(conj(A, not(C))))
|
|
42 |
) [by #implication with X=A, Y=C]
|
|
43 |
conj(A, not(A)) = conj(
|
|
44 |
conj(not(conj(not(A), C)), not(conj(not(A), not(C)))),
|
|
45 |
conj(not(conj(A, C)), not(conj(A, not(C))))
|
|
46 |
) [by #implication with X=A, Y=C]
|
|
47 |
|
|
48 |
conj(A, not(A)) = conj(
|
|
49 |
conj(not(conj(not(A), C)), not(conj(not(A), not(C)))),
|
|
50 |
conj(not(conj(A, C)), not(conj(not(C), A)))
|
|
51 |
) [by #conj-comm]
|
|
52 |
conj(A, not(A)) = conj(
|
|
53 |
conj(not(conj(not(A), C)), not(conj(not(A), not(C)))),
|
|
54 |
conj(not(conj(C, A)), not(conj(not(C), A)))
|
|
55 |
) [by #conj-comm]
|
|
56 |
conj(A, not(A)) = conj(
|
|
57 |
conj(not(conj(not(A), C)), not(conj(not(C), not(A)))),
|
|
58 |
conj(not(conj(C, A)), not(conj(not(C), A)))
|
|
59 |
) [by #conj-comm]
|
|
60 |
conj(A, not(A)) = conj(
|
|
61 |
conj(not(conj(C, not(A))), not(conj(not(C), not(A)))),
|
|
62 |
conj(not(conj(C, A)), not(conj(not(C), A)))
|
|
63 |
) [by #conj-comm]
|
|
64 |
|
|
65 |
conj(A, not(A)) = conj(
|
|
66 |
not(conj(C, not(A))),
|
|
67 |
conj(
|
|
68 |
not(conj(not(C), not(A))),
|
|
69 |
conj(
|
|
70 |
not(conj(C, A)),
|
|
71 |
not(conj(not(C), A))
|
|
72 |
)
|
|
73 |
)
|
|
74 |
)
|
|
75 |
|
|
76 |
conj(A, not(A)) = conj(
|
|
77 |
not(conj(not(C), A)),
|
|
78 |
conj(
|
|
79 |
not(conj(not(C), not(A))),
|
|
80 |
conj(
|
|
81 |
not(conj(C, A)),
|
|
82 |
not(conj(C, not(A)))
|
|
83 |
)
|
|
84 |
)
|
|
85 |
) [by #conj-perm]
|
|
86 |
|
|
87 |
conj(A, not(A)) = conj(
|
|
88 |
conj(
|
|
89 |
not(conj(not(C), A)),
|
|
90 |
not(conj(not(C), not(A)))
|
|
91 |
),
|
|
92 |
conj(
|
|
93 |
not(conj(C, A)),
|
|
94 |
not(conj(C, not(A)))
|
|
95 |
)
|
|
96 |
) [by #conj-assoc]
|
|
97 |
|
|
98 |
conj(A, not(A)) = conj(
|
|
99 |
not(not(C)),
|
|
100 |
conj(not(conj(C, A)), not(conj(C, not(A))))
|
|
101 |
) [by #implication with X=C, Y=A]
|
|
102 |
|
|
103 |
conj(A, not(A)) = conj(not(not(C)), not(C)) [by #implication with X=C, Y=A]
|
|
104 |
|
|
105 |
conj(A, not(A)) = conj(C, not(C))
|
|
106 |
qed
|
|
107 |
|
|
108 |
Now a question: Why did Johnson feel the need to do this? To show that
|
|
109 |
`conj(A, not(A))` is invariant, no matter one's choice of A. And thus,
|
|
110 |
it's a constant, and we can call this constant "Falsum".
|
|
111 |
|
|
112 |
But is this whole rigamarole necessary? Didn't Johnson allow substitution
|
|
113 |
as a rule? Yes, but uniform substition won't get us there: if you
|
|
114 |
substitute `C` for `A` you just get `conj(C, not(C)) = conj(C, not(C))`,
|
|
115 |
which doesn't tell you anything. The "implication" step really does
|
|
116 |
pull an arbitrary value out of the air, of the form `conj(C, not(C))`,
|
|
117 |
which gets folded, spindled, and mutilated, and shown to be equal to
|
|
118 |
`conj(A, not(A))`.
|