src/HOLCF/domain/theorems.ML
changeset 17840 11bcd77cfa22
parent 17811 10ebcd7032c1
child 17959 8db36a108213
equal deleted inserted replaced
17839:060dd0213f94 17840:11bcd77cfa22
   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),