プログラミング言語理論において、パラメトリシティは、パラメトリック多態関数が持つ抽象的な均一性特性であり、多態関数のすべてのインスタンスが同じように動作するという直感を捉えています。
アイデア
集合Xと、 Xからそれ自身への関数の型T ( X ) = [ X → X ] に基づくこの例について考えてみましょう。twice X ( f ) = f ∘ fによって与えられる高階関数twice X : T ( X ) → T ( X ) は、集合Xから直感的に独立しています。集合Xによってパラメーター化されたこのようなすべての関数twice Xの族は、「パラメーター的に多態的な関数」と呼ばれます。これらの関数の族全体を単にtwice と書き、その型をX . T ( X ) → T ( X ) と書きます。個々の関数twice X は、多態的な関数のコンポーネントまたはインスタンスと呼ばれます。すべてのコンポーネント関数twice X は同じ規則によって与えられるため、「同じように」動作することに注意してください。各T ( X ) → T ( X )から任意の関数を 1 つ選択することによって得られる他の関数族には、このような統一性はありません。これらは「アドホック多態的な関数」と呼ばれます。 パラメトリシティは、 twiceなどの均一に作用する族が持つ抽象的な特性であり、アドホック族と区別するものである。パラメトリシティを適切に形式化すれば、型X . T ( X ) → T ( X ) のパラメトリック多相関数が自然数と 1 対 1 であることを証明することができる。自然数nに対応する関数は、規則f f n、すなわちnの多相チャーチ数によって与えられる。対照的に、すべてのアドホック族のコレクションは、集合としては大きすぎるであろう。
歴史
パラメトリシティ定理はもともとジョン・C・レイノルズによって提唱され、抽象定理と呼ばれていました。[1]フィリップ・ワドラーは論文「無料の定理!」[2]で、パラメトリシティを応用して、 パラメトリック多型関数に関する定理をその型に基づいて 導き出す方法について説明しました。
プログラミング言語の実装
パラメトリシティは、 Haskell プログラミング言語のコンパイラに実装されている多くのプログラム変換の基礎です。これらの変換は、Haskell の非厳密なセマンティクスのため、Haskell では従来正しいと考えられていました。Haskellは遅延プログラミング言語であるにもかかわらず、演算子などの特定の基本操作をサポートしています。これにより、いわゆる「選択的厳密性」が可能になり、プログラマが特定の式の評価を強制できるようになります。Patricia Johann と Janis Voigtlaender は、論文「seqがある場合の自由な定理」[3]で、これらの操作があるため、一般的なパラメトリシティ定理は Haskell プログラムには当てはまらないことを示し、したがって、これらの変換は一般に不健全です。
seq
依存型
参照
参考文献
- ^ Reynolds, JC (1983). 「型、抽象化、およびパラメトリック多態性」(PDF) .情報処理. 北ホラント、アムステルダム . pp. 513–523.
- ^ Wadler, Philip (1989 年 9 月)。「定理は無料です!」第 4 回関数型プログラミングおよびコンピュータ アーキテクチャ国際会議。ロンドン。
- ^ Johann, Patricia; Janis Voigtlaender (2004 年 1 月)。「seq が存在する場合の自由定理」。Proc .、プログラミング言語の原則。pp. 99–110。doi :10.1145/964001.964010。
外部リンク
- ワドラー:パラメトリシティ
