author | wenzelm |
Mon, 13 Mar 2000 13:20:51 +0100 | |
changeset 8433 | 8ae16c770fc8 |
parent 4833 | 2e53109d4bc8 |
child 9245 | 428385c4bc50 |
permissions | -rw-r--r-- |
1461 | 1 |
(* Title: HOLCF/sprod0.thy |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
2 |
ID: $Id$ |
1461 | 3 |
Author: Franz Regensburger |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
4 |
Copyright 1993 Technische Universitaet Muenchen |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
5 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
6 |
Lemmas for theory sprod0.thy |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
7 |
*) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
8 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
9 |
open Sprod0; |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
10 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
11 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
12 |
(* A non-emptyness result for Sprod *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
13 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
14 |
|
892 | 15 |
qed_goalw "SprodI" Sprod0.thy [Sprod_def] |
1461 | 16 |
"(Spair_Rep a b):Sprod" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
17 |
(fn prems => |
1461 | 18 |
[ |
19 |
(EVERY1 [rtac CollectI, rtac exI,rtac exI, rtac refl]) |
|
20 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
21 |
|
4833 | 22 |
qed_goal "inj_on_Abs_Sprod" Sprod0.thy |
23 |
"inj_on Abs_Sprod Sprod" |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
24 |
(fn prems => |
1461 | 25 |
[ |
4833 | 26 |
(rtac inj_on_inverseI 1), |
1461 | 27 |
(etac Abs_Sprod_inverse 1) |
28 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
29 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
30 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
31 |
(* Strictness and definedness of Spair_Rep *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
32 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
33 |
|
892 | 34 |
qed_goalw "strict_Spair_Rep" Sprod0.thy [Spair_Rep_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
35 |
"(a=UU | b=UU) ==> (Spair_Rep a b) = (Spair_Rep UU UU)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
36 |
(fn prems => |
1461 | 37 |
[ |
38 |
(cut_facts_tac prems 1), |
|
39 |
(rtac ext 1), |
|
40 |
(rtac ext 1), |
|
41 |
(rtac iffI 1), |
|
42 |
(fast_tac HOL_cs 1), |
|
43 |
(fast_tac HOL_cs 1) |
|
44 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
45 |
|
892 | 46 |
qed_goalw "defined_Spair_Rep_rev" Sprod0.thy [Spair_Rep_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
47 |
"(Spair_Rep a b) = (Spair_Rep UU UU) ==> (a=UU | b=UU)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
48 |
(fn prems => |
1461 | 49 |
[ |
1675 | 50 |
(case_tac "a=UU|b=UU" 1), |
1461 | 51 |
(atac 1), |
52 |
(rtac disjI1 1), |
|
53 |
(rtac ((hd prems) RS fun_cong RS fun_cong RS iffD2 RS mp RS |
|
54 |
conjunct1 RS sym) 1), |
|
55 |
(fast_tac HOL_cs 1), |
|
56 |
(fast_tac HOL_cs 1) |
|
57 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
58 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
59 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
60 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
61 |
(* injectivity of Spair_Rep and Ispair *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
62 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
63 |
|
892 | 64 |
qed_goalw "inject_Spair_Rep" Sprod0.thy [Spair_Rep_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
65 |
"[|~aa=UU ; ~ba=UU ; Spair_Rep a b = Spair_Rep aa ba |] ==> a=aa & b=ba" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
66 |
(fn prems => |
1461 | 67 |
[ |
68 |
(cut_facts_tac prems 1), |
|
69 |
(rtac ((nth_elem (2,prems)) RS fun_cong RS fun_cong |
|
70 |
RS iffD1 RS mp) 1), |
|
71 |
(fast_tac HOL_cs 1), |
|
72 |
(fast_tac HOL_cs 1) |
|
73 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
74 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
75 |
|
892 | 76 |
qed_goalw "inject_Ispair" Sprod0.thy [Ispair_def] |
1461 | 77 |
"[|~aa=UU ; ~ba=UU ; Ispair a b = Ispair aa ba |] ==> a=aa & b=ba" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
78 |
(fn prems => |
1461 | 79 |
[ |
80 |
(cut_facts_tac prems 1), |
|
81 |
(etac inject_Spair_Rep 1), |
|
82 |
(atac 1), |
|
4833 | 83 |
(etac (inj_on_Abs_Sprod RS inj_onD) 1), |
1461 | 84 |
(rtac SprodI 1), |
85 |
(rtac SprodI 1) |
|
86 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
87 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
88 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
89 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
90 |
(* strictness and definedness of Ispair *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
91 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
92 |
|
892 | 93 |
qed_goalw "strict_Ispair" Sprod0.thy [Ispair_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
94 |
"(a=UU | b=UU) ==> Ispair a b = Ispair UU UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
95 |
(fn prems => |
1461 | 96 |
[ |
97 |
(cut_facts_tac prems 1), |
|
98 |
(etac (strict_Spair_Rep RS arg_cong) 1) |
|
99 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
100 |
|
892 | 101 |
qed_goalw "strict_Ispair1" Sprod0.thy [Ispair_def] |
1461 | 102 |
"Ispair UU b = Ispair UU UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
103 |
(fn prems => |
1461 | 104 |
[ |
105 |
(rtac (strict_Spair_Rep RS arg_cong) 1), |
|
106 |
(rtac disjI1 1), |
|
107 |
(rtac refl 1) |
|
108 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
109 |
|
892 | 110 |
qed_goalw "strict_Ispair2" Sprod0.thy [Ispair_def] |
1461 | 111 |
"Ispair a UU = Ispair UU UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
112 |
(fn prems => |
1461 | 113 |
[ |
114 |
(rtac (strict_Spair_Rep RS arg_cong) 1), |
|
115 |
(rtac disjI2 1), |
|
116 |
(rtac refl 1) |
|
117 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
118 |
|
892 | 119 |
qed_goal "strict_Ispair_rev" Sprod0.thy |
1461 | 120 |
"~Ispair x y = Ispair UU UU ==> ~x=UU & ~y=UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
121 |
(fn prems => |
1461 | 122 |
[ |
123 |
(cut_facts_tac prems 1), |
|
1675 | 124 |
(rtac (de_Morgan_disj RS subst) 1), |
1461 | 125 |
(etac contrapos 1), |
126 |
(etac strict_Ispair 1) |
|
127 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
128 |
|
892 | 129 |
qed_goalw "defined_Ispair_rev" Sprod0.thy [Ispair_def] |
1461 | 130 |
"Ispair a b = Ispair UU UU ==> (a = UU | b = UU)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
131 |
(fn prems => |
1461 | 132 |
[ |
133 |
(cut_facts_tac prems 1), |
|
134 |
(rtac defined_Spair_Rep_rev 1), |
|
4833 | 135 |
(rtac (inj_on_Abs_Sprod RS inj_onD) 1), |
1461 | 136 |
(atac 1), |
137 |
(rtac SprodI 1), |
|
138 |
(rtac SprodI 1) |
|
139 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
140 |
|
892 | 141 |
qed_goal "defined_Ispair" Sprod0.thy |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
142 |
"[|a~=UU; b~=UU|] ==> (Ispair a b) ~= (Ispair UU UU)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
143 |
(fn prems => |
1461 | 144 |
[ |
145 |
(cut_facts_tac prems 1), |
|
146 |
(rtac contrapos 1), |
|
147 |
(etac defined_Ispair_rev 2), |
|
1675 | 148 |
(rtac (de_Morgan_disj RS iffD2) 1), |
1461 | 149 |
(etac conjI 1), |
150 |
(atac 1) |
|
151 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
152 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
153 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
154 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
155 |
(* Exhaustion of the strict product ** *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
156 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
157 |
|
892 | 158 |
qed_goalw "Exh_Sprod" Sprod0.thy [Ispair_def] |
1461 | 159 |
"z=Ispair UU UU | (? a b. z=Ispair a b & a~=UU & b~=UU)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
160 |
(fn prems => |
1461 | 161 |
[ |
162 |
(rtac (rewrite_rule [Sprod_def] Rep_Sprod RS CollectE) 1), |
|
163 |
(etac exE 1), |
|
164 |
(etac exE 1), |
|
165 |
(rtac (excluded_middle RS disjE) 1), |
|
166 |
(rtac disjI2 1), |
|
167 |
(rtac exI 1), |
|
168 |
(rtac exI 1), |
|
169 |
(rtac conjI 1), |
|
170 |
(rtac (Rep_Sprod_inverse RS sym RS trans) 1), |
|
171 |
(etac arg_cong 1), |
|
1675 | 172 |
(rtac (de_Morgan_disj RS subst) 1), |
1461 | 173 |
(atac 1), |
174 |
(rtac disjI1 1), |
|
175 |
(rtac (Rep_Sprod_inverse RS sym RS trans) 1), |
|
176 |
(res_inst_tac [("f","Abs_Sprod")] arg_cong 1), |
|
177 |
(etac trans 1), |
|
178 |
(etac strict_Spair_Rep 1) |
|
179 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
180 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
181 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
182 |
(* general elimination rule for strict product *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
183 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
184 |
|
892 | 185 |
qed_goal "IsprodE" Sprod0.thy |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
186 |
"[|p=Ispair UU UU ==> Q ;!!x y. [|p=Ispair x y; x~=UU ; y~=UU|] ==> Q|] ==> Q" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
187 |
(fn prems => |
1461 | 188 |
[ |
189 |
(rtac (Exh_Sprod RS disjE) 1), |
|
190 |
(etac (hd prems) 1), |
|
191 |
(etac exE 1), |
|
192 |
(etac exE 1), |
|
193 |
(etac conjE 1), |
|
194 |
(etac conjE 1), |
|
195 |
(etac (hd (tl prems)) 1), |
|
196 |
(atac 1), |
|
197 |
(atac 1) |
|
198 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
199 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
200 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
201 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
202 |
(* some results about the selectors Isfst, Issnd *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
203 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
204 |
|
892 | 205 |
qed_goalw "strict_Isfst" Sprod0.thy [Isfst_def] |
1461 | 206 |
"p=Ispair UU UU ==> Isfst p = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
207 |
(fn prems => |
1461 | 208 |
[ |
209 |
(cut_facts_tac prems 1), |
|
4535 | 210 |
(rtac select_equality 1), |
1461 | 211 |
(rtac conjI 1), |
212 |
(fast_tac HOL_cs 1), |
|
213 |
(strip_tac 1), |
|
214 |
(res_inst_tac [("P","Ispair UU UU = Ispair a b")] notE 1), |
|
215 |
(rtac not_sym 1), |
|
216 |
(rtac defined_Ispair 1), |
|
217 |
(REPEAT (fast_tac HOL_cs 1)) |
|
218 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
219 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
220 |
|
892 | 221 |
qed_goal "strict_Isfst1" Sprod0.thy |
1461 | 222 |
"Isfst(Ispair UU y) = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
223 |
(fn prems => |
1461 | 224 |
[ |
2033 | 225 |
(stac strict_Ispair1 1), |
1461 | 226 |
(rtac strict_Isfst 1), |
227 |
(rtac refl 1) |
|
228 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
229 |
|
892 | 230 |
qed_goal "strict_Isfst2" Sprod0.thy |
1461 | 231 |
"Isfst(Ispair x UU) = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
232 |
(fn prems => |
1461 | 233 |
[ |
2033 | 234 |
(stac strict_Ispair2 1), |
1461 | 235 |
(rtac strict_Isfst 1), |
236 |
(rtac refl 1) |
|
237 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
238 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
239 |
|
892 | 240 |
qed_goalw "strict_Issnd" Sprod0.thy [Issnd_def] |
1461 | 241 |
"p=Ispair UU UU ==>Issnd p=UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
242 |
(fn prems => |
1461 | 243 |
[ |
244 |
(cut_facts_tac prems 1), |
|
4535 | 245 |
(rtac select_equality 1), |
1461 | 246 |
(rtac conjI 1), |
247 |
(fast_tac HOL_cs 1), |
|
248 |
(strip_tac 1), |
|
249 |
(res_inst_tac [("P","Ispair UU UU = Ispair a b")] notE 1), |
|
250 |
(rtac not_sym 1), |
|
251 |
(rtac defined_Ispair 1), |
|
252 |
(REPEAT (fast_tac HOL_cs 1)) |
|
253 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
254 |
|
892 | 255 |
qed_goal "strict_Issnd1" Sprod0.thy |
1461 | 256 |
"Issnd(Ispair UU y) = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
257 |
(fn prems => |
1461 | 258 |
[ |
2033 | 259 |
(stac strict_Ispair1 1), |
1461 | 260 |
(rtac strict_Issnd 1), |
261 |
(rtac refl 1) |
|
262 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
263 |
|
892 | 264 |
qed_goal "strict_Issnd2" Sprod0.thy |
1461 | 265 |
"Issnd(Ispair x UU) = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
266 |
(fn prems => |
1461 | 267 |
[ |
2033 | 268 |
(stac strict_Ispair2 1), |
1461 | 269 |
(rtac strict_Issnd 1), |
270 |
(rtac refl 1) |
|
271 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
272 |
|
892 | 273 |
qed_goalw "Isfst" Sprod0.thy [Isfst_def] |
1461 | 274 |
"[|x~=UU ;y~=UU |] ==> Isfst(Ispair x y) = x" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
275 |
(fn prems => |
1461 | 276 |
[ |
277 |
(cut_facts_tac prems 1), |
|
4535 | 278 |
(rtac select_equality 1), |
1461 | 279 |
(rtac conjI 1), |
280 |
(strip_tac 1), |
|
281 |
(res_inst_tac [("P","Ispair x y = Ispair UU UU")] notE 1), |
|
282 |
(etac defined_Ispair 1), |
|
283 |
(atac 1), |
|
284 |
(atac 1), |
|
285 |
(strip_tac 1), |
|
286 |
(rtac (inject_Ispair RS conjunct1) 1), |
|
287 |
(fast_tac HOL_cs 3), |
|
288 |
(fast_tac HOL_cs 1), |
|
289 |
(fast_tac HOL_cs 1), |
|
290 |
(fast_tac HOL_cs 1) |
|
291 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
292 |
|
892 | 293 |
qed_goalw "Issnd" Sprod0.thy [Issnd_def] |
1461 | 294 |
"[|x~=UU ;y~=UU |] ==> Issnd(Ispair x y) = y" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
295 |
(fn prems => |
1461 | 296 |
[ |
297 |
(cut_facts_tac prems 1), |
|
4535 | 298 |
(rtac select_equality 1), |
1461 | 299 |
(rtac conjI 1), |
300 |
(strip_tac 1), |
|
301 |
(res_inst_tac [("P","Ispair x y = Ispair UU UU")] notE 1), |
|
302 |
(etac defined_Ispair 1), |
|
303 |
(atac 1), |
|
304 |
(atac 1), |
|
305 |
(strip_tac 1), |
|
306 |
(rtac (inject_Ispair RS conjunct2) 1), |
|
307 |
(fast_tac HOL_cs 3), |
|
308 |
(fast_tac HOL_cs 1), |
|
309 |
(fast_tac HOL_cs 1), |
|
310 |
(fast_tac HOL_cs 1) |
|
311 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
312 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
313 |
qed_goal "Isfst2" Sprod0.thy "y~=UU ==>Isfst(Ispair x y)=x" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
314 |
(fn prems => |
1461 | 315 |
[ |
316 |
(cut_facts_tac prems 1), |
|
317 |
(res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1), |
|
318 |
(etac Isfst 1), |
|
319 |
(atac 1), |
|
320 |
(hyp_subst_tac 1), |
|
321 |
(rtac strict_Isfst1 1) |
|
322 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
323 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
892
diff
changeset
|
324 |
qed_goal "Issnd2" Sprod0.thy "~x=UU ==>Issnd(Ispair x y)=y" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
325 |
(fn prems => |
1461 | 326 |
[ |
327 |
(cut_facts_tac prems 1), |
|
328 |
(res_inst_tac [("Q","y=UU")] (excluded_middle RS disjE) 1), |
|
329 |
(etac Issnd 1), |
|
330 |
(atac 1), |
|
331 |
(hyp_subst_tac 1), |
|
332 |
(rtac strict_Issnd2 1) |
|
333 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
334 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
335 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
336 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
337 |
(* instantiate the simplifier *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
338 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
339 |
|
1277
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
340 |
val Sprod0_ss = |
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
341 |
HOL_ss |
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
342 |
addsimps [strict_Isfst1,strict_Isfst2,strict_Issnd1,strict_Issnd2, |
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
343 |
Isfst2,Issnd2]; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
344 |
|
892 | 345 |
qed_goal "defined_IsfstIssnd" Sprod0.thy |
1461 | 346 |
"p~=Ispair UU UU ==> Isfst p ~= UU & Issnd p ~= UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
347 |
(fn prems => |
1461 | 348 |
[ |
349 |
(cut_facts_tac prems 1), |
|
350 |
(res_inst_tac [("p","p")] IsprodE 1), |
|
351 |
(contr_tac 1), |
|
352 |
(hyp_subst_tac 1), |
|
353 |
(rtac conjI 1), |
|
1277
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
354 |
(asm_simp_tac Sprod0_ss 1), |
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
355 |
(asm_simp_tac Sprod0_ss 1) |
1461 | 356 |
]); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
357 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
358 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
359 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
360 |
(* Surjective pairing: equivalent to Exh_Sprod *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
361 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
362 |
|
892 | 363 |
qed_goal "surjective_pairing_Sprod" Sprod0.thy |
1461 | 364 |
"z = Ispair(Isfst z)(Issnd z)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
365 |
(fn prems => |
1461 | 366 |
[ |
367 |
(res_inst_tac [("z1","z")] (Exh_Sprod RS disjE) 1), |
|
1277
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
368 |
(asm_simp_tac Sprod0_ss 1), |
1461 | 369 |
(etac exE 1), |
370 |
(etac exE 1), |
|
1277
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
regensbu
parents:
1274
diff
changeset
|
371 |
(asm_simp_tac Sprod0_ss 1) |
1461 | 372 |
]); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
373 |
|
2640 | 374 |
qed_goal "Sel_injective_Sprod" thy |
375 |
"[|Isfst x = Isfst y; Issnd x = Issnd y|] ==> x = y" |
|
376 |
(fn prems => |
|
377 |
[ |
|
378 |
(cut_facts_tac prems 1), |
|
379 |
(subgoal_tac "Ispair(Isfst x)(Issnd x)=Ispair(Isfst y)(Issnd y)" 1), |
|
380 |
(rotate_tac ~1 1), |
|
381 |
(asm_full_simp_tac(HOL_ss addsimps[surjective_pairing_Sprod RS sym])1), |
|
382 |
(Asm_simp_tac 1) |
|
383 |
]); |