Skip to content

Commit

Permalink
warning が出ないようにする
Browse files Browse the repository at this point in the history
Fixes #943
  • Loading branch information
Seasawher committed Oct 5, 2024
1 parent 62e5d54 commit ffd141f
Show file tree
Hide file tree
Showing 44 changed files with 119 additions and 11 deletions.
16 changes: 16 additions & 0 deletions .vscode/lean.code-snippets
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,20 @@
],
"description": "doc string"
},
"drop warning": {
"scope": "lean,lean4",
"prefix": "dropwarn",
"body": [
"#guard_msgs (drop warning) in --#",
],
"description": "drop warning"
},
"unusedTactic linter disable": {
"scope": "lean,lean4",
"prefix": "unusedTactic",
"body": [
"set_option linter.unusedTactic false in --#",
],
"description": "unusedTactic linter disable"
}
}
1 change: 1 addition & 0 deletions Examples/Declarative/Class.lean
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ def instMonoid'Nat : Monoid' Nat where

/- `self : Monoid' α` が暗黙の引数ではなく明示的な引数なので、型クラスのように書くことはできません。-/

#guard_msgs (drop warning) in --#
#check_failure (Monoid'.e : Nat)

/- しかし、インスタンスを引数として渡せば、型クラスのように `Nat` の要素を取り出すことができます。-/
Expand Down
3 changes: 3 additions & 0 deletions Examples/Declarative/DeclareSyntaxCat.lean
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,11 @@ syntax "{" binder "|" term "}" : term

-- 合法な構文として認識される
-- 実装は与えていないのでエラーにはなる
#guard_msgs (drop warning) in --#
#check_failure { x | x = 0}
#guard_msgs (drop warning) in --#
#check_failure { x : Nat | x > 0 }
#guard_msgs (drop warning) in --#
#check_failure { x ∈ T | x = 0}

/-- `{x : T | P x}` と `{x ∈ T | P x}` の形の式を `setOf` の式に変換する -/
Expand Down
4 changes: 3 additions & 1 deletion Examples/Declarative/Export.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* [`open`](./Open.md) と同様に、`nameᵢ` が `Some.Namespace` の接頭辞なしで現在の名前空間 `N` 上で見えるようになります。
* 現在の名前空間 `N` の外部の名前空間から `N.nameᵢ` としてアクセスできるようになります。
-/
-/
namespace N -- export コマンドが実行される名前空間

inductive Sample : Type where
Expand All @@ -16,6 +16,7 @@ namespace N -- export コマンドが実行される名前空間

-- foo は名前空間 Sample 上にあるので、
-- 短い名前ではアクセスできない
#guard_msgs (drop warning) in --#
#check_failure foo
#check Sample.foo

Expand All @@ -29,6 +30,7 @@ end N

-- 名前空間 `N` の外部からアクセスするには、
-- 普通はフルネームが必要
#guard_msgs (drop warning) in --#
#check_failure N.bar
#check N.Sample.bar

Expand Down
1 change: 1 addition & 0 deletions Examples/Declarative/Infix.lean
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ scoped infix:51 " strong " => Nat.add
-- したがってエラーになる
scoped infix:49 " weak " => Nat.add

#guard_msgs (drop warning) in --#
#check_failure 1 + 2 weak 3 = 6

/- `infix` で定義される記法は左結合でも右結合でもなく、必ず括弧が必要です。-/
Expand Down
5 changes: 5 additions & 0 deletions Examples/Declarative/Instance.lean
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ structure Point (α : Type) where
def origin : Point Int := { x := 0, y := 0 }

-- 数値のように足し算をすることはできない
#guard_msgs (drop warning) in --#
#check_failure (origin + origin)

/-- 平面上の点の足し算ができるようにする -/
Expand Down Expand Up @@ -57,6 +58,7 @@ instance {n : Nat} [OfNat Even n] : OfNat Even (n + 2) where
#guard (2 : Even) = Even.succ Even.zero

-- 奇数については OfNat の実装はない
#guard_msgs (drop warning) in --#
#check_failure (3 : Even)

/- なお、インスタンス連鎖の回数には上限があります。-/
Expand All @@ -65,6 +67,7 @@ instance {n : Nat} [OfNat Even n] : OfNat Even (n + 2) where
#eval (254 : Even)

-- 上限を超えてしまった
#guard_msgs (drop warning) in --#
#check_failure (256 : Even)

/-
Expand All @@ -73,6 +76,7 @@ instance {n : Nat} [OfNat Even n] : OfNat Even (n + 2) where
-/

-- `List` 同士を足すことはできない
#guard_msgs (drop warning) in --#
#check_failure [1] + [2]

-- インスタンスを宣言する
Expand All @@ -88,6 +92,7 @@ def instListAdd {α : Type} : Add (List α) where
attribute [-instance] instListAdd

-- リスト同士を足すことができなくなった
#guard_msgs (drop warning) in --#
#check_failure [1] + [2]

end Instance --#
6 changes: 6 additions & 0 deletions Examples/Declarative/Local.lean
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ section foo
end foo

-- section を抜けると使えなくなる
#guard_msgs (drop warning) in --#
#check_failure succ'

