src/HOL/Tools/Datatype/datatype.ML
changeset 55990 41c6b99c5fb7
parent 55417 01fbfb60c33e
child 56239 17df7145a871
equal deleted inserted replaced
55989:55827fc7c0dd 55990:41c6b99c5fb7
   380               (Logic.mk_implies
   380               (Logic.mk_implies
   381                 (HOLogic.mk_Trueprop (HOLogic.list_all
   381                 (HOLogic.mk_Trueprop (HOLogic.list_all
   382                    (map (pair "x") Ts, S $ Datatype_Aux.app_bnds f i)),
   382                    (map (pair "x") Ts, S $ Datatype_Aux.app_bnds f i)),
   383                  HOLogic.mk_Trueprop (HOLogic.mk_eq (fold_rev (Term.abs o pair "x") Ts
   383                  HOLogic.mk_Trueprop (HOLogic.mk_eq (fold_rev (Term.abs o pair "x") Ts
   384                    (r $ (a $ Datatype_Aux.app_bnds f i)), f))))
   384                    (r $ (a $ Datatype_Aux.app_bnds f i)), f))))
   385               (fn _ => EVERY [REPEAT_DETERM_N i (rtac ext 1),
   385               (fn _ => EVERY [REPEAT_DETERM_N i (rtac @{thm ext} 1),
   386                  REPEAT (etac allE 1), rtac thm 1, atac 1])
   386                  REPEAT (etac allE 1), rtac thm 1, atac 1])
   387           end
   387           end
   388       in map (fn r => r RS subst) (thm :: map mk_thm arities) end;
   388       in map (fn r => r RS subst) (thm :: map mk_thm arities) end;
   389 
   389 
   390     (* prove  inj Rep_dt_i  and  Rep_dt_i x : rep_set_dt_i *)
   390     (* prove  inj Rep_dt_i  and  Rep_dt_i x : rep_set_dt_i *)
   430                      ORELSE (EVERY
   430                      ORELSE (EVERY
   431                        [REPEAT (eresolve_tac (Scons_inject ::
   431                        [REPEAT (eresolve_tac (Scons_inject ::
   432                           map make_elim [Leaf_inject, Inl_inject, Inr_inject]) 1),
   432                           map make_elim [Leaf_inject, Inl_inject, Inr_inject]) 1),
   433                         REPEAT (cong_tac 1), rtac refl 1,
   433                         REPEAT (cong_tac 1), rtac refl 1,
   434                         REPEAT (atac 1 ORELSE (EVERY
   434                         REPEAT (atac 1 ORELSE (EVERY
   435                           [REPEAT (rtac ext 1),
   435                           [REPEAT (rtac @{thm ext} 1),
   436                            REPEAT (eresolve_tac (mp :: allE ::
   436                            REPEAT (eresolve_tac (mp :: allE ::
   437                              map make_elim (Suml_inject :: Sumr_inject ::
   437                              map make_elim (Suml_inject :: Sumr_inject ::
   438                                Lim_inject :: inj_thms') @ fun_congs) 1),
   438                                Lim_inject :: inj_thms') @ fun_congs) 1),
   439                            atac 1]))])])])]);
   439                            atac 1]))])])])]);
   440 
   440 
   485               REPEAT (rtac TrueI 1),
   485               REPEAT (rtac TrueI 1),
   486               rewrite_goals_tac ctxt (mk_meta_eq @{thm choice_eq} ::
   486               rewrite_goals_tac ctxt (mk_meta_eq @{thm choice_eq} ::
   487                 Thm.symmetric (mk_meta_eq @{thm fun_eq_iff}) :: range_eqs),
   487                 Thm.symmetric (mk_meta_eq @{thm fun_eq_iff}) :: range_eqs),
   488               rewrite_goals_tac ctxt (map Thm.symmetric range_eqs),
   488               rewrite_goals_tac ctxt (map Thm.symmetric range_eqs),
   489               REPEAT (EVERY
   489               REPEAT (EVERY
   490                 [REPEAT (eresolve_tac ([rangeE, ex1_implies_ex RS exE] @
   490                 [REPEAT (eresolve_tac ([rangeE, @{thm ex1_implies_ex} RS exE] @
   491                    maps (mk_funs_inv thy5 o #1) newT_iso_axms) 1),
   491                    maps (mk_funs_inv thy5 o #1) newT_iso_axms) 1),
   492                  TRY (hyp_subst_tac ctxt 1),
   492                  TRY (hyp_subst_tac ctxt 1),
   493                  rtac (sym RS range_eqI) 1,
   493                  rtac (sym RS range_eqI) 1,
   494                  resolve_tac iso_char_thms 1])])));
   494                  resolve_tac iso_char_thms 1])])));
   495 
   495 
   557       in
   557       in
   558         Goal.prove_sorry_global thy5 [] [] t
   558         Goal.prove_sorry_global thy5 [] [] t
   559           (fn {context = ctxt, ...} => EVERY
   559           (fn {context = ctxt, ...} => EVERY
   560             [rtac iffI 1,
   560             [rtac iffI 1,
   561              REPEAT (etac conjE 2), hyp_subst_tac ctxt 2, rtac refl 2,
   561              REPEAT (etac conjE 2), hyp_subst_tac ctxt 2, rtac refl 2,
   562              dresolve_tac rep_congs 1, dtac box_equals 1,
   562              dresolve_tac rep_congs 1, dtac @{thm box_equals} 1,
   563              REPEAT (resolve_tac rep_thms 1),
   563              REPEAT (resolve_tac rep_thms 1),
   564              REPEAT (eresolve_tac inj_thms 1),
   564              REPEAT (eresolve_tac inj_thms 1),
   565              REPEAT (ares_tac [conjI] 1 ORELSE (EVERY [REPEAT (rtac ext 1),
   565              REPEAT (ares_tac [conjI] 1 ORELSE (EVERY [REPEAT (rtac @{thm ext} 1),
   566                REPEAT (eresolve_tac (make_elim fun_cong :: inj_thms) 1),
   566                REPEAT (eresolve_tac (make_elim fun_cong :: inj_thms) 1),
   567                atac 1]))])
   567                atac 1]))])
   568       end;
   568       end;
   569 
   569 
   570     val constr_inject =
   570     val constr_inject =