9 imports FOLP |
9 imports FOLP |
10 begin |
10 begin |
11 |
11 |
12 |
12 |
13 text "commutative laws of & and | " |
13 text "commutative laws of & and | " |
14 lemma "?p : P & Q --> Q & P" |
14 schematic_lemma "?p : P & Q --> Q & P" |
15 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
15 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
16 |
16 |
17 lemma "?p : P | Q --> Q | P" |
17 schematic_lemma "?p : P | Q --> Q | P" |
18 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
18 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
19 |
19 |
20 |
20 |
21 text "associative laws of & and | " |
21 text "associative laws of & and | " |
22 lemma "?p : (P & Q) & R --> P & (Q & R)" |
22 schematic_lemma "?p : (P & Q) & R --> P & (Q & R)" |
23 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
23 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
24 |
24 |
25 lemma "?p : (P | Q) | R --> P | (Q | R)" |
25 schematic_lemma "?p : (P | Q) | R --> P | (Q | R)" |
26 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
26 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
27 |
27 |
28 |
28 |
29 text "distributive laws of & and | " |
29 text "distributive laws of & and | " |
30 lemma "?p : (P & Q) | R --> (P | R) & (Q | R)" |
30 schematic_lemma "?p : (P & Q) | R --> (P | R) & (Q | R)" |
31 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
31 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
32 |
32 |
33 lemma "?p : (P | R) & (Q | R) --> (P & Q) | R" |
33 schematic_lemma "?p : (P | R) & (Q | R) --> (P & Q) | R" |
34 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
34 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
35 |
35 |
36 lemma "?p : (P | Q) & R --> (P & R) | (Q & R)" |
36 schematic_lemma "?p : (P | Q) & R --> (P & R) | (Q & R)" |
37 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
37 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
38 |
38 |
39 |
39 |
40 lemma "?p : (P & R) | (Q & R) --> (P | Q) & R" |
40 schematic_lemma "?p : (P & R) | (Q & R) --> (P | Q) & R" |
41 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
41 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
42 |
42 |
43 |
43 |
44 text "Laws involving implication" |
44 text "Laws involving implication" |
45 |
45 |
46 lemma "?p : (P-->R) & (Q-->R) <-> (P|Q --> R)" |
46 schematic_lemma "?p : (P-->R) & (Q-->R) <-> (P|Q --> R)" |
47 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
47 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
48 |
48 |
49 lemma "?p : (P & Q --> R) <-> (P--> (Q-->R))" |
49 schematic_lemma "?p : (P & Q --> R) <-> (P--> (Q-->R))" |
50 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
50 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
51 |
51 |
52 lemma "?p : ((P-->R)-->R) --> ((Q-->R)-->R) --> (P&Q-->R) --> R" |
52 schematic_lemma "?p : ((P-->R)-->R) --> ((Q-->R)-->R) --> (P&Q-->R) --> R" |
53 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
53 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
54 |
54 |
55 lemma "?p : ~(P-->R) --> ~(Q-->R) --> ~(P&Q-->R)" |
55 schematic_lemma "?p : ~(P-->R) --> ~(Q-->R) --> ~(P&Q-->R)" |
56 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
56 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
57 |
57 |
58 lemma "?p : (P --> Q & R) <-> (P-->Q) & (P-->R)" |
58 schematic_lemma "?p : (P --> Q & R) <-> (P-->Q) & (P-->R)" |
59 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
59 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
60 |
60 |
61 |
61 |
62 text "Propositions-as-types" |
62 text "Propositions-as-types" |
63 |
63 |
64 (*The combinator K*) |
64 (*The combinator K*) |
65 lemma "?p : P --> (Q --> P)" |
65 schematic_lemma "?p : P --> (Q --> P)" |
66 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
66 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
67 |
67 |
68 (*The combinator S*) |
68 (*The combinator S*) |
69 lemma "?p : (P-->Q-->R) --> (P-->Q) --> (P-->R)" |
69 schematic_lemma "?p : (P-->Q-->R) --> (P-->Q) --> (P-->R)" |
70 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
70 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
71 |
71 |
72 |
72 |
73 (*Converse is classical*) |
73 (*Converse is classical*) |
74 lemma "?p : (P-->Q) | (P-->R) --> (P --> Q | R)" |
74 schematic_lemma "?p : (P-->Q) | (P-->R) --> (P --> Q | R)" |
75 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
75 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
76 |
76 |
77 lemma "?p : (P-->Q) --> (~Q --> ~P)" |
77 schematic_lemma "?p : (P-->Q) --> (~Q --> ~P)" |
78 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
78 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
79 |
79 |
80 |
80 |
81 text "Schwichtenberg's examples (via T. Nipkow)" |
81 text "Schwichtenberg's examples (via T. Nipkow)" |
82 |
82 |
83 lemma stab_imp: "?p : (((Q-->R)-->R)-->Q) --> (((P-->Q)-->R)-->R)-->P-->Q" |
83 schematic_lemma stab_imp: "?p : (((Q-->R)-->R)-->Q) --> (((P-->Q)-->R)-->R)-->P-->Q" |
84 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
84 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
85 |
85 |
86 lemma stab_to_peirce: "?p : (((P --> R) --> R) --> P) --> (((Q --> R) --> R) --> Q) |
86 schematic_lemma stab_to_peirce: "?p : (((P --> R) --> R) --> P) --> (((Q --> R) --> R) --> Q) |
87 --> ((P --> Q) --> P) --> P" |
87 --> ((P --> Q) --> P) --> P" |
88 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
88 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
89 |
89 |
90 lemma peirce_imp1: "?p : (((Q --> R) --> Q) --> Q) |
90 schematic_lemma peirce_imp1: "?p : (((Q --> R) --> Q) --> Q) |
91 --> (((P --> Q) --> R) --> P --> Q) --> P --> Q" |
91 --> (((P --> Q) --> R) --> P --> Q) --> P --> Q" |
92 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
92 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
93 |
93 |
94 lemma peirce_imp2: "?p : (((P --> R) --> P) --> P) --> ((P --> Q --> R) --> P) --> P" |
94 schematic_lemma peirce_imp2: "?p : (((P --> R) --> P) --> P) --> ((P --> Q --> R) --> P) --> P" |
95 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
95 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
96 |
96 |
97 lemma mints: "?p : ((((P --> Q) --> P) --> P) --> Q) --> Q" |
97 schematic_lemma mints: "?p : ((((P --> Q) --> P) --> P) --> Q) --> Q" |
98 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
98 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
99 |
99 |
100 lemma mints_solovev: "?p : (P --> (Q --> R) --> Q) --> ((P --> Q) --> R) --> R" |
100 schematic_lemma mints_solovev: "?p : (P --> (Q --> R) --> Q) --> ((P --> Q) --> R) --> R" |
101 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
101 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
102 |
102 |
103 lemma tatsuta: "?p : (((P7 --> P1) --> P10) --> P4 --> P5) |
103 schematic_lemma tatsuta: "?p : (((P7 --> P1) --> P10) --> P4 --> P5) |
104 --> (((P8 --> P2) --> P9) --> P3 --> P10) |
104 --> (((P8 --> P2) --> P9) --> P3 --> P10) |
105 --> (P1 --> P8) --> P6 --> P7 |
105 --> (P1 --> P8) --> P6 --> P7 |
106 --> (((P3 --> P2) --> P9) --> P4) |
106 --> (((P3 --> P2) --> P9) --> P4) |
107 --> (P1 --> P3) --> (((P6 --> P1) --> P2) --> P9) --> P5" |
107 --> (P1 --> P3) --> (((P6 --> P1) --> P2) --> P9) --> P5" |
108 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
108 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
109 |
109 |
110 lemma tatsuta1: "?p : (((P8 --> P2) --> P9) --> P3 --> P10) |
110 schematic_lemma tatsuta1: "?p : (((P8 --> P2) --> P9) --> P3 --> P10) |
111 --> (((P3 --> P2) --> P9) --> P4) |
111 --> (((P3 --> P2) --> P9) --> P4) |
112 --> (((P6 --> P1) --> P2) --> P9) |
112 --> (((P6 --> P1) --> P2) --> P9) |
113 --> (((P7 --> P1) --> P10) --> P4 --> P5) |
113 --> (((P7 --> P1) --> P10) --> P4 --> P5) |
114 --> (P1 --> P3) --> (P1 --> P8) --> P6 --> P7 --> P5" |
114 --> (P1 --> P3) --> (P1 --> P8) --> P6 --> P7 --> P5" |
115 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |
115 by (tactic {* Cla.fast_tac FOLP_cs 1 *}) |