我必须通过xs列表归纳显示: reverse(xs ++ ys)=(reverse ys)++(反向xs) 对于所有列表xs和ys。
答案 0 :(得分:7)
首先,
reverse (xs ++ ys) ≡ reverse ys ++ reverse xs
如果xs
是无限或部分(1)列表且ys
是有限非空列表,则不成立。因为在这种情况下xs ++ ys
也是无限的或部分的,在这两种情况下,
reverse (xs ++ ys) ≡ ⊥
但
reverse ys ++ reverse xs ≡ reverse ys ++ ⊥
和reverse ys
是一个有限的非空列表,因此reverse ys ++ ⊥
不是⊥
,而是一个非初始部分的部分列表。
因此,我们假设xs
是一个有限列表,即xs ≡ []
或xs ≡ x : zs
,其中zs
是一个有限列表。
对于基本情况,我们有
reverse ([] ++ ys)
≡ reverse ys -- by 1.
和
reverse ys ++ reverse []
≡ reverse ys ++ [] -- by 3.
所以它仍然是显示
zs ++ [] ≡ zs
所有列表zs
(即使ys ≡ ⊥
或ys
无限或部分也是如此),以完成基本案例的证明。
你通过zs
的归纳证明了这一点(很简单)。
然后你去感应步骤。前两步是:
reverse ((x:xs) ++ ys)
≡ reverse (x:(xs ++ ys)) -- by 2.
≡ reverse (xs ++ ys) ++ [x] -- by 4.
然后你需要
(++)
的相关性[完整证明,需要证明] (1)部分列表是表单
的列表zs ++ ⊥
其中zs
是一个有限列表,即它是通过将有限数量(可能为0)的元素“收缩”到⊥
而不是[]
来获得的。