| author | paulson | 
| Tue, 22 Jul 1997 11:15:14 +0200 | |
| changeset 3539 | d4443afc8d28 | 
| parent 1675 | 36ba4da350c3 | 
| child 4098 | 71e05eb27fb6 | 
| permissions | -rw-r--r-- | 
| 1461 | 1 | (* Title: HOLCF/ssum0.ML | 
| 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 ssum0.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 Ssum0; | 
| 
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 Sssum *) | 
| 
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 "SsumIl" Ssum0.thy [Ssum_def] "Sinl_Rep(a):Ssum" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 16 | (fn prems => | 
| 1461 | 17 | [ | 
| 18 | (rtac CollectI 1), | |
| 19 | (rtac disjI1 1), | |
| 20 | (rtac exI 1), | |
| 21 | (rtac refl 1) | |
| 22 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 23 | |
| 892 | 24 | qed_goalw "SsumIr" Ssum0.thy [Ssum_def] "Sinr_Rep(a):Ssum" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 25 | (fn prems => | 
| 1461 | 26 | [ | 
| 27 | (rtac CollectI 1), | |
| 28 | (rtac disjI2 1), | |
| 29 | (rtac exI 1), | |
| 30 | (rtac refl 1) | |
| 31 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 32 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 33 | qed_goal "inj_onto_Abs_Ssum" Ssum0.thy "inj_onto Abs_Ssum Ssum" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 34 | (fn prems => | 
| 1461 | 35 | [ | 
| 36 | (rtac inj_onto_inverseI 1), | |
| 37 | (etac Abs_Ssum_inverse 1) | |
| 38 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 39 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 40 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 41 | (* Strictness of Sinr_Rep, Sinl_Rep and Isinl, Isinr *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 42 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 43 | |
| 892 | 44 | qed_goalw "strict_SinlSinr_Rep" Ssum0.thy [Sinr_Rep_def,Sinl_Rep_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 45 | "Sinl_Rep(UU) = Sinr_Rep(UU)" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 46 | (fn prems => | 
| 1461 | 47 | [ | 
| 48 | (rtac ext 1), | |
| 49 | (rtac ext 1), | |
| 50 | (rtac ext 1), | |
| 51 | (fast_tac HOL_cs 1) | |
| 52 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 53 | |
| 892 | 54 | qed_goalw "strict_IsinlIsinr" Ssum0.thy [Isinl_def,Isinr_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 55 | "Isinl(UU) = Isinr(UU)" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 56 | (fn prems => | 
| 1461 | 57 | [ | 
| 58 | (rtac (strict_SinlSinr_Rep RS arg_cong) 1) | |
| 59 | ]); | |
| 243 
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 | |
| 
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 | (* distinctness of Sinl_Rep, Sinr_Rep and Isinl, Isinr *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 64 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 65 | |
| 892 | 66 | qed_goalw "noteq_SinlSinr_Rep" Ssum0.thy [Sinl_Rep_def,Sinr_Rep_def] | 
| 1461 | 67 | "(Sinl_Rep(a) = Sinr_Rep(b)) ==> a=UU & b=UU" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 68 | (fn prems => | 
| 1461 | 69 | [ | 
| 70 | (rtac conjI 1), | |
| 1675 | 71 | (case_tac "a=UU" 1), | 
| 1461 | 72 | (atac 1), | 
| 73 | (rtac ((hd prems) RS fun_cong RS fun_cong RS fun_cong RS iffD2 | |
| 74 | RS mp RS conjunct1 RS sym) 1), | |
| 75 | (fast_tac HOL_cs 1), | |
| 76 | (atac 1), | |
| 1675 | 77 | (case_tac "b=UU" 1), | 
| 1461 | 78 | (atac 1), | 
| 79 | (rtac ((hd prems) RS fun_cong RS fun_cong RS fun_cong RS iffD1 | |
| 80 | RS mp RS conjunct1 RS sym) 1), | |
| 81 | (fast_tac HOL_cs 1), | |
| 82 | (atac 1) | |
| 83 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 84 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 85 | |
| 892 | 86 | qed_goalw "noteq_IsinlIsinr" Ssum0.thy [Isinl_def,Isinr_def] | 
| 1461 | 87 | "Isinl(a)=Isinr(b) ==> a=UU & b=UU" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 88 | (fn prems => | 
| 1461 | 89 | [ | 
| 90 | (cut_facts_tac prems 1), | |
| 91 | (rtac noteq_SinlSinr_Rep 1), | |
| 92 | (etac (inj_onto_Abs_Ssum RS inj_ontoD) 1), | |
| 93 | (rtac SsumIl 1), | |
| 94 | (rtac SsumIr 1) | |
| 95 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 96 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 97 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 98 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 99 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 100 | (* injectivity of Sinl_Rep, Sinr_Rep and Isinl, Isinr *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 101 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 102 | |
| 892 | 103 | qed_goalw "inject_Sinl_Rep1" Ssum0.thy [Sinl_Rep_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 104 | "(Sinl_Rep(a) = Sinl_Rep(UU)) ==> a=UU" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 105 | (fn prems => | 
| 1461 | 106 | [ | 
| 1675 | 107 | (case_tac "a=UU" 1), | 
| 1461 | 108 | (atac 1), | 
| 109 | (rtac ((hd prems) RS fun_cong RS fun_cong RS fun_cong | |
| 110 | RS iffD2 RS mp RS conjunct1 RS sym) 1), | |
| 111 | (fast_tac HOL_cs 1), | |
| 112 | (atac 1) | |
| 113 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 114 | |
| 892 | 115 | qed_goalw "inject_Sinr_Rep1" Ssum0.thy [Sinr_Rep_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 116 | "(Sinr_Rep(b) = Sinr_Rep(UU)) ==> b=UU" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 117 | (fn prems => | 
| 1461 | 118 | [ | 
| 1675 | 119 | (case_tac "b=UU" 1), | 
| 1461 | 120 | (atac 1), | 
| 121 | (rtac ((hd prems) RS fun_cong RS fun_cong RS fun_cong | |
| 122 | RS iffD2 RS mp RS conjunct1 RS sym) 1), | |
| 123 | (fast_tac HOL_cs 1), | |
| 124 | (atac 1) | |
| 125 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 126 | |
| 892 | 127 | qed_goalw "inject_Sinl_Rep2" Ssum0.thy [Sinl_Rep_def] | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 128 | "[| a1~=UU ; a2~=UU ; Sinl_Rep(a1)=Sinl_Rep(a2) |] ==> a1=a2" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 129 | (fn prems => | 
| 1461 | 130 | [ | 
| 131 | (rtac ((nth_elem (2,prems)) RS fun_cong RS fun_cong RS fun_cong | |
| 132 | RS iffD1 RS mp RS conjunct1) 1), | |
| 133 | (fast_tac HOL_cs 1), | |
| 134 | (resolve_tac prems 1) | |
| 135 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 136 | |
| 892 | 137 | qed_goalw "inject_Sinr_Rep2" Ssum0.thy [Sinr_Rep_def] | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 138 | "[|b1~=UU ; b2~=UU ; Sinr_Rep(b1)=Sinr_Rep(b2) |] ==> b1=b2" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 139 | (fn prems => | 
| 1461 | 140 | [ | 
| 141 | (rtac ((nth_elem (2,prems)) RS fun_cong RS fun_cong RS fun_cong | |
| 142 | RS iffD1 RS mp RS conjunct1) 1), | |
| 143 | (fast_tac HOL_cs 1), | |
| 144 | (resolve_tac prems 1) | |
| 145 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 146 | |
| 892 | 147 | qed_goal "inject_Sinl_Rep" Ssum0.thy | 
| 1461 | 148 | "Sinl_Rep(a1)=Sinl_Rep(a2) ==> a1=a2" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 149 | (fn prems => | 
| 1461 | 150 | [ | 
| 151 | (cut_facts_tac prems 1), | |
| 1675 | 152 | (case_tac "a1=UU" 1), | 
| 1461 | 153 | (hyp_subst_tac 1), | 
| 154 | (rtac (inject_Sinl_Rep1 RS sym) 1), | |
| 155 | (etac sym 1), | |
| 1675 | 156 | (case_tac "a2=UU" 1), | 
| 1461 | 157 | (hyp_subst_tac 1), | 
| 158 | (etac inject_Sinl_Rep1 1), | |
| 159 | (etac inject_Sinl_Rep2 1), | |
| 160 | (atac 1), | |
| 161 | (atac 1) | |
| 162 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 163 | |
| 892 | 164 | qed_goal "inject_Sinr_Rep" Ssum0.thy | 
| 1461 | 165 | "Sinr_Rep(b1)=Sinr_Rep(b2) ==> b1=b2" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 166 | (fn prems => | 
| 1461 | 167 | [ | 
| 168 | (cut_facts_tac prems 1), | |
| 1675 | 169 | (case_tac "b1=UU" 1), | 
| 1461 | 170 | (hyp_subst_tac 1), | 
| 171 | (rtac (inject_Sinr_Rep1 RS sym) 1), | |
| 172 | (etac sym 1), | |
| 1675 | 173 | (case_tac "b2=UU" 1), | 
| 1461 | 174 | (hyp_subst_tac 1), | 
| 175 | (etac inject_Sinr_Rep1 1), | |
| 176 | (etac inject_Sinr_Rep2 1), | |
| 177 | (atac 1), | |
| 178 | (atac 1) | |
| 179 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 180 | |
| 892 | 181 | qed_goalw "inject_Isinl" Ssum0.thy [Isinl_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 182 | "Isinl(a1)=Isinl(a2)==> a1=a2" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 183 | (fn prems => | 
| 1461 | 184 | [ | 
| 185 | (cut_facts_tac prems 1), | |
| 186 | (rtac inject_Sinl_Rep 1), | |
| 187 | (etac (inj_onto_Abs_Ssum RS inj_ontoD) 1), | |
| 188 | (rtac SsumIl 1), | |
| 189 | (rtac SsumIl 1) | |
| 190 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 191 | |
| 892 | 192 | qed_goalw "inject_Isinr" Ssum0.thy [Isinr_def] | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 193 | "Isinr(b1)=Isinr(b2) ==> b1=b2" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 194 | (fn prems => | 
| 1461 | 195 | [ | 
| 196 | (cut_facts_tac prems 1), | |
| 197 | (rtac inject_Sinr_Rep 1), | |
| 198 | (etac (inj_onto_Abs_Ssum RS inj_ontoD) 1), | |
| 199 | (rtac SsumIr 1), | |
| 200 | (rtac SsumIr 1) | |
| 201 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 202 | |
| 892 | 203 | qed_goal "inject_Isinl_rev" Ssum0.thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 204 | "a1~=a2 ==> Isinl(a1) ~= Isinl(a2)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 205 | (fn prems => | 
| 1461 | 206 | [ | 
| 207 | (cut_facts_tac prems 1), | |
| 208 | (rtac contrapos 1), | |
| 209 | (etac inject_Isinl 2), | |
| 210 | (atac 1) | |
| 211 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 212 | |
| 892 | 213 | qed_goal "inject_Isinr_rev" Ssum0.thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 214 | "b1~=b2 ==> Isinr(b1) ~= Isinr(b2)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 215 | (fn prems => | 
| 1461 | 216 | [ | 
| 217 | (cut_facts_tac prems 1), | |
| 218 | (rtac contrapos 1), | |
| 219 | (etac inject_Isinr 2), | |
| 220 | (atac 1) | |
| 221 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 222 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 223 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 224 | (* Exhaustion of the strict sum ++ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 225 | (* choice of the bottom representation is arbitrary *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 226 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 227 | |
| 892 | 228 | qed_goalw "Exh_Ssum" Ssum0.thy [Isinl_def,Isinr_def] | 
| 1461 | 229 | "z=Isinl(UU) | (? a. z=Isinl(a) & a~=UU) | (? b. z=Isinr(b) & b~=UU)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 230 | (fn prems => | 
| 1461 | 231 | [ | 
| 232 | (rtac (rewrite_rule [Ssum_def] Rep_Ssum RS CollectE) 1), | |
| 233 | (etac disjE 1), | |
| 234 | (etac exE 1), | |
| 1675 | 235 | (case_tac "z= Abs_Ssum(Sinl_Rep(UU))" 1), | 
| 1461 | 236 | (etac disjI1 1), | 
| 237 | (rtac disjI2 1), | |
| 238 | (rtac disjI1 1), | |
| 239 | (rtac exI 1), | |
| 240 | (rtac conjI 1), | |
| 241 | (rtac (Rep_Ssum_inverse RS sym RS trans) 1), | |
| 242 | (etac arg_cong 1), | |
| 243 |         (res_inst_tac [("Q","Sinl_Rep(a)=Sinl_Rep(UU)")] contrapos 1),
 | |
| 244 | (etac arg_cong 2), | |
| 245 | (etac contrapos 1), | |
| 246 | (rtac (Rep_Ssum_inverse RS sym RS trans) 1), | |
| 247 | (rtac trans 1), | |
| 248 | (etac arg_cong 1), | |
| 249 | (etac arg_cong 1), | |
| 250 | (etac exE 1), | |
| 1675 | 251 | (case_tac "z= Abs_Ssum(Sinl_Rep(UU))" 1), | 
| 1461 | 252 | (etac disjI1 1), | 
| 253 | (rtac disjI2 1), | |
| 254 | (rtac disjI2 1), | |
| 255 | (rtac exI 1), | |
| 256 | (rtac conjI 1), | |
| 257 | (rtac (Rep_Ssum_inverse RS sym RS trans) 1), | |
| 258 | (etac arg_cong 1), | |
| 259 |         (res_inst_tac [("Q","Sinr_Rep(b)=Sinl_Rep(UU)")] contrapos 1),
 | |
| 260 | (hyp_subst_tac 2), | |
| 261 | (rtac (strict_SinlSinr_Rep RS sym) 2), | |
| 262 | (etac contrapos 1), | |
| 263 | (rtac (Rep_Ssum_inverse RS sym RS trans) 1), | |
| 264 | (rtac trans 1), | |
| 265 | (etac arg_cong 1), | |
| 266 | (etac arg_cong 1) | |
| 267 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 268 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 269 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 270 | (* elimination rules for the strict sum ++ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 271 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 272 | |
| 892 | 273 | qed_goal "IssumE" Ssum0.thy | 
| 1461 | 274 | "[|p=Isinl(UU) ==> Q ;\ | 
| 275 | \ !!x.[|p=Isinl(x); x~=UU |] ==> Q;\ | |
| 276 | \ !!y.[|p=Isinr(y); y~=UU |] ==> Q|] ==> Q" | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 277 | (fn prems => | 
| 1461 | 278 | [ | 
| 279 | (rtac (Exh_Ssum RS disjE) 1), | |
| 280 | (etac disjE 2), | |
| 281 | (eresolve_tac prems 1), | |
| 282 | (etac exE 1), | |
| 283 | (etac conjE 1), | |
| 284 | (eresolve_tac prems 1), | |
| 285 | (atac 1), | |
| 286 | (etac exE 1), | |
| 287 | (etac conjE 1), | |
| 288 | (eresolve_tac prems 1), | |
| 289 | (atac 1) | |
| 290 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 291 | |
| 892 | 292 | qed_goal "IssumE2" Ssum0.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 293 | "[| !!x. [| p = Isinl(x) |] ==> Q; !!y. [| p = Isinr(y) |] ==> Q |] ==>Q" | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 294 | (fn prems => | 
| 1461 | 295 | [ | 
| 296 | (rtac IssumE 1), | |
| 297 | (eresolve_tac prems 1), | |
| 298 | (eresolve_tac prems 1), | |
| 299 | (eresolve_tac prems 1) | |
| 300 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 301 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 302 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 303 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 304 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 305 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 306 | (* rewrites for Iwhen *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 307 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 308 | |
| 892 | 309 | qed_goalw "Iwhen1" Ssum0.thy [Iwhen_def] | 
| 1461 | 310 | "Iwhen f g (Isinl UU) = UU" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 311 | (fn prems => | 
| 1461 | 312 | [ | 
| 313 | (rtac select_equality 1), | |
| 314 | (rtac conjI 1), | |
| 315 | (fast_tac HOL_cs 1), | |
| 316 | (rtac conjI 1), | |
| 317 | (strip_tac 1), | |
| 318 |         (res_inst_tac [("P","a=UU")] notE 1),
 | |
| 319 | (fast_tac HOL_cs 1), | |
| 320 | (rtac inject_Isinl 1), | |
| 321 | (rtac sym 1), | |
| 322 | (fast_tac HOL_cs 1), | |
| 323 | (strip_tac 1), | |
| 324 |         (res_inst_tac [("P","b=UU")] notE 1),
 | |
| 325 | (fast_tac HOL_cs 1), | |
| 326 | (rtac inject_Isinr 1), | |
| 327 | (rtac sym 1), | |
| 328 | (rtac (strict_IsinlIsinr RS subst) 1), | |
| 329 | (fast_tac HOL_cs 1), | |
| 330 | (fast_tac HOL_cs 1) | |
| 331 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 332 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 333 | |
| 892 | 334 | qed_goalw "Iwhen2" Ssum0.thy [Iwhen_def] | 
| 1461 | 335 | "x~=UU ==> Iwhen f g (Isinl x) = f`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 336 | (fn prems => | 
| 1461 | 337 | [ | 
| 338 | (cut_facts_tac prems 1), | |
| 339 | (rtac select_equality 1), | |
| 340 | (fast_tac HOL_cs 2), | |
| 341 | (rtac conjI 1), | |
| 342 | (strip_tac 1), | |
| 343 |         (res_inst_tac [("P","x=UU")] notE 1),
 | |
| 344 | (atac 1), | |
| 345 | (rtac inject_Isinl 1), | |
| 346 | (atac 1), | |
| 347 | (rtac conjI 1), | |
| 348 | (strip_tac 1), | |
| 349 | (rtac cfun_arg_cong 1), | |
| 350 | (rtac inject_Isinl 1), | |
| 351 | (fast_tac HOL_cs 1), | |
| 352 | (strip_tac 1), | |
| 353 |         (res_inst_tac [("P","Isinl(x) = Isinr(b)")] notE 1),
 | |
| 354 | (fast_tac HOL_cs 2), | |
| 355 | (rtac contrapos 1), | |
| 356 | (etac noteq_IsinlIsinr 2), | |
| 357 | (fast_tac HOL_cs 1) | |
| 358 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 359 | |
| 892 | 360 | qed_goalw "Iwhen3" Ssum0.thy [Iwhen_def] | 
| 1461 | 361 | "y~=UU ==> Iwhen f g (Isinr y) = g`y" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 362 | (fn prems => | 
| 1461 | 363 | [ | 
| 364 | (cut_facts_tac prems 1), | |
| 365 | (rtac select_equality 1), | |
| 366 | (fast_tac HOL_cs 2), | |
| 367 | (rtac conjI 1), | |
| 368 | (strip_tac 1), | |
| 369 |         (res_inst_tac [("P","y=UU")] notE 1),
 | |
| 370 | (atac 1), | |
| 371 | (rtac inject_Isinr 1), | |
| 372 | (rtac (strict_IsinlIsinr RS subst) 1), | |
| 373 | (atac 1), | |
| 374 | (rtac conjI 1), | |
| 375 | (strip_tac 1), | |
| 376 |         (res_inst_tac [("P","Isinr(y) = Isinl(a)")] notE 1),
 | |
| 377 | (fast_tac HOL_cs 2), | |
| 378 | (rtac contrapos 1), | |
| 379 | (etac (sym RS noteq_IsinlIsinr) 2), | |
| 380 | (fast_tac HOL_cs 1), | |
| 381 | (strip_tac 1), | |
| 382 | (rtac cfun_arg_cong 1), | |
| 383 | (rtac inject_Isinr 1), | |
| 384 | (fast_tac HOL_cs 1) | |
| 385 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 386 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 387 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 388 | (* instantiate the simplifier *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 389 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 390 | |
| 1277 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
changeset | 391 | val Ssum0_ss = (simpset_of "Cfun3") addsimps | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
changeset | 392 | [(strict_IsinlIsinr RS sym),Iwhen1,Iwhen2,Iwhen3]; | 
| 
caef3601c0b2
corrected some errors that occurred after introduction of local simpsets
 regensbu parents: 
1274diff
changeset | 393 |