タイピングルール System F の型付け規則は、単純な型付きラムダ計算の規則に以下の規則を追加したものです。
どこσ 、 τ {\displaystyle \sigma ,\tau } 種類は、α {\displaystyle \alpha } は型変数であり、α タイプ {\displaystyle \alpha ~{\text{type}}} 文脈上、α {\displaystyle \alpha } 拘束されている。第一の規則は適用規則であり、第二の規則は抽象化規則である。[ 2 ] [ 3 ]
論理と述語 のB o o l e 1 n \displaystyle {\mathsf {ブール値}}} 型は次のように定義されます。 ∀ α 。 α → α → α {\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha } 、 どこα {\displaystyle \alpha } これは型変数 です。つまり、次のようになります。B o o l e 1 n \displaystyle {\mathsf {ブール値}}} は、型αと 2 つの型 α の式を入力として受け取り、型α の式を出力するすべての関数の型です( を考慮すると、→ {\displaystyle \to } 右結合 である。)
ブール値に関する以下の2つの定義T {\displaystyle \mathbf {T} } そしてF {\displaystyle \mathbf {F} } チャーチブール の定義を拡張して使用される。
T = Λ α 。 λ x α λ y α 。 x {\displaystyle \mathbf {T} =\Lambda \alpha {.}\lambda x^{\alpha }\lambda y^{\alpha }{.}x} F = Λ α 。 λ x α λ y α 。 y {\displaystyle \mathbf {F} =\Lambda \alpha {.}\lambda x^{\alpha }\lambda y^{\alpha }{.}y} (上記の 2 つの関数は、2 つではなく 3 つの引数を必要とすることに注意してください。 後者 2つ はラムダ式である必要がありますが、最初の引数は型である必要があります。この事実は、これらの式の型が次のようになっているという事実に反映されています。)∀ α 。 α → α → α {\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha } ; α を束縛する全称量化子は、ラムダ式自体の α を束縛するΛ に対応します。また、次の点にも注意してください。B o o l e 1 n \displaystyle {\mathsf {ブール値}}} は、∀ α 。 α → α → α {\displaystyle \forall \alpha .\alpha \to \alpha \to \alpha } しかし、それはシステムF自体のシンボルではなく、「メタシンボル」である。同様に、T {\displaystyle \mathbf {T} } そしてF {\displaystyle \mathbf {F} } これらはまた、System Fの「アセンブリ」(ブルバキの意味で)の便利な略記法である「メタシンボル」でもある。そうでなければ、もしそのような関数に(System F内で)名前を付けることができたなら、関数を匿名で定義できるラムダ表現装置や、その制約を回避するための固定小数点コンビネータは 不要になるだろう。
そして、この2つでλ {\displaystyle \lambda } -用語では、いくつかの論理演算子(型)を定義できますB o o l e 1 n → B o o l e 1 n → B o o l e 1 n {\displaystyle {\mathsf {Boolean}}\rightarrow {\mathsf {Boolean}}\rightarrow {\mathsf {Boolean}}} ):
A N D = λ x B o o l e 1 n λ y B o o l e 1 n 。 x B o o l e 1 n y F O R = λ x B o o l e 1 n λ y B o o l e 1 n 。 x B o o l e 1 n T y N O T = λ x B o o l e 1 n 。 x B o o l e 1 n F T {\displaystyle {\begin{aligned}\mathrm {AND} &=\lambda x^{\mathsf {ブール値}}\lambda y^{\mathsf {ブール値}}{.}x\,{\mathsf {ブール値}}\,y\,\mathbf {F} \\\mathrm {OR} &=\lambda x^{\mathsf {ブール値}}\lambda y^{\mathsf {ブール値}}{.}x\,{\mathsf {ブール値}}\,\mathbf {T} \,y\\\mathrm {NOT} &=\lambda x^{\mathsf {ブール値}}{.}x\,{\mathsf {ブール値}}\,\mathbf {F} \,\mathbf {T} \end{aligned}}} 上記の定義では、B o o l e 1 n \displaystyle {\mathsf {ブール値}}} は型引数ですx {\displaystyle x} に与えられる他の 2 つのパラメータを指定しますx {\displaystyle x} の型B o o l e 1 n \displaystyle {\mathsf {ブール値}}} Church エンコーディングと同様に、生の値をそのまま使用できるため、IFTHENELSE 関数は必要ありません。B o o l e 1 n \displaystyle {\mathsf {ブール値}}} 決定関数として型付けされた項。ただし、要求された場合は:
私 F T H E N E L S E = Λ α 。 λ x B o o l e 1 n λ y α λ z α 。 x α y z {\displaystyle \mathrm {IFTHENELSE} =\Lambda \alpha .\lambda x^{\mathsf {Boolean}}\lambda y^{\alpha }\lambda z^{\alpha }.x\alpha yz} それでいいです。述語 は、B o o l e 1 n \displaystyle {\mathsf {ブール値}}} -型の値。最も基本的な述語はISZERO で、これはT {\displaystyle \mathbf {T} } 引数が教会数 0 である場合に限り、
私 S Z E R O = λ n ∀ α 。 ( α → α ) → α → α 。 n B o o l e 1 n ( λ x B o o l e 1 n 。 F ) T {\displaystyle \mathrm {ISZERO} =\lambda n^{\forall \alpha .(\alpha \rightarrow \alpha )\rightarrow \alpha \rightarrow \alpha }{.}n\,{\mathsf {Boolean}}\,(\lambda x^{\mathsf {Boolean}}{.}\mathbf {F} )\,\mathbf {T} } さらに、存在量化子 (および存在型)は、システム F で次のように実装できます。[ 4 ] [ 5 ]
∃ X 。 A = ∀ Y 。 ( ∀ X 。 A → Y ) → Y {\displaystyle \exists X.A=\forall Y.(\forall X.A\rightarrow Y)\rightarrow Y}
システムF構造 システムFは、 Martin-Löfの型理論 と同様に、再帰構造を自然な形で埋め込むことを可能にする。抽象構造(S )は コンストラクタ を用いて作成される。これらは次のように型付けされた関数である。
K 1 → K 2 → ⋯ → S {\displaystyle K_{1}\rightarrow K_{2}\rightarrow \dots \rightarrow S} 。再帰性は、 S 自体が型のいずれかの中に現れるときに現れる。K 私 {\displaystyle K_{i}} これらのコンストラクタがm個 ある場合、 S の型を次のように定義できます。
∀ α 。 ( K 1 1 [ α / S ] → ⋯ → α ) ⋯ → ( K 1 m [ α / S ] → ⋯ → α ) → α {\displaystyle \forall \alpha .(K_{1}^{1}[\alpha /S]\rightarrow \dots \rightarrow \alpha )\dots \rightarrow (K_{1}^{m}[\alpha /S]\rightarrow \dots \rightarrow \alpha )\rightarrow \alpha } 例えば、自然数はコンストラクタを持つ帰納的データ型Nとして定義できる。
z e r o : N s u c c : N → N {\displaystyle {\begin{aligned}{\mathit {zero}}&:\mathrm {N} \\{\mathit {succ}}&:\mathrm {N} \rightarrow \mathrm {N} \end{aligned}}} この構造に対応するシステムFタイプは ∀ α 。 α → ( α → α ) → α {\displaystyle \forall \alpha .\alpha \to (\alpha \to \alpha )\to \alpha } この種の用語は、教会数字 のタイプ版で構成されており、最初の数個は以下のとおりです。
0 := Λ α 。 λ x α 。 λ f α → α 。 x 1 := Λ α 。 λ x α 。 λ f α → α 。 f x 2 := Λ α 。 λ x α 。 λ f α → α 。 f ( f x ) 3 := Λ α 。 λ x α 。 λ f α → α 。 f ( f ( f x ) ) {\displaystyle {\begin{aligned}0&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.x\\1&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.fx\\2&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.f(fx)\\3&:=\Lambda \alpha .\lambda x^{\alpha }.\lambda f^{\alpha \to \alpha }.f(f(fx))\end{aligned}}} カリー化された引数の順序を逆にすると(つまり、 ∀ α 。 ( α → α ) → α → α {\displaystyle \forall \alpha .(\alpha \rightarrow \alpha )\rightarrow \alpha \rightarrow \alpha } ) の場合、 n のチャーチ数は、関数f を 引数として受け取り、f のn 乗 を返す関数です。つまり、チャーチ数は高階関数 であり、1 つの引数を持つ関数f を受け取り、別の 1 つの引数を持つ関数を返します。
プログラミング言語での使用 本稿で使用されている System F のバージョンは、明示的に型付けされた、つまり Church スタイルの計算体系です。λ 項に含まれる型情報により、型チェックは 容易になります。Joe Wells (1994)は、明示的な型注釈のない、Curry スタイルの System F の変種では型チェックが決定不能であること を証明することで、「厄介な未解決問題」を解決しました。 [ 6 ] [ 7 ]
ウェルズの結果は、 System F の型推論 が不可能であることを示唆しています。System F の制限である「Hindley–Milner 」、または単に「HM」は、簡単な型推論アルゴリズムを持ち、Haskell 98 やML ファミリーなどの多くの静的型付け関数 型プログラミング言語 で使用されています。時間の経過とともに、HM スタイルの型システムの制限が明らかになるにつれて、言語は型システムに対してより表現力豊かな論理へと着実に移行してきました。HaskellコンパイラであるGHC は 、(2008 年現在) HM を超え、非構文型等価性で拡張された System F を使用しています。[ 8 ] OCaml の型システムの HM 以外の機能にはGADT が含まれます。[ 9 ] [ 10 ]
ジラール・レイノルズ同型性2階直観主義論理 では、2階多相ラムダ計算 (F2) は Girard (1972) と Reynolds (1974) によって独立に発見されました。[ 11 ] Girard は表現定理 を証明しました。2階直観主義述語論理 (P2) では、自然数から自然数への関数で全射であることが証明できるものは、P2 から F2 への射影を形成します。[ 11 ] Reynolds は抽象化定理 を証明しました。F2 のすべての項は論理関係を満たし、その論理関係は P2 の論理関係に埋め込むことができます。[ 11 ] Reynolds は、Girard 射影に続いて Reynolds 埋め込みを行うと恒等写像、すなわちGirard–Reynolds 同型写像 が形成されることを証明しました。[ 11 ]
注記 ↑ Girard, Jean-Yves (1986). "可変型のシステム F、15年後". Theoretical Computer Science . 45 : 160. doi : 10.1016/0304-3975(86)90044-7 .しかし、[3] では、偶然にも F と呼ばれたこのシステムの変換の明白な規則が収束していることが示されました。 ↑ ハーパー R. 「 プログラミング言語の実践的基礎、第 2 版」 pp. 142–3 。 ↑ Geuvers H、Nordström B、Dowek G. 「プログラムの証明と数学の形式化」 (PDF) . p. 51. ↑ ザビエル・ルロワ、「プログラミング=証明?今日のカリー=ハワード間のやり取り」、コレージュ・ド・フランス講義録、第2講、15ページ、2018年11月21日https://xavierleroy.org/CdF/2018-2019/2.pdf ↑ "CS 4110: プログラミング言語と論理 - 講義 26: 存在型" (PDF) 。 コーネル大学 Ann S. Bowers College of Computing and Information Science 。コーネル大学コンピュータサイエンス学科。2018 年。2025 年 9 月 26 日にオリジナルから アーカイブ (PDF) 。2025 年 11 月 8 日 に取得 。 ↑ Wells, JB (2005-01-20). 「ジョー・ウェルズの研究関心」 . ヘリオット・ワット大学。 ↑ Wells, JB (1999). "System F における型付け可能性と型チェックは同等かつ決定不能である" . Annals of Pure and Applied Logic . 98 ( 1–3 ): 111–156 . doi : 10.1016/S0168-0072(98)00047-5 . 「チャーチ・プロジェクト:{S}システム{F}における型付け可能性と型チェックは同等かつ決定不能である」 。2007年9月29日。2007年9月29日のオリジナルからアーカイブ済み。 ↑ "System FC: 等価制約と強制" . gitlab.haskell.org . 2019-07-08 取得 . ↑ "OCaml 4.00.1 リリースノート" . ocaml.org . 2012-10-05 . 2019-09-23 に取得. ↑ 「OCaml 4.09 リファレンス マニュアル」 。2012-09-11。2019-09-23 に 取得 。 1 2 3 4 Philip Wadler (2005)ジラール・レイノルズ同型性(第2版)エディンバラ大学 、エディンバラ大学プログラミング言語と基礎↑ Cardelli, Luca; Martini, Simone; Mitchell, John C.; Scedrov, Andre (1994). "サブタイピングによるシステムFの拡張". Information and Computation, vol. 9. North Holland, Amsterdam. pp. 4–56 . doi : 10.1006 /inco.1994.1013 . ↑ ピアース、ベンジャミン (2002). 型とプログラミング言語 . MIT Press. ISBN 978-0-262-16209-8 。 第26章:限定量化
参考文献 ジラール、ジャン=イヴ (1971)。 「ゲーデルの分析の解釈の拡張、および分析とタイプの理論の分析の応用」。第 2 回スカンジナビア論理シンポジウムの議事録 。アムステルダム。ページ63–92 。土井 : 10.1016/S0049-237X(08)70843-7。 ジャン=イヴ・ジラール (1972 年)、「最高数学解釈と最高学力の解釈」 (博士論文) (フランス語)、パリ第 7 大学 。レイノルズ、ジョン (1974)。型構造の理論に向けて (PDF) 。ジラール、ジャン=イヴ;ラフォン、イヴ;テイラー、ポール(1989)。証明と型 。ケンブリッジ大学出版局。ISBN 978-0-521-37181-0 。 Wells, JB (1994). 「2階ラムダ計算における型付け可能性と型チェックは等価かつ決定不能である」.第9回IEEE コンピュータサイエンスにおける論理シンポジウム (LICS) 論文集. pp. 176–185 . doi : 10.1109/LICS.1994.316068 . ISBN 0-8186-6310-3 。 Postscript版
さらに読む ピアース、ベンジャミン( 2002)。「V 多相性 第23章 普遍型、第25章 システムFのML実装」。『 型とプログラミング言語 』。MIT Press。pp. 339–362、381–388。ISBN 0-262-16209-1 。