Skip to content

Commit

Permalink
#guard_msgs (drop error) はエラーがなくても成功するので使用しない
Browse files Browse the repository at this point in the history
  • Loading branch information
Seasawher committed Aug 6, 2024
1 parent 3eeba5a commit ef73461
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 7 deletions.
22 changes: 20 additions & 2 deletions Examples/Command/Diagnostic/Eval.lean
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,28 @@ def main : IO Unit :=
式の評価を行うコマンドであるため、型や関数など、評価のしようがないものを与えるとエラーになります。-/

-- 型は評価できない
#guard_msgs (drop error) in #eval Nat
/--
error: expression
has type
Type
but instance
Lean.MetaEval Type
failed to be synthesized, this instance instructs Lean on how to display the resulting value, recall that any type implementing the `Repr` class also implements the `Lean.MetaEval` class
-/
#guard_msgs in #eval Nat

-- 関数そのものも評価できない
#guard_msgs (drop error) in #eval (fun x => x + 1)
/--
error: expression
fun x => x + 1
has type
ℕ → ℕ
but instance
Lean.MetaEval (ℕ → ℕ)
failed to be synthesized, this instance instructs Lean on how to display the resulting value, recall that any type implementing the `Repr` class also implements the `Lean.MetaEval` class
-/
#guard_msgs in #eval (fun x => x + 1)

/- 一般に、[`Repr`](../../Term/TypeClass/Repr.md) や [`ToString`](../../Term/TypeClass/ToString.md) のインスタンスでないような型の項は `#eval` に渡すことができません。-/

Expand Down
9 changes: 7 additions & 2 deletions Examples/Command/Diagnostic/Synth.lean
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,14 @@ Additional diagnostic information may be available using the `set_option diagnos
/-! 自然数 `ℕ` に対しては逆数が定義されていないと予想されますが、実際 `Inv` のインスタンスになっていません。-/

-- エラーになってしまう
#guard_msgs (drop error) in #synth Inv Nat
/--
error: failed to synthesize
Inv ℕ
Additional diagnostic information may be available using the `set_option diagnostics true` command.
-/
#guard_msgs in #synth Inv Nat

-- 実際、Inv のインスタンスになっていない
-- Inv のインスタンスになっていない
#check_failure (inferInstance : Inv Nat)

/-! 自分で無理やり `ℕ` を `Inv` のインスタンスにしてみると、通るようになります。ここでは逆数関数を常に `1` になる定数関数としてみましょう。-/
Expand Down
9 changes: 7 additions & 2 deletions Examples/Tactic/AcRfl.lean
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,13 @@ protected theorem add_assoc (a b c : Color) : a + b + c = a + (b + c) := by

-- エラーになっているので、
-- Commutative のインスタンスはないことが確認できる
#guard_msgs (drop error) in
#synth Std.Commutative (α := Color) (· + ·)
/--
error: failed to synthesize
Std.Commutative fun x x_1 => x + x_1
Additional diagnostic information may be available using the `set_option diagnostics true` command.
-/
#guard_msgs in
#synth Std.Commutative (α := Color) (· + ·)

/-- `add_comm` を `Std.Associative` に登録する。
local にしたのでセクション内でのみ有効 -/
Expand Down
9 changes: 8 additions & 1 deletion Examples/Term/TypeClass/ToString.lean
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ def david := Person.mk "David" 42
#eval david

-- `ToString` のインスタンスがないのでエラーになる
#guard_msgs (drop error) in #check s!"{david}"
/--
error: failed to synthesize
ToString Person
Additional diagnostic information may be available using the `set_option diagnostics true` command.
---
info: toString "" ++ sorryAx String true ++ toString "" : String
-/
#guard_msgs in #check s!"{david}"

end ToString --#

0 comments on commit ef73461

Please sign in to comment.