嗨,我对haskell很新,刚刚进入结构导入,并想知道是否有人可以解释我应该采取的步骤,这将非常有帮助。
问题: - 计算列表中所有数字的总和
sum :: [Integer] -> Integer
sum [] = 0
sum (x:xs) = x + sum xs
- 附加两个列表
(++) :: [Integer] -> [Integer] -> [Integer]
[] ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)
对于所有整数列表xs
和ys
,证明(通过使用结构归纳法)以下等式:
sum (xs ++ ys) = sum xs + sum ys
不要忘记陈述I.H.在诱导步骤中。另请确保您清楚说明为什么要在证明中采取步骤。
我的步骤: 证明:
sum (xs ++ ys) = sum xs + sum ys
证明:通过结构归纳
让P()< ---不知道在那里输入什么,所以如果有人可以从那里拿走它,我会非常感激!
答案 0 :(得分:2)
++
是根据其第一个参数xs
的归纳来定义的,因此这通常是我们需要在xs
上归纳的好迹象。
因此,我们一次性修复ys
,并按如下方式定义P(xs)
P(xs) = (sum (xs ++ ys) == sum xs + sum ys)
现在您必须证明P(xs)
适用于所有xs
。在列表中应用归纳原则,你应该没问题。