57 lines
1.3 KiB
Text
57 lines
1.3 KiB
Text
-- Case 1: p is literally True/False
|
|
theorem test1 : decide True = true := by cbv
|
|
theorem test2 : decide False = false := by cbv
|
|
|
|
/--
|
|
info: theorem test1 : decide True = true :=
|
|
of_eq_true (Eq.trans (congrFun' (congrArg Eq (decide_true instDecidableTrue)) true) (eq_self true))
|
|
-/
|
|
#guard_msgs in
|
|
#print test1
|
|
|
|
/--
|
|
info: theorem test2 : decide False = false :=
|
|
of_eq_true (Eq.trans (congrFun' (congrArg Eq (decide_false instDecidableFalse)) false) (eq_self false))
|
|
-/
|
|
#guard_msgs in
|
|
#print test2
|
|
|
|
-- Case 2: p simplifies to True/False
|
|
theorem test3 : decide (1 < 2) = true := by cbv
|
|
theorem test4 : decide (3 < 2) = false := by cbv
|
|
|
|
/--
|
|
info: theorem test3 : decide (1 < 2) = true :=
|
|
of_eq_true
|
|
(Eq.trans
|
|
(congrFun'
|
|
(congrArg Eq (Lean.Sym.decide_prop_eq_true (1 < 2) (Lean.Sym.Nat.lt_eq_true 1 2 (eagerReduce (Eq.refl true)))))
|
|
true)
|
|
(eq_self true))
|
|
-/
|
|
#guard_msgs in
|
|
#print test3
|
|
|
|
/--
|
|
info: theorem test4 : decide (3 < 2) = false :=
|
|
of_eq_true
|
|
(Eq.trans
|
|
(congrFun'
|
|
(congrArg Eq (Lean.Sym.decide_prop_eq_false (3 < 2) (Lean.Sym.Nat.lt_eq_false 3 2 (eagerReduce (Eq.refl false)))))
|
|
false)
|
|
(eq_self false))
|
|
-/
|
|
#guard_msgs in
|
|
#print test4
|
|
|
|
/--
|
|
trace: x : Nat
|
|
⊢ decide (x = 4) = true
|
|
---
|
|
warning: declaration uses `sorry`
|
|
-/
|
|
#guard_msgs in
|
|
theorem test5 : decide (x = (2 + 2)) = true := by
|
|
cbv
|
|
trace_state
|
|
sorry
|