56 lines
1.6 KiB
Text
56 lines
1.6 KiB
Text
open smt_tactic
|
||
|
||
lemma ex1 (p q : Prop) : p ∨ q → p ∨ ¬q → ¬p ∨ q → ¬p ∨ ¬q → false :=
|
||
by using_smt $ do
|
||
intros,
|
||
trace_state,
|
||
a_1 ← tactic.get_local `a_1,
|
||
destruct a_1,
|
||
repeat close
|
||
|
||
lemma ex2 (p q : Prop) : p ∨ q → p ∨ ¬q → ¬p ∨ q → ¬p ∨ ¬q → false :=
|
||
begin [smt]
|
||
intros,
|
||
assert h : p ∨ q,
|
||
destruct h
|
||
end
|
||
|
||
lemma ex3 (p q : Prop) : p ∨ q → p ∨ ¬q → ¬p ∨ q → ¬p ∨ ¬q → false :=
|
||
begin [smt]
|
||
intros,
|
||
destruct a_1 -- bad style, it relies on automatically generated names
|
||
end
|
||
|
||
lemma ex4 (p q : Prop) : p ∨ q → p ∨ ¬q → ¬p ∨ q → ¬p ∨ ¬q → false :=
|
||
begin [smt] -- the default configuration is classical
|
||
intros,
|
||
by_cases p
|
||
end
|
||
|
||
lemma ex5 (p q : Prop) [decidable p] : p ∨ q → p ∨ ¬q → ¬p ∨ q → ¬p ∨ ¬q → false :=
|
||
begin [smt] with {smt_config .}^.set_classical ff,
|
||
intros,
|
||
by_cases p -- will fail if p is not decidable
|
||
end
|
||
|
||
lemma ex6 (p q : Prop) : p ∨ q → p ∨ ¬q → ¬p ∨ q → p ∧ q :=
|
||
begin [smt] -- the default configuration is classical
|
||
intros,
|
||
by_contradiction,
|
||
trace_state,
|
||
by_cases p,
|
||
end
|
||
|
||
lemma ex7 (p q : Prop) [decidable p] : p ∨ q → p ∨ ¬q → ¬p ∨ q → p ∧ q :=
|
||
begin [smt] with {smt_config .}^.set_classical ff,
|
||
intros,
|
||
by_cases p -- will fail if p is not decidable
|
||
end
|
||
|
||
lemma ex8 (p q : Prop) [decidable p] [decidable q] : p ∨ q → p ∨ ¬q → ¬p ∨ q → p ∧ q :=
|
||
begin [smt] with {smt_config .}^.set_classical ff,
|
||
intros,
|
||
by_contradiction, -- will fail if p or q is not decidable
|
||
trace_state,
|
||
by_cases p -- will fail if p is not decidable
|
||
end
|