タグ

ブックマーク / yosh.hateblo.jp (2)

  • OCamlから学ぶCoq - にわとり小屋でのプログラミング

    1 Coqは関数型言語OCamlとよく似ている部分が多いので、OCamlをやったことがある人は、Coqを理解するのが早いだろう。 逆に、Coqに慣れると、OCamlのプログラムが楽々かけるようになるだろう。 今日は、OCamlの視点からCoqの中身を見てみよう。 基型 OCamlのint型は、CoqのZ型、などのように、OCamlの基型に対応する型はだいたいCoqにもある。 OCaml Coq int Z string string(△) bool bool unit unit ただし、Coqの数字は上限および下限が無く、整数ならどんな大きな数もZ型の数字として扱うことができる。 当に整数全体の集合なのだ。 stringに関しては、 Coqでは8bitのアスキー文字のリストで表現されているのでOCamlのそれとは全然違うのに注意しよう。 boolは同じと思ってよいだろう。CoqでもO

    OCamlから学ぶCoq - にわとり小屋でのプログラミング
  • fold_leftとfold_rightが同じになるとき - にわとり小屋でのプログラミング

    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

    fold_leftとfold_rightが同じになるとき - にわとり小屋でのプログラミング
    nsyee
    nsyee 2013/12/24
  • 1