fold_leftとfold_rightの結果が同じになるときが気になったので少し調べてみた。 例えば文字列のリストを連結して一つの文字列を生成する次の例はfold_leftでもfold_rightでも同様に定義できて同じ関数になる。Coqで書くと次のような感じ。 Definition xs := "foo" :: "bar" :: "baz" :: nil. Eval compute in (fold_left append xs ""). Eval compute in (fold_right append "" xs). fold_leftとfold_rightの定義はそれぞれ次のとおり Section Fold_Left_Recursor. Variables A B : Type. Variable f : A -> B -> A. Fixpoint fold_left (l:l