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)
thenzip 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
进行案例分析,只是为了“按摩”目标,以便使用等式推理轻松操作。如果您认为答案是正确的,请将其标记为答案。