section foo
-- 同じ名前の section を再度開いても使えない
#guard_msgs (drop warning) in --#
#check_failure succ'
end foo

Expand All @@ -29,11 +31,13 @@ namespace hoge
end hoge

-- namespace の外では使用できない
#guard_msgs (drop warning) in --#
#check_failure succ' 2

-- 再び同じ名前の namespace をオープンする
namespace hoge
-- 使用できない!
#guard_msgs (drop warning) in --#
#check_failure succ'
end hoge

Expand Down Expand Up @@ -85,6 +89,7 @@ section
end

-- section を抜けると使えなくなる
#guard_msgs (drop warning) in --#
#check_failure (0 : MyNat)

/- ## 属性に対する local
Expand All @@ -110,4 +115,5 @@ section
end

-- section を抜けると simp 補題が利用できなくなる
#guard_msgs (drop warning) in --#
#check_failure (by simp : MyNat.add .zero .zero = .zero)
1 change: 1 addition & 0 deletions Examples/Declarative/MacroRules.lean
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ end Set
syntax "{{" term,* "}}" : term

-- `syntax` コマンドは記法の解釈方法を決めていないので、エラーになる
#guard_msgs (drop warning) in --#
#check_failure {{2, 3}}

-- 集合の波括弧記法をどう解釈するかのルールを定める
Expand Down
1 change: 1 addition & 0 deletions Examples/Declarative/Namespace.lean
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ namespace Nat
end Nat

-- 名前空間の外に出ると、短い名前ではアクセスできない
#guard_msgs (drop warning) in --#
#check_failure isEven

-- フルネームならアクセスできる
Expand Down
2 changes: 2 additions & 0 deletions Examples/Declarative/Notation.lean
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ set_option pp.mvars false

-- 等号(パース優先順位 50)より優先順位が低いという問題でエラーになる
-- 上では60で定義しているのに、なぜ?
#guard_msgs (drop warning) in --#
#check_failure truetrue = false

-- 括弧を付けるとエラーにならない
Expand All @@ -158,6 +159,7 @@ local macro_rules | `($x ⊕ $y) => `(xor $x $y)
#guard falsefalse = false

-- 上書きされたので、 Sum の意味で ⊕ を使うことはできなくなった
#guard_msgs (drop warning) in --#
#check_failure Nat ⊕ Fin 2
end --#

Expand Down
1 change: 1 addition & 0 deletions Examples/Declarative/Opaque.lean
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ opaque B : Type
opaque C : Type

-- 実装は与えないが C は Inhabited のインスタンスだと仮定
#guard_msgs (drop warning) in --#
instance : Inhabited C where
default := sorry

Expand Down
2 changes: 2 additions & 0 deletions Examples/Declarative/Open.lean
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace Hoge
end Hoge

-- 名前空間の外からだと `foo` という短い名前が使えない
#guard_msgs (drop warning) in --#
#check_failure foo

section
Expand All @@ -22,6 +23,7 @@ section
end

-- セクションが終わると再び短い名前は使えなくなる
#guard_msgs (drop warning) in --#
#check_failure foo

/- ## 入れ子になった名前空間
Expand Down
1 change: 1 addition & 0 deletions Examples/Declarative/Private.lean
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace Private --#
#check Point.sub

-- private とマークした定義にはアクセスできない
#guard_msgs (drop warning) in --#
#check_failure Point.private_sub

/- なお `private` コマンドでセクションや名前空間にスコープを制限することはできません。-/
Expand Down
2 changes: 2 additions & 0 deletions Examples/Declarative/ProofWanted.lean
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ variable (n : Nat)
proof_wanted result : n + 0 = n

-- sorry で同様のことができる
#guard_msgs (drop warning) in --#
theorem another_result : n + 0 = n := by sorry

-- sorry で証明した定理は参照できるが
#check another_result

-- proof_wanted で宣言した定理は参照できない
#guard_msgs (drop warning) in --#
#check_failure result
4 changes: 4 additions & 0 deletions Examples/Declarative/Protected.lean
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ namespace Point
private def private_sub := Point.sub

-- 名前空間の中にいても、短い名前ではアクセスできない
#guard_msgs (drop warning) in --#
#check_failure sub

-- フルネームならアクセスできる
Expand All @@ -26,6 +27,7 @@ end Point
open Point

-- 名前空間を開いていても、短い名前でアクセスできない
#guard_msgs (drop warning) in --#
#check_failure sub

-- フルネームならアクセスできる
Expand Down Expand Up @@ -78,6 +80,7 @@ open BinTree

-- 名前空間を開いているのに、
-- コンストラクタに短い名前でアクセスできない
#guard_msgs (drop warning) in --#
#check_failure node
#check BinTree.node

Expand All @@ -100,6 +103,7 @@ open Sample
#check bar

-- hoge には短い名前でアクセスできない
#guard_msgs (drop warning) in --#
#check_failure hoge

end --#
1 change: 1 addition & 0 deletions Examples/Declarative/Scoped.lean
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,6 @@ section
#check (30 add' 12)

