4 Copyright 1991 University of Cambridge |
4 Copyright 1991 University of Cambridge |
5 |
5 |
6 Intuitionistic FOL: Examples from The Foundation of a Generic Theorem Prover |
6 Intuitionistic FOL: Examples from The Foundation of a Generic Theorem Prover |
7 *) |
7 *) |
8 |
8 |
9 writeln"File FOLP/ex/foundn.ML"; |
9 goal (theory "IFOLP") "?p : A&B --> (C-->A&C)"; |
10 |
|
11 goal IFOLP.thy "?p : A&B --> (C-->A&C)"; |
|
12 by (rtac impI 1); |
10 by (rtac impI 1); |
13 by (rtac impI 1); |
11 by (rtac impI 1); |
14 by (rtac conjI 1); |
12 by (rtac conjI 1); |
15 by (assume_tac 2); |
13 by (assume_tac 2); |
16 by (rtac conjunct1 1); |
14 by (rtac conjunct1 1); |
17 by (assume_tac 1); |
15 by (assume_tac 1); |
18 result(); |
16 result(); |
19 |
17 |
20 (*A form of conj-elimination*) |
18 (*A form of conj-elimination*) |
21 val prems = |
19 val prems = |
22 goal IFOLP.thy "p : A&B ==> (!!x y.[| x:A; y:B |] ==> f(x,y):C) ==> ?p:C"; |
20 goal (theory "IFOLP") "p : A&B ==> (!!x y.[| x:A; y:B |] ==> f(x,y):C) ==> ?p:C"; |
23 by (resolve_tac prems 1); |
21 by (resolve_tac prems 1); |
24 by (rtac conjunct1 1); |
22 by (rtac conjunct1 1); |
25 by (resolve_tac prems 1); |
23 by (resolve_tac prems 1); |
26 by (rtac conjunct2 1); |
24 by (rtac conjunct2 1); |
27 by (resolve_tac prems 1); |
25 by (resolve_tac prems 1); |
28 result(); |
26 result(); |
29 |
27 |
30 |
28 |
31 val prems = |
29 val prems = |
32 goal IFOLP.thy "(!!A x. x:~ ~A ==> cla(x):A) ==> ?p:B | ~B"; |
30 goal (theory "IFOLP") "(!!A x. x:~ ~A ==> cla(x):A) ==> ?p:B | ~B"; |
33 by (resolve_tac prems 1); |
31 by (resolve_tac prems 1); |
34 by (rtac notI 1); |
32 by (rtac notI 1); |
35 by (res_inst_tac [ ("P", "~B") ] notE 1); |
33 by (res_inst_tac [ ("P", "~B") ] notE 1); |
36 by (rtac notI 2); |
34 by (rtac notI 2); |
37 by (res_inst_tac [ ("P", "B | ~B") ] notE 2); |
35 by (res_inst_tac [ ("P", "B | ~B") ] notE 2); |
73 |
71 |
74 |
72 |
75 writeln"Examples with quantifiers"; |
73 writeln"Examples with quantifiers"; |
76 |
74 |
77 val prems = |
75 val prems = |
78 goal IFOLP.thy "p : ALL z. G(z) ==> ?p:ALL z. G(z)|H(z)"; |
76 goal (theory "IFOLP") "p : ALL z. G(z) ==> ?p:ALL z. G(z)|H(z)"; |
79 by (rtac allI 1); |
77 by (rtac allI 1); |
80 by (rtac disjI1 1); |
78 by (rtac disjI1 1); |
81 by (resolve_tac (prems RL [spec]) 1); |
79 by (resolve_tac (prems RL [spec]) 1); |
82 (*can use instead |
80 (*can use instead |
83 by (rtac spec 1); by (resolve_tac prems 1); *) |
81 by (rtac spec 1); by (resolve_tac prems 1); *) |
84 result(); |
82 result(); |
85 |
83 |
86 |
84 |
87 goal IFOLP.thy "?p : ALL x. EX y. x=y"; |
85 goal (theory "IFOLP") "?p : ALL x. EX y. x=y"; |
88 by (rtac allI 1); |
86 by (rtac allI 1); |
89 by (rtac exI 1); |
87 by (rtac exI 1); |
90 by (rtac refl 1); |
88 by (rtac refl 1); |
91 result(); |
89 result(); |
92 |
90 |
93 |
91 |
94 goal IFOLP.thy "?p : EX y. ALL x. x=y"; |
92 goal (theory "IFOLP") "?p : EX y. ALL x. x=y"; |
95 by (rtac exI 1); |
93 by (rtac exI 1); |
96 by (rtac allI 1); |
94 by (rtac allI 1); |
97 by (rtac refl 1) handle ERROR => writeln"Failed, as expected"; |
95 by (rtac refl 1) handle ERROR => writeln"Failed, as expected"; |
98 getgoal 1; |
96 getgoal 1; |
99 |
97 |
100 |
98 |
101 (*Parallel lifting example. *) |
99 (*Parallel lifting example. *) |
102 goal IFOLP.thy "?p : EX u. ALL x. EX v. ALL y. EX w. P(u,x,v,y,w)"; |
100 goal (theory "IFOLP") "?p : EX u. ALL x. EX v. ALL y. EX w. P(u,x,v,y,w)"; |
103 by (resolve_tac [exI, allI] 1); |
101 by (resolve_tac [exI, allI] 1); |
104 by (resolve_tac [exI, allI] 1); |
102 by (resolve_tac [exI, allI] 1); |
105 by (resolve_tac [exI, allI] 1); |
103 by (resolve_tac [exI, allI] 1); |
106 by (resolve_tac [exI, allI] 1); |
104 by (resolve_tac [exI, allI] 1); |
107 by (resolve_tac [exI, allI] 1); |
105 by (resolve_tac [exI, allI] 1); |
108 |
106 |
109 |
107 |
110 val prems = |
108 val prems = |
111 goal IFOLP.thy "p : (EX z. F(z)) & B ==> ?p:(EX z. F(z) & B)"; |
109 goal (theory "IFOLP") "p : (EX z. F(z)) & B ==> ?p:(EX z. F(z) & B)"; |
112 by (rtac conjE 1); |
110 by (rtac conjE 1); |
113 by (resolve_tac prems 1); |
111 by (resolve_tac prems 1); |
114 by (rtac exE 1); |
112 by (rtac exE 1); |
115 by (assume_tac 1); |
113 by (assume_tac 1); |
116 by (rtac exI 1); |
114 by (rtac exI 1); |
119 by (assume_tac 1); |
117 by (assume_tac 1); |
120 result(); |
118 result(); |
121 |
119 |
122 |
120 |
123 (*A bigger demonstration of quantifiers -- not in the paper*) |
121 (*A bigger demonstration of quantifiers -- not in the paper*) |
124 goal IFOLP.thy "?p : (EX y. ALL x. Q(x,y)) --> (ALL x. EX y. Q(x,y))"; |
122 goal (theory "IFOLP") "?p : (EX y. ALL x. Q(x,y)) --> (ALL x. EX y. Q(x,y))"; |
125 by (rtac impI 1); |
123 by (rtac impI 1); |
126 by (rtac allI 1); |
124 by (rtac allI 1); |
127 by (rtac exE 1 THEN assume_tac 1); |
125 by (rtac exE 1 THEN assume_tac 1); |
128 by (rtac exI 1); |
126 by (rtac exI 1); |
129 by (rtac allE 1 THEN assume_tac 1); |
127 by (rtac allE 1 THEN assume_tac 1); |
130 by (assume_tac 1); |
128 by (assume_tac 1); |
131 result(); |
129 result(); |
132 |
|
133 |
|
134 writeln"Reached end of file."; |
|