src/HOL/Tools/record_package.ML
changeset 21687 f689f729afab
parent 21546 268b6bed0cc8
child 21708 45e7491bea47
equal deleted inserted replaced
21686:4f5f6c685ab4 21687:f689f729afab
   903                  list_all ((fst r,rT)::vars,
   903                  list_all ((fst r,rT)::vars,
   904                            app_bounds (n - 1) ((Free P)$Bound n))); 
   904                            app_bounds (n - 1) ((Free P)$Bound n))); 
   905     val prove_standard = quick_and_dirty_prove true thy;
   905     val prove_standard = quick_and_dirty_prove true thy;
   906     val thm = prove_standard [] prop (fn prems =>
   906     val thm = prove_standard [] prop (fn prems =>
   907 	 EVERY [rtac equal_intr_rule 1, 
   907 	 EVERY [rtac equal_intr_rule 1, 
   908                 norm_hhf_tac 1,REPEAT (etac meta_allE 1), atac 1,
   908                 Goal.norm_hhf_tac 1,REPEAT (etac meta_allE 1), atac 1,
   909                 norm_hhf_tac 1,REPEAT (etac meta_allE 1), atac 1]);
   909                 Goal.norm_hhf_tac 1,REPEAT (etac meta_allE 1), atac 1]);
   910   in thm end
   910   in thm end
   911   | mk_fun_apply_eq t thy = raise TERM ("mk_fun_apply_eq",[t]);
   911   | mk_fun_apply_eq t thy = raise TERM ("mk_fun_apply_eq",[t]);
   912 
   912 
   913 in
   913 in
   914 (* During proof of theorems produced by record_simproc you can end up in
   914 (* During proof of theorems produced by record_simproc you can end up in
  1647                   simp_tac (HOL_basic_ss addsimps dest_convs_standard) 1]));
  1647                   simp_tac (HOL_basic_ss addsimps dest_convs_standard) 1]));
  1648     val surjective = timeit_msg "record extension surjective proof:" surjective_prf;
  1648     val surjective = timeit_msg "record extension surjective proof:" surjective_prf;
  1649 
  1649 
  1650     fun split_meta_prf () =
  1650     fun split_meta_prf () =
  1651         prove_standard [] split_meta_prop (fn prems =>
  1651         prove_standard [] split_meta_prop (fn prems =>
  1652          EVERY [rtac equal_intr_rule 1, norm_hhf_tac 1,
  1652          EVERY [rtac equal_intr_rule 1, Goal.norm_hhf_tac 1,
  1653                 etac meta_allE 1, atac 1,
  1653                 etac meta_allE 1, atac 1,
  1654                 rtac (prop_subst OF [surjective]) 1,
  1654                 rtac (prop_subst OF [surjective]) 1,
  1655                 REPEAT (etac meta_allE 1), atac 1]);
  1655                 REPEAT (etac meta_allE 1), atac 1]);
  1656     val split_meta = timeit_msg "record extension split_meta proof:" split_meta_prf;
  1656     val split_meta = timeit_msg "record extension split_meta proof:" split_meta_prf;
  1657 
  1657 
  2056         THEN simp_all_tac HOL_basic_ss [unit_all_eq1]);
  2056         THEN simp_all_tac HOL_basic_ss [unit_all_eq1]);
  2057     val cases = timeit_msg "record cases proof:" cases_prf;
  2057     val cases = timeit_msg "record cases proof:" cases_prf;
  2058 
  2058 
  2059     fun split_meta_prf () =
  2059     fun split_meta_prf () =
  2060         prove false [] split_meta_prop (fn prems =>
  2060         prove false [] split_meta_prop (fn prems =>
  2061          EVERY [rtac equal_intr_rule 1, norm_hhf_tac 1,
  2061          EVERY [rtac equal_intr_rule 1, Goal.norm_hhf_tac 1,
  2062                 etac meta_allE 1, atac 1,
  2062                 etac meta_allE 1, atac 1,
  2063                 rtac (prop_subst OF [surjective]) 1,
  2063                 rtac (prop_subst OF [surjective]) 1,
  2064                 REPEAT (etac meta_allE 1), atac 1]);
  2064                 REPEAT (etac meta_allE 1), atac 1]);
  2065     val split_meta = timeit_msg "record split_meta proof:" split_meta_prf;
  2065     val split_meta = timeit_msg "record split_meta proof:" split_meta_prf;
  2066     val split_meta_standard = standard split_meta;
  2066     val split_meta_standard = standard split_meta;