-- greet は使えないまま
#guard_msgs (drop warning) in --#
#check_failure greet
end
4 changes: 4 additions & 0 deletions Examples/Declarative/Section.lean
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ section
end

-- `section` の外に出ると無効になる
#guard_msgs (drop warning) in --#
#check_failure a

/-
Expand All @@ -37,6 +38,7 @@ section
end

-- スコープが終わると無効になる
#guard_msgs (drop warning) in --#
#check_failure choice

/- 次は `set_option` のスコープを区切る例です。 -/
Expand Down Expand Up @@ -86,8 +88,10 @@ section parent
end child

-- child セクションの外なので無効
#guard_msgs (drop warning) in --#
#check_failure b
end parent

-- parent セクションの外なので無効
#guard_msgs (drop warning) in --#
#check_failure a
18 changes: 15 additions & 3 deletions Examples/Declarative/Structure.lean
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,16 @@ inductive Sample where
| fst (foo bar : Nat) : Sample
| snd (foo bar : String) : Sample

-- 「コンストラクタが一つしかない型でなければ使用できない」というエラーになる
#check_failure (⟨"foo", "bar"⟩ : Sample)
-- 「コンストラクタが一つしかない帰納型でなければ使用できない」というエラーになる
/--
warning: invalid constructor ⟨...⟩, expected type must be an inductive type with only one constructor ⏎
Sample
-/
#guard_msgs in
#check_failure (⟨"foo", "bar"⟩ : Sample)

-- コンストラクタを指定しても使用できない
#guard_msgs (drop warning) in --#
#check_failure (Sample.snd ⟨"foo", "bar"⟩ : Sample)

/- ## 項を定義する様々な構文
Expand Down Expand Up @@ -146,12 +152,18 @@ inductive Point' (α : Type) : Type where
| mk : (x : α) → (y : α) → Point' α

-- フィールド記法が利用できない
#guard_msgs (drop warning) in --#
#check_failure Point'.x

-- 無名コンストラクタは使用できる
def origin' : Point Int := ⟨0, 0

-- 波括弧記法は使用できない
#check_failure ({ x := 1, y := 2 } : Point' Int)
/--
warning: invalid {...} notation, structure type expected
Point' Int
-/
#guard_msgs in
#check_failure ({ x := 1, y := 2 } : Point' Int)

end Structure --#
3 changes: 3 additions & 0 deletions Examples/Diagnostic/CheckFailure.lean
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
-/

-- 自然数と文字列を足すことはできない
#guard_msgs (drop warning) in --#
#check_failure 1 + "hello"

-- `1 = 2` を `rfl` で証明することはできない
#guard_msgs (drop warning) in --#
#check_failure (by rfl : 1 = 2)

-- `1 + 4 = 5` は `contradiction` では示せない
#guard_msgs (drop warning) in --#
#check_failure (by contradiction : 1 + 4 = 5)
1 change: 1 addition & 0 deletions Examples/Diagnostic/Print.lean
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ example : ∀ (p : Prop), p ∨ ¬p := Classical.em

/- また、`sorry` という命題を「証明したことにする」タクティクがありますが、これは `sorryAx` という万能な公理を導入していることが確認できます。-/

#guard_msgs (drop warning) in --#
theorem contra : False := by sorry

/-- info: 'contra' depends on axioms: [sorryAx] -/
Expand Down
1 change: 1 addition & 0 deletions Examples/Diagnostic/Synth.lean
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ Additional diagnostic information may be available using the `set_option diagnos
#guard_msgs in #synth Inv Nat

-- Inv のインスタンスになっていない
#guard_msgs (drop warning) in --#
#check_failure (inferInstance : Inv Nat)

/-! 自分で無理やり `ℕ` を `Inv` のインスタンスにしてみると、通るようになります。ここでは逆数関数を常に `1` になる定数関数としてみましょう。-/
Expand Down
8 changes: 8 additions & 0 deletions Examples/Option/Flexible.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Mathlib.Tactic

set_option linter.flexible true

example {n m : Nat} (h : n + 0 = m) : True ∧ (n = m) := by
constructor
all_goals
simp_all
2 changes: 1 addition & 1 deletion Examples/Solution/CantorPairing.lean
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ theorem pair_unpair_eq_id (x : ℕ) : pair (unpair x) = x := by
-- `sum (m + n) + m = x` を示せば良いことが分かる。
suffices sum (m + n) + m = x from by
-- sorry
simp [pair]
simp only [pair]
rw [show m + 1 + (n - 1) = m + n from by omega]
omega
-- sorry
Expand Down
2 changes: 2 additions & 0 deletions Examples/Tactic/ApplyQuestion.lean
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ example [Group G] [Group H] (f : G →* H) (a b : G) :
`sorry` と同じように、清書した証明に残してはいけません。
`sorry` と同じと言いましたが、実際 `apply?` は `sorryAx` を裏で使用します。
-/
set_option linter.unusedTactic false in --#

#guard_msgs (drop warning) in --#
theorem T (x y : Nat) (_: x ≤ y) : 8 ^ x ≤ 16 ^ y := by
apply?

Expand Down
Loading

0 comments on commit ffd141f

Please sign in to comment.