equal
deleted
inserted
replaced
2166 "is_static dm = is_static sm" |
2166 "is_static dm = is_static sm" |
2167 "G\<turnstile>resTy dm\<preceq>resTy sm" |
2167 "G\<turnstile>resTy dm\<preceq>resTy sm" |
2168 by (force dest!: ws_dynmethd accmethd_SomeD) |
2168 by (force dest!: ws_dynmethd accmethd_SomeD) |
2169 with dynlookup eq_mheads |
2169 with dynlookup eq_mheads |
2170 show ?thesis |
2170 show ?thesis |
2171 by (cases emh type: *) (auto) |
2171 by (cases emh type: prod) (auto) |
2172 next |
2172 next |
2173 case Iface_methd |
2173 case Iface_methd |
2174 fix I im |
2174 fix I im |
2175 assume statI: "statT = IfaceT I" and |
2175 assume statI: "statT = IfaceT I" and |
2176 eq_mheads: "mthd im = mhd emh" and |
2176 eq_mheads: "mthd im = mhd emh" and |
2189 "is_static dm = is_static im" |
2189 "is_static dm = is_static im" |
2190 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd im)" |
2190 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd im)" |
2191 by (force dest: implmt_methd) |
2191 by (force dest: implmt_methd) |
2192 with dynlookup eq_mheads |
2192 with dynlookup eq_mheads |
2193 show ?thesis |
2193 show ?thesis |
2194 by (cases emh type: *) (auto) |
2194 by (cases emh type: prod) (auto) |
2195 next |
2195 next |
2196 case Iface_Object_methd |
2196 case Iface_Object_methd |
2197 fix I sm |
2197 fix I sm |
2198 assume statI: "statT = IfaceT I" and |
2198 assume statI: "statT = IfaceT I" and |
2199 sm: "accmethd G S Object sig = Some sm" and |
2199 sm: "accmethd G S Object sig = Some sm" and |
2215 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd sm)" |
2215 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd sm)" |
2216 by (auto dest!: ws_dynmethd accmethd_SomeD |
2216 by (auto dest!: ws_dynmethd accmethd_SomeD |
2217 intro: class_Object [OF wf] intro: that) |
2217 intro: class_Object [OF wf] intro: that) |
2218 with dynlookup eq_mheads |
2218 with dynlookup eq_mheads |
2219 show ?thesis |
2219 show ?thesis |
2220 by (cases emh type: *) (auto) |
2220 by (cases emh type: prod) (auto) |
2221 next |
2221 next |
2222 case False |
2222 case False |
2223 with statI |
2223 with statI |
2224 have dynlookup: "dynlookup G statT dynC sig = methd G dynC sig" |
2224 have dynlookup: "dynlookup G statT dynC sig = methd G dynC sig" |
2225 by (simp add: dynlookup_def dynimethd_def) |
2225 by (simp add: dynlookup_def dynimethd_def) |
2241 "is_static dm = is_static im" |
2241 "is_static dm = is_static im" |
2242 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd im)" |
2242 "G\<turnstile>resTy (mthd dm)\<preceq>resTy (mthd im)" |
2243 by (auto dest: implmt_methd) |
2243 by (auto dest: implmt_methd) |
2244 with wf eq_stat resProp dynlookup eq_mheads |
2244 with wf eq_stat resProp dynlookup eq_mheads |
2245 show ?thesis |
2245 show ?thesis |
2246 by (cases emh type: *) (auto intro: widen_trans) |
2246 by (cases emh type: prod) (auto intro: widen_trans) |
2247 qed |
2247 qed |
2248 next |
2248 next |
2249 case Array_Object_methd |
2249 case Array_Object_methd |
2250 fix T sm |
2250 fix T sm |
2251 assume statArr: "statT = ArrayT T" and |
2251 assume statArr: "statT = ArrayT T" and |
2254 from statArr dynC_Prop wf |
2254 from statArr dynC_Prop wf |
2255 have dynlookup: "dynlookup G statT dynC sig = methd G Object sig" |
2255 have dynlookup: "dynlookup G statT dynC sig = methd G Object sig" |
2256 by (auto simp add: dynlookup_def dynmethd_C_C) |
2256 by (auto simp add: dynlookup_def dynmethd_C_C) |
2257 with sm eq_mheads sm |
2257 with sm eq_mheads sm |
2258 show ?thesis |
2258 show ?thesis |
2259 by (cases emh type: *) (auto dest: accmethd_SomeD) |
2259 by (cases emh type: prod) (auto dest: accmethd_SomeD) |
2260 qed |
2260 qed |
2261 qed |
2261 qed |
2262 declare split_paired_All [simp] split_paired_Ex [simp] |
2262 declare split_paired_All [simp] split_paired_Ex [simp] |
2263 declaration {* K (Classical.map_cs (fn cs => cs addSbefore ("split_all_tac", split_all_tac))) *} |
2263 declaration {* K (Classical.map_cs (fn cs => cs addSbefore ("split_all_tac", split_all_tac))) *} |
2264 declaration {* K (Simplifier.map_ss (fn ss => ss addloop ("split_all_tac", split_all_tac))) *} |
2264 declaration {* K (Simplifier.map_ss (fn ss => ss addloop ("split_all_tac", split_all_tac))) *} |