Haskell 结构感应-(zip xs ys)!!n=(xs!!n,ys!!n)

Haskell 结构感应-(zip xs ys)!!n=(xs!!n,ys!!n),haskell,induction,Haskell,Induction,给定n>=0且n=0和n=0和n=0和n

给定
n>=0且n
显示
(zip xs ys)!!n=(xs!!n,ys!!n)
带xs上的结构归纳


甚至有可能以一种干净的方式做到这一点吗?我找不到任何地方可以使用
归纳假设
首先,我将给出
zip
的定义

zip :: [a] -> [b] -> [(a,b)]
zip [] [] = []                             -- (zip-1)
zip (x:xs) (y:ys) = (x,y) : zip xs ys      -- (zip-2)
zip _ _ = []                               -- (zip-3)

(!!) :: [a] -> Int -> a
(x : _) !! 0 = x                           -- (!!-1)
(_ : xs) !! n = xs !! (n - 1)              -- (!!-2)
让xs、ys和n任意。现在,假设
n>=0
n
。我们在
xs
上进行归纳

  • Case
    xs=[]
    。现在我们对
    ys
    进行案例分析。在这两种情况下,都没有
    n>=0
    n
    。所以,这个例子是非常正确的
  • Case
    xs=x:xs'
    。我们对
    ys
    进行案例分析
  • Case
    xs=x:xs'
    ys=[]
    。同样,我们的定理是非常正确的,因为没有
    n
    这样
    n>=0
    n
  • Case
    xs=x:xs'
    ys=y:ys'
    。现在我们对
    n
    进行案例分析
  • 案例
    xs=x:xs'
    ys=y:ys'
    n=0
    。我们有

    zip (x : xs') (y : ys') !! 0 = {by equation (zip-2)}
    (x,y) : zip xs' ys'     !! 0 = {by equation (!!-1)}
    (x,y)                        = {by equation (!!-1) - backwards}
    ((x : xs') !! 0, (y : ys') !! 0).
    
  • 案例
    xs=x:xs'
    ys=y:ys'
    n=n'+1

     zip (x : xs') (y : ys') !! (n + 1) = {by equation zip-2}
     (x,y) : zip xs' ys' !! (n + 1) = {by equation (!!-2)}
     zip xs' ys' !! n               = {by induction hypothesis}
     (xs' !! n , ys' !! n)          = {by equation (!!-2) backwards}
     ((x : xs') !! (n + 1), (y : ys') !! (n + 1))
    
    量化宽松


希望这有帮助。

我已经生锈了,但我想你可以证明
zip xs-ys!!0=(xs!!0,ys!!0)
通过等式推理和扩展
zip
的定义,然后证明如果
zip xs ys!!n=(xs!!n,ys!!n)
then
zip xs-ys!!n+1=(xs!!n+1,ys!!n+1)
。谢谢你的回答。我忘了提到它应该是列表长度上的结构归纳法。也就是说,在归纳步骤中,xs变成了(x:xs)。谢谢您的回答!在使用IH的最后一种情况下,这不被认为是n的归纳吗?你从哪里得到函数定义的?绝对不是!感应结束
xs
。IH是为所有ys设计的。福尔。n>=0/\nzip xs ys!!n=(xs!!n,ys!!n)。需要对
n
ys
进行案例分析,只是为了“按摩”目标,以便使用等式推理轻松操作。如果您认为答案是正确的,请将其标记为答案。