给定n >= 0 and n < min (length xs) (length ys)
显示(zip xs ys)!!n = (xs!!n, ys!!n)
结构感应超过xs。
甚至可以以干净的方式做到这一点吗?我无法找到可以使用Induction Hypothesis
的任何地方。
答案 0 :(得分:1)
首先,我将给出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 < min (length xs) (length ys)
。我们在xs
上进行了归纳。
xs = []
。现在我们对ys
进行案例分析。在这两种情况下,我们都认为没有n >=0
和n < min (length xs) (length ys)
。所以,这个案子很简单。xs = x : xs'
。我们继续ys
的案例分析。 xs = x : xs'
和ys = []
。同样,我们的定理很简单,因为没有n
,n >=0
和n < min (length xs) (length ys)
。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))
QED
希望这会有所帮助。