Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

simp_all を独立したタクティクとして紹介する #1045

Merged
merged 2 commits into from
Nov 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LeanByExample/Reference/Tactic/Simp.lean
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ example {x y : Nat} : 0 < 1 + x ∧ x + y + 2 ≥ y + 1 := by
simp_arith

/- ## simp_all
`simp_all` はローカルコンテキストとゴールをこれ以上単純化できなくなるまですべて単純化します。-/
[`simp_all`](./SimpAll.md) はローカルコンテキストとゴールをこれ以上単純化できなくなるまですべて単純化します。-/

example {P Q : Prop} (hP : P) (hQ : Q) : P ∧ (Q ∧ (P → Q)) := by
-- simp at * は失敗する
Expand Down
25 changes: 25 additions & 0 deletions LeanByExample/Reference/Tactic/SimpAll.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/- # simp_all

`simp_all` タクティクは、`simp` タクティクの派生で、仮定とゴールに対してこれ以上適用できなくなるまで `simp` を適用します。

`simp at *` と似ていますが、`simp_all` は簡約された仮定を再び簡約に使うなど再帰的な挙動をします。
-/

example (P : Nat → Bool)
(h1 : P (if 0 + 0 = 0 then 1 else 2))
(h2 : P (if P 1 then 0 else 1) ) : P 0 := by
simp at *

-- まだゴールが残っている
show P 0

simp [h1] at h2
assumption

example (P : Nat → Bool)
(h1 : P (if 0 + 0 = 0 then 1 else 2))
(h2 : P (if P 1 then 0 else 1) ) : P 0 := by
-- 一発で終わる。
-- h1 を簡約した後で、h2 を「簡約後の h1」を使って簡約し、
-- ゴールと仮定が一致していることを確認するという挙動をする。
simp_all
1 change: 1 addition & 0 deletions booksrc/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@
- [says: タクティク提案の痕跡を残す](./Reference/Tactic/Says.md)
- [set: 定義の導入](./Reference/Tactic/Set.md)
- [show: 示すべきことを宣言](./Reference/Tactic/Show.md)
- [simp_all: 仮定とゴールを全て単純化](./Reference/Tactic/SimpAll.md)
- [simp: 単純化](./Reference/Tactic/Simp.md)
- [slim_check: 反例を見つける](./Reference/Tactic/SlimCheck.md)
- [sorry: 証明したことにする](./Reference/Tactic/Sorry.md)
Expand Down