2017-02-06 7 views
1

Étant donné n >= 0 and n < min (length xs) (length ys) montrer que (zip xs ys)!!n = (xs!!n, ys!!n) avec induction structurelle sur xs.Induction structurelle - (zip xs ys) !! n = (xs !! n, ys !! n)

Est-il même possible de le faire de manière propre? Je ne peux pas trouver tous les endroits où je peux utiliser le Induction Hypothesis.

+0

Je suis rouillé, mais je pense que vous pouvez prouver «zip xs ys !! 0 = (xs !! 0, ys !! 0) 'par un raisonnement équationnel et en développant les définitions de 'zip' et '!!', alors prouve que si 'zip xs ys !! n = (xs !! n, ys !! n) 'alors' zip xs ys !! n + 1 = (xs !! n + 1, ys !! n + 1) '. –

+0

Merci pour la réponse. J'ai oublié de mentionner que cela devrait être une induction structurelle sur toute la longueur de la liste. Cela signifie que xs devient (x: xs) dans l'étape d'induction. – jmply

Répondre

1

D'abord, je vais vous donner des définitions de zip et !!:

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) 

Laissez-xs, ys et n arbitraires. Maintenant, supposons que n >=0 et n < min (length xs) (length ys). Nous procédons par induction au xs.

  • Cas xs = []. Maintenant, nous faisons l'analyse de cas sur ys. Dans les deux cas, nous avons qu'il n'y a pas n >=0 et n < min (length xs) (length ys). Donc, ce cas est trivialement vrai.
  • Cas xs = x : xs'. Nous procédons par analyse de cas sur ys.
  • Cas xs = x : xs' et ys = []. Encore une fois, nous avons le théorème trivialement vrai puisqu'il n'y a pas n tel que cela n >=0 et n < min (length xs) (length ys).
  • Cas xs = x : xs' et ys = y : ys'. Maintenant, nous faisons l'analyse de cas sur n.
  • Cas xs = x : xs', ys = y : ys' et n = 0. Nous avons que

    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). 
    
  • cas xs = x : xs', ys = y : ys' et 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

Espérons que cela aide.

+0

Merci pour votre réponse! Dans le dernier cas où vous utilisez le IH, ne serait-ce pas considéré comme Induction sur n? Où avez-vous trouvé les définitions de fonctions? – jmply

+0

En aucun cas! L'induction est sur "xs". L'IH est pour tous. pour tout n. n> = 0/\ n zip xs ys !! n = (xs !! n, ys !! n). Le besoin d'analyse de cas sur «n» et «ys» est juste de «masser» l'objectif pour le manipuler facilement en utilisant un raisonnement équationnel. –

+0

Si vous pensez que la réponse est correcte, veuillez la marquer comme une réponse. –