import tools.super.cdcl

example {a} : a → ¬a → false := by cdcl
example {a} : a ∨ ¬a := by cdcl
example {a b} : a → (a → b) → b := by cdcl
example {a b c} : (a → b) → (¬a → b) → (b → c) → b ∧ c := by cdcl

open tactic monad

private meta def lit_unification : tactic unit :=
do ls ← local_context, first $ do l ← ls, [do apply l, assumption]

example {p : ℕ → Prop} : p 2 ∨ p 4 → (p (2*2) → p (2+0)) → p (1+1) :=
by cdcl_t lit_unification

example {p : ℕ → Prop} :
        list.foldl (λf v, f ∧ (v ∨ ¬v)) true (map p (list.range 5)) :=
begin (target >>= whnf >>= change), cdcl end

example {a b c : Prop} : (a → b) → (b → c) → (a → c) := by cdcl
