2017-04-24 9 views
-1

私は、xsはintの有限リストであるwhenverhaskellで帰納的証明を設定するには?

f (g xs) == g (f xs) 

を証明する必要があります。

fとgの両方がタイプ[INT]であると仮定 - [INT]>反例による

+3

からこれは右、特定の '' F'とG'のためにあるのですか? (任意の 'f'と' g'の場合は保持しません) –

+0

これらは共に[Int] - > [Int]型であり、両方とも有限整数リストをとります。 – user3358850

答えて

3

反証:あなたは、このプロパティが保持したい場合、あなたは何のより具体的な制約を必要とする

f xs = [] 
g xs = [1] 

fおよびgがあります。

あなたは、法律で実際に証明することができ

(map f . map g) == map (f . g) 

と考えてよいです。これを見つけた

-1

どこか

Theorem: (map f . map g) xs = map (f . g) xs 
     - Proof is by induction on xs 
    *** Base Case, xs = [] 
     - Left side: (map f . map g) [] = map f (map g []) = map f [] = [] 
     - Right side: map (f . g) [] = [] 
    *** Inductive Case, xs = k:ks 
     - Inductive Hypothesis: (map f . map g) ks = map (f . g) ks 
     - Left Side 
      + (map f . map g) xs 
      + map f (map g (k:ks)) 
      + map f ((g k) : (map g ks)) 
      + (f (g k)) : (map f (map g ks)) 
      + ((f . g) k) : ((map f . map g) ks) i.e. change from bracket form back to point form 
      + ((f . g) k) : (map (f . g) ks) by inductive hypothesis 
      + map (f . g) (k:ks) by definition of map 
      + map (f . g) xs 
+1

これは、他の人が指摘しているように、一般的にはfalseである 'f(g xs)== g(f xs)'とは非常に異なります。 –

関連する問題