File tree Expand file tree Collapse file tree 1 file changed +27
-2
lines changed
Expand file tree Collapse file tree 1 file changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -52,6 +52,8 @@ example (P Q R : Prop) : P ∨ Q → (P → R) → (Q → R) → R := by
5252
5353/- ## 舞台裏
5454
55+ ### 帰納型の分解
56+
5557`cases` は、実際には論理和に限らず[ 帰納型 ] (#{root}/Declarative/Inductive.md)をコンストラクタに分解することができるタクティクです。
5658-/
5759
@@ -86,7 +88,30 @@ Or.inr : ∀ {a b : Prop}, b → a ∨ b
8688--#--
8789
8890inductive Or (a b : Prop ) : Prop where
89- | inl (h : a) : Or a b
90- | inr (h : b) : Or a b
91+ | inl (h : a)
92+ | inr (h : b)
9193
9294end Hidden --#
95+ /-
96+ ### 帰納的述語の分解
97+
98+ 特に、帰納的述語も `cases` タクティクで分解することができます。
99+ 仮定がどのコンストラクタから来たものなのかに応じて場合分けをすることができます。
100+
101+ たとえば、以下のように偶数であることを表す帰納的述語を定義したとします。
102+ このとき `Even (n + 2)` という仮定があれば `Even n` を結論出来ますが、これは `cases` タクティクで行うことができます。
103+ -/
104+
105+ /-- 偶数であることを表す帰納的述語 -/
106+ inductive Even : Nat → Prop where
107+ | zero : Even 0
108+ | cons {n : Nat} (ih : Even n) : Even (n + 2 )
109+
110+ example (n : Nat) (h : Even (n + 2 )) : Even n := by
111+ -- h に対して場合分けを行う。
112+ -- `Even (n + 2)` という仮定はどのコンストラクタから来たか?で場合分けできる。
113+ -- `cases` タクティクはある程度賢いので、
114+ -- `zero` のケースはありえないと判断してスキップできる。
115+ cases h with
116+ | cons ih =>
117+ exact ih
You can’t perform that action at this time.
0 commit comments