以下是我已经做过的作业,但做错了。我不明白为什么解决方案就足够了。(经过一周的阅读和谷歌搜索后,我转而询问。)
该示例类似于 Hutton 关于 Haskell 的书中使用的示例。
Base case:
add Zero m
= { applying add }
m
= { property of add }
add m Zero
Inductive case:
add (Succ n) m
= { applying add }
Succ (add n m)
= { induction hypothesis }
Succ (add m n)
= { property of add }
add m (Succ n)
-- Hypothesis:
add n m = add m n
-- Method:
by induction on n
-- Using:
add n (Succ m) = Succ (add n m)
add n Zero = n
data Nat = Zero
| Succ Nat
add :: Nat -> Nat -> Nat
add Zero m = m
add (Succ n) m = Succ (add n m)
我看不到的是为什么允许感应箱在它停止的地方停止。它使用假设,然后取消应用添加以生成作为归纳案例假设版本的东西。
add n m = add m n -- hypothesis
add m (Succ n) -- hypthesis applied to the induction case add (Succ n) m
换句话说,另一个版本的假设是通过假设假设成立而产生的。
足够了?当我找到一个可行的假设时,我是否总是将假设视为有效?对于归纳案例,如果我可以通过假设假设本身已经被证明来生成应用于归纳案例的假设版本就足够了?
我很难将感应从数字转移到功能。请不要让我愚蠢地死去。谢谢。