214 mk_trp(defined(con_app con args)))) ([ |
214 mk_trp(defined(con_app con args)))) ([ |
215 rtac rev_contrapos 1, |
215 rtac rev_contrapos 1, |
216 eres_inst_tac [("f",dis_name con)] cfun_arg_cong 1, |
216 eres_inst_tac [("f",dis_name con)] cfun_arg_cong 1, |
217 asm_simp_tac (HOLCF_ss addsimps dis_rews) 1] )) cons; |
217 asm_simp_tac (HOLCF_ss addsimps dis_rews) 1] )) cons; |
218 val con_rews = con_stricts @ con_defins; |
218 val con_rews = con_stricts @ con_defins; |
|
219 |
|
220 val con_compacts = |
|
221 let |
|
222 val rules = [compact_sinl, compact_sinr, compact_spair, compact_up, compact_ONE]; |
|
223 fun one_compact (con,args) = pg con_appls |
|
224 (lift (fn x => %%:compactN $ %:(vname x)) (args, mk_trp(%%:compactN $ (con_app con args)))) |
|
225 [rtac (iso_locale RS iso_compact_abs) 1, REPEAT (resolve_tac rules 1 ORELSE atac 1)]; |
|
226 in map one_compact cons end; |
219 |
227 |
220 val sel_stricts = let fun one_sel sel = pg axs_sel_def (mk_trp(strict(%%:sel))) [ |
228 val sel_stricts = let fun one_sel sel = pg axs_sel_def (mk_trp(strict(%%:sel))) [ |
221 simp_tac (HOLCF_ss addsimps when_rews) 1]; |
229 simp_tac (HOLCF_ss addsimps when_rews) 1]; |
222 in List.concat(map (fn (_,args) => List.mapPartial (fn arg => Option.map one_sel (sel_of arg)) args) cons) end; |
230 in List.concat(map (fn (_,args) => List.mapPartial (fn arg => Option.map one_sel (sel_of arg)) args) cons) end; |
223 val sel_apps = let fun one_sel c n sel = map (fn (con,args) => |
231 val sel_apps = let fun one_sel c n sel = map (fn (con,args) => |
328 |> (#1 o (PureThy.add_thmss (map Thm.no_attributes [ |
336 |> (#1 o (PureThy.add_thmss (map Thm.no_attributes [ |
329 ("iso_rews" , iso_rews ), |
337 ("iso_rews" , iso_rews ), |
330 ("exhaust" , [exhaust] ), |
338 ("exhaust" , [exhaust] ), |
331 ("casedist" , [casedist]), |
339 ("casedist" , [casedist]), |
332 ("when_rews", when_rews ), |
340 ("when_rews", when_rews ), |
|
341 ("compacts", con_compacts), |
333 ("con_rews", con_rews), |
342 ("con_rews", con_rews), |
334 ("sel_rews", sel_rews), |
343 ("sel_rews", sel_rews), |
335 ("dis_rews", dis_rews), |
344 ("dis_rews", dis_rews), |
336 ("dist_les", dist_les), |
345 ("dist_les", dist_les), |
337 ("dist_eqs", dist_eqs), |
346 ("dist_eqs", dist_eqs), |