src/Pure/thm.ML
changeset 7318 768fab6dae74
parent 7264 d55cd903c93d
child 7323 16b7e2f1b4e3
equal deleted inserted replaced
7317:ece660815e03 7318:768fab6dae74
  1807   orient_comb_simps del_rrule (map mk_rrule2 o mk_rrule mss) (mss,thms);
  1807   orient_comb_simps del_rrule (map mk_rrule2 o mk_rrule mss) (mss,thms);
  1808 
  1808 
  1809 
  1809 
  1810 (* add_congs *)
  1810 (* add_congs *)
  1811 
  1811 
  1812 (*FIXME -> term.ML *)
       
  1813 fun is_Bound (Bound _) = true
       
  1814 fun is_Bound _         = false;
       
  1815 
       
  1816 fun is_full_cong_prems [] varpairs = null varpairs
  1812 fun is_full_cong_prems [] varpairs = null varpairs
  1817   | is_full_cong_prems (p::prems) varpairs =
  1813   | is_full_cong_prems (p::prems) varpairs =
  1818     (case Logic.strip_assums_concl p of
  1814     (case Logic.strip_assums_concl p of
  1819        Const("==",_) $ lhs $ rhs =>
  1815        Const("==",_) $ lhs $ rhs =>
  1820          let val (x,xs) = strip_comb lhs and (y,ys) = strip_comb rhs
  1816          let val (x,xs) = strip_comb lhs and (y,ys) = strip_comb rhs
  1821          in is_Var x  andalso  forall is_Bound xs  andalso
  1817          in is_Var x  andalso  forall is_Bound xs  andalso
  1822             null(findrep(xs))  andalso xs=ys andalso
  1818             null(findrep(xs))  andalso xs=ys andalso
  1823             (x,y) mem varpairs andalso
  1819             (x,y) mem varpairs andalso
  1824             is_full_cong_prems (p::prems) (varpairs\(x,y))
  1820             is_full_cong_prems prems (varpairs\(x,y))
  1825          end
  1821          end
  1826      | _ => false);
  1822      | _ => false);
  1827 
  1823 
  1828 fun is_full_cong (Thm{prop,...}) =
  1824 fun is_full_cong (Thm{prop,...}) =
  1829 let val prems = Logic.strip_imp_prems prop
  1825 let val prems = Logic.strip_imp_prems prop