src/HOL/Codatatype/Tools/bnf_comp.ML
changeset 49155 f51ab68f882f
parent 49123 263b0e330d8b
child 49185 073d7d1b7488
equal deleted inserted replaced
49154:4c507e92e4a2 49155:f51ab68f882f
   215             mk_comp_set_bd_tac context comp_set_alt single_set_bds)
   215             mk_comp_set_bd_tac context comp_set_alt single_set_bds)
   216           comp_set_alt_thms single_set_bd_thmss
   216           comp_set_alt_thms single_set_bd_thmss
   217         end;
   217         end;
   218 
   218 
   219     val comp_in_alt_thm =
   219     val comp_in_alt_thm =
   220       if ! quick_and_dirty then
   220       let
   221         no_thm
   221         val comp_in = mk_in Asets comp_sets CCA;
   222       else
   222         val comp_in_alt = mk_in (map2 (mk_in Asets) inner_setss CAs) outer_sets CCA;
   223         let
   223         val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (comp_in, comp_in_alt));
   224           val comp_in = mk_in Asets comp_sets CCA;
   224       in
   225           val comp_in_alt = mk_in (map2 (mk_in Asets) inner_setss CAs) outer_sets CCA;
   225         Skip_Proof.prove lthy [] [] goal
   226           val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (comp_in, comp_in_alt));
   226           (fn {context, ...} => mk_comp_in_alt_tac context comp_set_alt_thms)
   227         in
   227         |> Thm.close_derivation
   228           Skip_Proof.prove lthy [] [] goal
   228       end;
   229             (fn {context, ...} => mk_comp_in_alt_tac context comp_set_alt_thms)
       
   230           |> Thm.close_derivation
       
   231         end;
       
   232 
   229 
   233     fun comp_in_bd_tac _ =
   230     fun comp_in_bd_tac _ =
   234       mk_comp_in_bd_tac comp_in_alt_thm (map in_bd_of_bnf inners) (in_bd_of_bnf outer)
   231       mk_comp_in_bd_tac comp_in_alt_thm (map in_bd_of_bnf inners) (in_bd_of_bnf outer)
   235         (map bd_Cinfinite_of_bnf inners) (bd_Card_order_of_bnf outer);
   232         (map bd_Cinfinite_of_bnf inners) (bd_Card_order_of_bnf outer);
   236 
   233 
   336     val killN_set_bd_tacs =
   333     val killN_set_bd_tacs =
   337       map (fn thm => fn _ => mk_killN_set_bd_tac (bd_Card_order_of_bnf bnf) thm)
   334       map (fn thm => fn _ => mk_killN_set_bd_tac (bd_Card_order_of_bnf bnf) thm)
   338         (drop n (set_bd_of_bnf bnf));
   335         (drop n (set_bd_of_bnf bnf));
   339 
   336 
   340     val killN_in_alt_thm =
   337     val killN_in_alt_thm =
   341       if ! quick_and_dirty then
   338       let
   342         no_thm
   339         val killN_in = mk_in Asets killN_sets T;
   343       else
   340         val killN_in_alt = mk_in (map HOLogic.mk_UNIV killedAs @ Asets) bnf_sets T;
   344         let
   341         val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (killN_in, killN_in_alt));
   345           val killN_in = mk_in Asets killN_sets T;
   342       in
   346           val killN_in_alt = mk_in (map HOLogic.mk_UNIV killedAs @ Asets) bnf_sets T;
   343         Skip_Proof.prove lthy [] [] goal (K killN_in_alt_tac) |> Thm.close_derivation
   347           val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (killN_in, killN_in_alt));
   344       end;
   348         in
       
   349           Skip_Proof.prove lthy [] [] goal (K killN_in_alt_tac) |> Thm.close_derivation
       
   350         end;
       
   351 
   345 
   352     fun killN_in_bd_tac _ =
   346     fun killN_in_bd_tac _ =
   353       mk_killN_in_bd_tac n (live > n) killN_in_alt_thm (in_bd_of_bnf bnf)
   347       mk_killN_in_bd_tac n (live > n) killN_in_alt_thm (in_bd_of_bnf bnf)
   354          (bd_Card_order_of_bnf bnf) (bd_Cinfinite_of_bnf bnf) (bd_Cnotzero_of_bnf bnf);
   348          (bd_Card_order_of_bnf bnf) (bd_Cinfinite_of_bnf bnf) (bd_Cnotzero_of_bnf bnf);
   355     fun killN_map_wpull_tac _ =
   349     fun killN_map_wpull_tac _ =
   444       else
   438       else
   445         replicate n (K (mk_liftN_set_bd_tac (bd_Card_order_of_bnf bnf))) @
   439         replicate n (K (mk_liftN_set_bd_tac (bd_Card_order_of_bnf bnf))) @
   446         (map (fn thm => fn _ => rtac thm 1) (set_bd_of_bnf bnf));
   440         (map (fn thm => fn _ => rtac thm 1) (set_bd_of_bnf bnf));
   447 
   441 
   448     val liftN_in_alt_thm =
   442     val liftN_in_alt_thm =
   449       if ! quick_and_dirty then
   443       let
   450         no_thm
   444         val liftN_in = mk_in Asets liftN_sets T;
   451       else
   445         val liftN_in_alt = mk_in (drop n Asets) bnf_sets T;
   452         let
   446         val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (liftN_in, liftN_in_alt));
   453           val liftN_in = mk_in Asets liftN_sets T;
   447       in
   454           val liftN_in_alt = mk_in (drop n Asets) bnf_sets T;
   448         Skip_Proof.prove lthy [] [] goal (K liftN_in_alt_tac) |> Thm.close_derivation
   455           val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (liftN_in, liftN_in_alt));
   449       end;
   456         in
       
   457           Skip_Proof.prove lthy [] [] goal (K liftN_in_alt_tac) |> Thm.close_derivation
       
   458         end;
       
   459 
   450 
   460     fun liftN_in_bd_tac _ =
   451     fun liftN_in_bd_tac _ =
   461       mk_liftN_in_bd_tac n liftN_in_alt_thm (in_bd_of_bnf bnf) (bd_Card_order_of_bnf bnf);
   452       mk_liftN_in_bd_tac n liftN_in_alt_thm (in_bd_of_bnf bnf) (bd_Card_order_of_bnf bnf);
   462     fun liftN_map_wpull_tac _ =
   453     fun liftN_map_wpull_tac _ =
   463       mk_map_wpull_tac liftN_in_alt_thm [] (map_wpull_of_bnf bnf);
   454       mk_map_wpull_tac liftN_in_alt_thm [] (map_wpull_of_bnf bnf);
   529     fun permute_bd_card_order_tac _ = rtac (bd_card_order_of_bnf bnf) 1;
   520     fun permute_bd_card_order_tac _ = rtac (bd_card_order_of_bnf bnf) 1;
   530     fun permute_bd_cinfinite_tac _ = rtac (bd_cinfinite_of_bnf bnf) 1;
   521     fun permute_bd_cinfinite_tac _ = rtac (bd_cinfinite_of_bnf bnf) 1;
   531     val permute_set_bd_tacs = permute (map (fn thm => fn _ => rtac thm 1) (set_bd_of_bnf bnf));
   522     val permute_set_bd_tacs = permute (map (fn thm => fn _ => rtac thm 1) (set_bd_of_bnf bnf));
   532 
   523 
   533     val permute_in_alt_thm =
   524     val permute_in_alt_thm =
   534       if ! quick_and_dirty then
   525       let
   535         no_thm
   526         val permute_in = mk_in Asets permute_sets T;
   536       else
   527         val permute_in_alt = mk_in (permute_rev Asets) bnf_sets T;
   537         let
   528         val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (permute_in, permute_in_alt));
   538           val permute_in = mk_in Asets permute_sets T;
   529       in
   539           val permute_in_alt = mk_in (permute_rev Asets) bnf_sets T;
   530         Skip_Proof.prove lthy [] [] goal (K (mk_permute_in_alt_tac src dest))
   540           val goal = fold_rev Logic.all Asets (mk_Trueprop_eq (permute_in, permute_in_alt));
   531         |> Thm.close_derivation
   541         in
   532       end;
   542           Skip_Proof.prove lthy [] [] goal (K (mk_permute_in_alt_tac src dest))
       
   543           |> Thm.close_derivation
       
   544         end;
       
   545 
   533 
   546     fun permute_in_bd_tac _ =
   534     fun permute_in_bd_tac _ =
   547       mk_permute_in_bd_tac src dest permute_in_alt_thm (in_bd_of_bnf bnf)
   535       mk_permute_in_bd_tac src dest permute_in_alt_thm (in_bd_of_bnf bnf)
   548         (bd_Card_order_of_bnf bnf);
   536         (bd_Card_order_of_bnf bnf);
   549     fun permute_map_wpull_tac _ =
   537     fun permute_map_wpull_tac _ =