src/FOLP/IFOLP.thy
changeset 67399 eab6ce8368fa
parent 62147 a1b666aaac1a
child 67405 e9ab4ad7bd15
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
   257     (fn (prem,i) =>
   257     (fn (prem,i) =>
   258       let val hyps = map discard_proof (Logic.strip_assums_hyp prem)
   258       let val hyps = map discard_proof (Logic.strip_assums_hyp prem)
   259           and concl = discard_proof (Logic.strip_assums_concl prem)
   259           and concl = discard_proof (Logic.strip_assums_concl prem)
   260       in
   260       in
   261           if exists (fn hyp => hyp aconv concl) hyps
   261           if exists (fn hyp => hyp aconv concl) hyps
   262           then case distinct (op =) (filter (fn hyp => Term.could_unify (hyp, concl)) hyps) of
   262           then case distinct (=) (filter (fn hyp => Term.could_unify (hyp, concl)) hyps) of
   263                    [_] => assume_tac ctxt i
   263                    [_] => assume_tac ctxt i
   264                  |  _  => no_tac
   264                  |  _  => no_tac
   265           else no_tac
   265           else no_tac
   266       end);
   266       end);
   267 end;
   267 end;
   520   done
   520   done
   521 
   521 
   522 lemmas pred_congs = pred1_cong pred2_cong pred3_cong
   522 lemmas pred_congs = pred1_cong pred2_cong pred3_cong
   523 
   523 
   524 (*special case for the equality predicate!*)
   524 (*special case for the equality predicate!*)
   525 lemmas eq_cong = pred2_cong [where P = "op ="]
   525 lemmas eq_cong = pred2_cong [where P = "(=)"]
   526 
   526 
   527 
   527 
   528 (*** Simplifications of assumed implications.
   528 (*** Simplifications of assumed implications.
   529      Roy Dyckhoff has proved that conj_impE, disj_impE, and imp_impE
   529      Roy Dyckhoff has proved that conj_impE, disj_impE, and imp_impE
   530      used with mp_tac (restricted to atomic formulae) is COMPLETE for
   530      used with mp_tac (restricted to atomic formulae) is COMPLETE for