File tree 1 file changed +24
-1
lines changed
1 file changed +24
-1
lines changed Original file line number Diff line number Diff line change 6
6
7
7
しかし,`native_decide` を使うと証明が可能です.
8
8
-/
9
+ namespace NativeDecide --#
9
10
10
11
/-- Euclide のアルゴリズム -/
11
12
def gcd (m n : Nat) : Nat :=
@@ -31,5 +32,27 @@ def gcd (m n : Nat) : Nat :=
31
32
32
33
theorem native : Nat.gcd 42998431 120019 = 1 := by native_decide
33
34
34
- /-- info: 'native' depends on axioms: [propext, Lean.ofReduceBool] -/
35
+ /-- info: 'NativeDecide. native' depends on axioms: [propext, Lean.ofReduceBool] -/
35
36
#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 --#
You can’t perform that action at this time.
0 commit comments