src/HOL/Subst/Unify.ML
changeset 8624 69619f870939
parent 5278 a903b66822e2
child 9371 2f06293f291a
equal deleted inserted replaced
8623:5668aaf41c36 8624:69619f870939
    36 
    36 
    37 
    37 
    38 (*---------------------------------------------------------------------------
    38 (*---------------------------------------------------------------------------
    39  * The non-nested TC plus the wellfoundedness of unifyRel.
    39  * The non-nested TC plus the wellfoundedness of unifyRel.
    40  *---------------------------------------------------------------------------*)
    40  *---------------------------------------------------------------------------*)
    41 Tfl.tgoalw Unify.thy [] unify.rules;
    41 Tfl.tgoalw Unify.thy [] unify.simps;
    42 (* Wellfoundedness of unifyRel *)
    42 (* Wellfoundedness of unifyRel *)
    43 by (simp_tac (simpset() addsimps [unifyRel_def,
    43 by (simp_tac (simpset() addsimps [unifyRel_def,
    44 				 wf_inv_image, wf_lex_prod, wf_finite_psubset,
    44 				 wf_inv_image, wf_lex_prod, wf_finite_psubset,
    45 				 wf_measure]) 1);
    45 				 wf_measure]) 1);
    46 (* TC *)
    46 (* TC *)
   127  * Eliminate tc0 from the recursion equations and the induction theorem.
   127  * Eliminate tc0 from the recursion equations and the induction theorem.
   128  *---------------------------------------------------------------------------*)
   128  *---------------------------------------------------------------------------*)
   129 val wfr = tc0 RS conjunct1
   129 val wfr = tc0 RS conjunct1
   130 and tc  = tc0 RS conjunct2;
   130 and tc  = tc0 RS conjunct2;
   131 val unifyRules0 = map (normalize_thm [fn th => wfr RS th, fn th => tc RS th]) 
   131 val unifyRules0 = map (normalize_thm [fn th => wfr RS th, fn th => tc RS th]) 
   132                      unify.rules;
   132                      unify.simps;
   133 
   133 
   134 val unifyInduct0 = [wfr,tc] MRS unify.induct;
   134 val unifyInduct0 = [wfr,tc] MRS unify.induct;
   135 
   135 
   136 
   136 
   137 (*---------------------------------------------------------------------------
   137 (*---------------------------------------------------------------------------
   168 by (Blast_tac 1);
   168 by (Blast_tac 1);
   169 qed_spec_mp "unify_TC";
   169 qed_spec_mp "unify_TC";
   170 
   170 
   171 
   171 
   172 (*---------------------------------------------------------------------------
   172 (*---------------------------------------------------------------------------
   173  * Now for elimination of nested TC from unify.rules and induction. 
   173  * Now for elimination of nested TC from unify.simps and induction. 
   174  *---------------------------------------------------------------------------*)
   174  *---------------------------------------------------------------------------*)
   175 
   175 
   176 (*Desired rule, copied from the theory file.  Could it be made available?*)
   176 (*Desired rule, copied from the theory file.  Could it be made available?*)
   177 Goal "unify(Comb M1 N1, Comb M2 N2) =      \
   177 Goal "unify(Comb M1 N1, Comb M2 N2) =      \
   178 \      (case unify(M1,M2)               \
   178 \      (case unify(M1,M2)               \