Skip to content

Commit 5076411

Browse files
authored
Merge pull request #386 from lean-ja/Seasawher/issue270
native_decide で False を証明する方法
2 parents dca1297 + 218c462 commit 5076411

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

Examples/Tactic/NativeDecide.lean

+24-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
77
しかし,`native_decide` を使うと証明が可能です.
88
-/
9+
namespace NativeDecide --#
910

1011
/-- Euclide のアルゴリズム -/
1112
def gcd (m n : Nat) : Nat :=
@@ -31,5 +32,27 @@ def gcd (m n : Nat) : Nat :=
3132

3233
theorem native : Nat.gcd 42998431 120019 = 1 := by native_decide
3334

34-
/-- info: 'native' depends on axioms: [propext, Lean.ofReduceBool] -/
35+
/-- info: 'NativeDecide.native' depends on axioms: [propext, Lean.ofReduceBool] -/
3536
#guard_msgs in #print axioms native
37+
38+
/- ## 信頼性
39+
`native_decide` を使うことは安全ではなく,`native_decide` を使うと簡単に `False` を示すことができます.-/
40+
41+
def one := 1
42+
43+
-- 間違った実装をわざと提供する
44+
@[implemented_by one] def zero := 0
45+
46+
theorem zero_ne_eq_one : False := by
47+
have : zero ≠ one := by decide
48+
49+
-- native_decide は implemented_by を真に受けるので,
50+
-- 実際には間違いだが示せてしまう
51+
have : zero = one := by native_decide
52+
53+
contradiction
54+
55+
/-- info: 'NativeDecide.zero_ne_eq_one' depends on axioms: [Lean.ofReduceBool] -/
56+
#guard_msgs in #print axioms zero_ne_eq_one
57+
58+
end NativeDecide --#

0 commit comments

Comments
 (0)