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 |