haskell的结构感应。列表和总和

时间:2016-10-05 12:27:16

标签: haskell discrete-mathematics induction

嗨,我对haskell很新,刚刚进入结构导入,并想知道是否有人可以解释我应该采取的步骤,这将非常有帮助。

问题: - 计算列表中所有数字的总和

sum :: [Integer] -> Integer
sum []     = 0
sum (x:xs) = x + sum xs  

- 附加两个列表

(++) :: [Integer] -> [Integer] -> [Integer]
[]     ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys) 

对于所有整数列表xsys,证明(通过使用结构归纳法)以下等式:

sum (xs ++ ys) = sum xs + sum ys
不要忘记陈述I.H.在诱导步骤中。另请确保您清楚说明为什么要在证明中采取步骤。

我的步骤: 证明:

sum (xs ++ ys) = sum xs + sum ys

证明:通过结构归纳

让P()< ---不知道在那里输入什么,所以如果有人可以从那里拿走它,我会非常感激!

1 个答案:

答案 0 :(得分:2)

++是根据其第一个参数xs的归纳来定义的,因此这通常是我们需要在xs上归纳的好迹象。

因此,我们一次性修复ys,并按如下方式定义P(xs)

P(xs) = (sum (xs ++ ys) == sum xs + sum ys)

现在您必须证明P(xs)适用于所有xs。在列表中应用归纳原则,你应该没问题。