なぜOCamlで代数計算機をつくるのか
数値的に解くか代数的に解くか/「代数的に解く」プログラムにも深さがある/型が代数になる、ということ/前提知識/本書の構成
代数構造の構築から、方程式の厳密解法・微分積分まで
本書は、四則演算と累乗根だけを使って方程式の厳密解を式として求める計算機を、OCamlの型とファンクタで実装する技術書です。応用先は方程式の求解にとどまらず、微分方程式・積分の実装にも取り組みます。
方程式を解く方法には、ニュートン法のような数値計算で近似値を求めるアプローチと、四則演算と累乗根だけを使って厳密な解を式として書き下す代数的なアプローチがあります。本書が扱うのは後者です。たとえば3次方程式の解を、近似値としてではなく、四則演算と累乗根だけを使った厳密な式として求めます。
実装にあたっては、「群」「環」「体」「拡大体」といった代数構造そのものをOCamlの型として構築し、四則演算をその型に対して正しく定義された演算として実装します。引き算を「足し算と逆元から自動的に導出する」ように、群・モノイド・環・体といった代数的な性質を、「ある性質を満たす代数を受け取ると、別の演算を自動生成する」ファンクタとして組み立てていきます。この部品を積み重ねることで、整数・有理数・複素数・ベクトル・多項式・有限体という一見バラバラに見える代数が、同じ部品の組み合わせでできていることを実装を通して確認します。
type・module・functorなどの構文は、専用の章でまとめて説明しますコードの実行結果は、コンパイル・実行の手順とあわせて本文中にそのまま示します。そのため、手元でOCamlを実行しなくても最後まで読み進められます。実際にコードを試したい方向けに、環境構築の章でセットアップ方法も説明していますが、必須の準備ではありません。
本書は大きく2つの章「基礎的な代数をつくる」「代数を応用する」で構成されます。
数値的に解くか代数的に解くか/「代数的に解く」プログラムにも深さがある/型が代数になる、ということ/前提知識/本書の構成
OCamlコンパイラのセットアップ(本文を読み進めるだけなら必須ではありません)
値と関数の束縛、モジュールとファンクタなど、以降の章で繰り返し使う構文のまとめ
整数・有理数・複素数・ベクトル・多項式・有限体を、同じファンクタを使い回しながら1つずつ実装します。
ここまでつくった部品を組み合わせて、1次方程式から3次方程式までを解きます。方程式に続けて、微分方程式・積分への応用も予定しています。
両イベントとも、詳細な日程・購入ページは決まり次第このページで更新します。