| author | nipkow | 
| Tue, 28 Mar 2000 17:31:36 +0200 | |
| changeset 8600 | a466c687c726 | 
| 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: 
892diff
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: 
892diff
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: 
892diff
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: 
892diff
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: 
892diff
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: 
892diff
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: 
892diff
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: 
892diff
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: 
1274diff
changeset | 340 | val Sprod0_ss = | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
changeset | 341 | HOL_ss | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
changeset | 342 | addsimps [strict_Isfst1,strict_Isfst2,strict_Issnd1,strict_Issnd2, | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
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: 
1274diff
changeset | 354 | (asm_simp_tac Sprod0_ss 1), | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
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: 
1274diff
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: 
1274diff
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 | ]); |