我如何证明使用列表归纳?

use*_*589 0 haskell discrete-mathematics

我必须通过xs列表归纳显示:所有列表xs和ys的reverse(xs ++ ys)=(reverse ys)++(reverse xs).

Dan*_*her 7

首先,

reverse (xs ++ ys) ? reverse ys ++ reverse xs
Run Code Online (Sandbox Code Playgroud)

如果xs是无限或部分(1)列表并且ys是有限非空列表,则不是真的.因为在这种情况下xs ++ ys也是无限的或部分的,在这两种情况下,

reverse (xs ++ ys) ? ?
Run Code Online (Sandbox Code Playgroud)

reverse ys ++ reverse xs ? reverse ys ++ ?
Run Code Online (Sandbox Code Playgroud)

并且reverse ys是一个有限的非空列表,因此reverse ys ++ ?不是?一个非空初始部分的部分列表.

因此,让我们假设xs是一个有限的列表,即xs ? []xs ? x : zs在那里zs是一种有限的名单.

对于基本情况,我们有

reverse ([] ++ ys)
? reverse ys         -- by 1.
Run Code Online (Sandbox Code Playgroud)

reverse ys ++ reverse []
? reverse ys ++ []   -- by 3.
Run Code Online (Sandbox Code Playgroud)

所以它仍然表明了这一点

zs ++ [] ? zs
Run Code Online (Sandbox Code Playgroud)

所有列表zs(这是真实的,即使ys ? ?或者ys是无限或部分),完成基本情况的证明.

你通过归纳证明了zs(很简单).

然后你去感应步骤.前两个步骤是:

reverse ((x:xs) ++ ys)
? reverse (x:(xs ++ ys))            -- by 2.
? reverse (xs ++ ys) ++ [x]         -- by 4.
Run Code Online (Sandbox Code Playgroud)

那你需要

  • 归纳假设
  • 的关联性(++)[一个完整的证据,需要进行太证明]
  • 一些给定的规则.

(1)部分列表是表单的列表

zs ++ ?
Run Code Online (Sandbox Code Playgroud)

其中zs是一个有限列表,即它是通过"限制"有限数量(可能是0)的元素来获得?而不是[].