暗黙的計算複雑性 ( ICC ) は、従来の複雑性 理論とは異なり、特定の基盤となるマシン モデルや計算リソースの明示的な制限を参照することなく、プログラムの構築方法に対する制約によってプログラムを特徴付ける計算複雑性理論のサブフィールドです。 ICC の中心的な目標は、表現力が特定の複雑性クラスと完全に一致するプログラミング形式 (制限付き 形式言語 、型システム 、再帰スキームなど)を特定し、クラスへの所属が独立した計算論証ではなく構文の正しさの結果となるようにすることです。ICC は 1990 年代に開発され、証明論 、部分構造論理、線形論理 、モデル 理論 、再帰理論 の手法を用いて、高水準形式言語 の表現力の制限を証明します。創設時の貢献としては、ジラール 、セドロフ、スコットの有界線形論理 (1992 年)、ベラントーニとクックの述語再帰に基づく関数代数 (1992 年)、およびジョーンズの cons フリー プログラミング言語による多項式時間の特性化 (1999 年) などがある。 ICC はまた、形式的に検証可能な意味でプログラムのリソース使用を制御できる関数型プログラミング 言語、言語ツール、型理論 の実践的な実現にも関心を持っている。
リソース認証の主要なアプローチは、静的解析 (SA)と暗黙的計算複雑性(ICC)の2つです。SAはアルゴリズム的な性質を持ち、選択した幅広いプログラミング言語に焦点を当て、構文的な手段によって、その言語で与えられたプログラムが実行可能かどうかを判断しようとします。対照的に、ICCは、複雑性クラスを定義する特殊なプログラミング言語またはメソッドを最初から作成しようとします。したがって、SAはコンパイル時 に焦点を当てており、プログラマに要求はありません。一方、ICCは言語設計の分野です。
背景と動機 古典的な計算複雑性理論では、チューリングマシン が問題を解く際の資源消費量(時間、空間)を分析することで、問題がP やPSPACE といった複雑性クラスに分類されます。この分析は外在的なものであり、プログラムとその複雑性境界は別々のオブジェクトとして扱われ、境界は独立して検証されなければなりません。
ICCは、本質的な特性、すなわち、すべての整形式プログラムが構成上実行可能であり、かつすべての実行可能なアルゴリズムを表現できるプログラミング言語または論理体系を求めている。このような特性は、複雑性クラスがその規模を持つ組み合わせ論的または論理的な理由を明らかにするため理論的に興味深いものであり、また、リソースの制約を静的に強制する型システム やプログラム解析 ツールの基盤となり得るため実用的にも興味深い。
この分野は、ジラール(1987) によって導入された線形論理 に大きく依存しており、そこでは弱化と収縮の構造規則が制御されます。これらの規則を制限することで、プログラムがデータを複製または破棄する能力が制限され、その結果、プログラムが消費できる計算リソースが制限されます。
多項式時間の暗黙的表現 多項式時間で決定可能な集合(クラスP )と多項式時間で計算可能な関数(FP )という重要な複雑性クラスは、多くの注目を集めており、いくつかの暗黙的な表現を持っています。
デメリットのないプログラム Jones は、入力がバイナリ文字列である決定問題を解くことができるプログラミング言語 を定義し、問題がこの言語で決定できるのは、それが P に含まれる場合に限る ことを示した。この言語は、簡単に次のように説明できる。入力はビットのリスト として受け取る。リストを指し、末尾操作を適用して変更できる変数があり、リスト上で前進することができる。再帰関数を定義できるが、 高階関数 はない。重要なことに、データ型コンストラクタ はない(そのためcons-free という名前が付けられている)。入力リストがプログラム全体を通して唯一のデータ構造 である。コンストラクタがないため表現力が制限され、計算中にサイズが大きくなる可能性のある補助データ構造の構築が妨げられる。注目すべきことに、この制限によって決定可能な問題のクラスが P の真部分集合に縮小されることはない。P に含まれるすべての問題は、この言語内で決定できる。さらに、この言語のプログラムは指数時間で実行される可能性があるが、多項式時間の問題のみを決定するため、暗黙的な特徴付けは個々のプログラムの実際の実行時間とは無関係である。ジョーンズはまた、非決定性がこの言語に追加された場合(非決定性チューリングマシン のように)、受け入れ可能な問題のクラスは依然として P であることを示した。
再帰記法を用いた関数代数 BellantoniとCook は、ある種の関数がFPと一致することを示した。これらは、原始再帰関数 と同様に、基本関数と既存の関数から新しい関数を構築するための演算子のセットによって定義される関数である。後述するように、原始再帰スキームの代わりに特別な再帰スキームが使用され、さらに、関数の引数は2つの「ソート」に分割される。これは、引数をセミコロンで区切ることによって示される。f ( x 1 、 … 、 x k ; x k + 1 、 … 、 x k + n ) {\displaystyle f(x_{1},\dots ,x_{k};x_{k+1},\dots ,x_{k+n})} セミコロンの後に続く引数はセーフ と呼ばれます(より直感的な名前は「保護された」かもしれません)。値がセーフな位置に渡されると、その値は大きくなりすぎることはありません。以下の節(3)と(4)の違いに注意してください。プリミティブ再帰関数の定義とのもう1つの重要な違いは、ここでは引数がバイナリ文字列 として扱われ、数値後継関数(x' )とは対照的に、ビットを追加することによって値を増やすことができる(x 0 またはx 1)ことです。
基本的な機能の一覧は以下のとおりです。
空の文字列 :ε {\displaystyle \varepsilon } (零項関数)予測 :π 私 k 、 n ( x 1 、 … 、 x k ; x k + 1 、 … 、 x k + n ) = x 私 、 {\displaystyle \pi _{i}^{k,n}(x_{1},\ldots ,x_{k};x_{k+1},\ldots ,x_{k+n})=x_{i},} 各1 ≤ 私 ≤ k + n {\displaystyle 1\leq i\leq k+n} 通常のバイナリ後継者 :S 私 ( x ; ) = x 私 、 私 ∈ { 0 、 1 } {\displaystyle S_{i}(x;)=xi,\ i\in \{0,1\}} 境界付き安全バイナリ後継者 :S 私 ( z ; x ) = { x 私 もし | x | < | z | x さもないと {\displaystyle S_{i}(z;x)=\left\{{\begin{array}{ll}xi&{\text{if }}|x|<|z|\\x&{\text{otherwise}}\end{array}}\right.} バイナリの先行者 :P ( ; ε ) = ε 、 P ( ; x 私 ) = x {\displaystyle P(;\varepsilon )=\varepsilon ,P(;xi)=x} 数値先行者 :p ( ; ε ) = ε 、 p ( ; x ′ ) = x {\displaystyle p(;\varepsilon )=\varepsilon ,\ p(;x')=x} 条件付き :Q ( ; ε 、 y 、 z 0 、 z 1 ) = y 、 Q ( ; x 私 、 y 、 z 0 、 z 1 ) = z 私 {\displaystyle Q(;\varepsilon ,y,z_{0},z_{1})=y,Q(;xi,y,z_{0},z_{1})=z_{i}} 集計製品 :× ( x 、 y ; ) = 1 | x | × | y | {\displaystyle \times (x,y;)=1^{|x|\times |y|}} 。合成スキームと再帰スキームを使用して、関数を組み合わせて新しい関数を作成できます。g 、 r → 、 s → {\displaystyle g,{\vec {r}},{\vec {s}}} それらの述語構成 、f = g ∘ ( r → ; s → ) {\displaystyle f=g\circ ({\vec {r}};{\vec {s}})} 定義されるf ( x → ; y → ) = g ( r → ( x → ; ) ; s → ( x → ; y → ) ) 。 {\displaystyle f({\vec {x}};{\vec {y}})=g({\vec {r}}({\vec {x}};);{\vec {s}}({\vec {x}};{\vec {y}})).} 与えられたg 、 h 0 、 h 1 {\displaystyle g,h_{0},h_{1}} 記法スキーム上の述語的再帰は 関数を定義するf {\displaystyle f} による f ( ε 、 x → ; y → ) = g ( x → ; y → ) 、 f ( z 私 、 x → ; y → ) = h 私 ( z 、 x → ; y → 、 f ( z 、 x → ; y → ) ) 。 {\displaystyle {\begin{aligned}f(\varepsilon ,{\vec {x}};{\vec {y}})&=g({\vec {x}};{\vec {y}}),\\f(zi,{\vec {x}};{\vec {y}})&=h_{i}(z,{\vec {x}};{\vec {y}},f(z,{\vec {x}};{\vec {y}})).\end{aligned}}} これは「表記上の再帰」と呼ばれます。なぜなら、各再帰呼び出しで再帰引数の一部を取り除くからです。これは、zから z -1まで進む「値上の再帰」とは対照的です。
例。 関数を定義します。r ( x ) {\displaystyle r(x)} バイナリ文字列x を受け取り、 x と同じ長さの0 の文字列を返します。読みやすさのために、関数引数を取得するために技術的に必要な射影関数の呼び出しを省略します。π 1 1 ( x ) {\displaystyle \pi _{1}^{1}(x)} 関数でx を取得する g ( x ) {\displaystyle g(x)} 。 g ( x ) = f ( x 、 x ) 、 どこ f ( ε 、 x ; ) = ε 、 f ( z 私 、 x ; ) = S 0 ( x ; f ( z 、 x ; ) ) 。 {\displaystyle {\begin{aligned}g(x)&=f(x,x),{\text{where}}\\f(\varepsilon ,x;)&=\varepsilon ,\\f(zi,x;)&=S_{0}(x;f(z,x;)).\end{aligned}}} 再帰処理で境界付き二項後継演算子を適用できるようにするためには、最初にx のコピーを保持しておく必要があることに注意してください。
階層型再帰 Leivant 、「データ階層化」に基づく別のアプローチを開発しました。自然数(またはその他のデータ)は階層に分けられ、再帰は階層の順序を尊重する方法でのみ許可されます。階層境界付き再帰で定義可能な関数は、多項式時間で計算可能な関数と一致します。Leivant のフレームワークは Bellantoni–Cook 代数よりも構文的に柔軟で、命令型言語にも自然に拡張できます。
線形論理アプローチ ジラール、セドロフ、スコットは、線形論理 の変種である有界線形論理 を導入した。この論理では、縮約規則の使用は多項式項によって制限される。この体系における証明は、カリー・ハワード対応 を介して、多項式時間で計算可能な関数に対応する。ジラールによる軽量線形論理に関するその後の研究、バイヨとテルイ によるその型理論的発展、そしてラフォンのソフト線形論理 は、より簡潔な証明理論を持つ関連体系を生み出し、いずれも指数様相に対する構造的制約によって多項式時間計算を特徴づけている。
その他のクラス 暗黙の表現は、時間クラスの階層 P、EXPTIME 、2-EXPTIME 、…、空間クラスのL 、PSPACE 、EXPSPACE 、… 、および階層DTIME ( O ( n ))、DSPACE ( O ( n ))、 DTIME (O ( 2 n ) {\displaystyle O(2^{n})} ) DSPACE (O ( 2 n ) {\displaystyle O(2^{n})} )、… ほとんどのクラスについては、いくつかの代替表現が知られており、これはクラスが単一の形式主義のアーティファクトではなく、堅牢な内在的記述を持っていることを示唆しています。
基本的 および原始的な再帰関数のGrzegorczyk 階層 もICC の観点から研究されています。階層レベルは、有界再帰スキームのネスト深度に対する制約に対応します。
アプリケーション ICCの結果は、いくつかの実用的な方向に応用されている。
型ベースのリソース分析。 軽量でソフトな線形論理に触発された型システムが関数型言語に実装され、型付けが適切なプログラムが多項式時間または多項式空間で実行されることを保証している。実数計算の暗黙的複雑性。ICC 法は、離散的な設定を超えて、実数上の実行可能な計算を特徴付けるように拡張されている。セキュリティと情報フロー。ICC 型システムのリソース制限特性は、プログラム内の情報フローを制御するために応用されており、言語ベースのセキュリティにも応用されている。
参考文献 Aubert, Clément; Rubiano, Thomas; Rusch, Neea; Seiller, Thomas (2022). "暗黙の計算複雑性の実現" (PDF) .第 7 回計算と演繹のための形式構造に関する国際会議 (FSCD) 2022 . LIPIcs. 228 : 26:1–26:33. Baillot, Patrick; Terui, Kazushige (2004). "ラムダ計算における多項式時間計算のための軽量型".第19回IEEEコンピュータサイエンスにおける論理シンポジウム(LICS 2004)論文集 . IEEE Computer Society Press. pp. 266–275 . doi : 10.1109/LICS.2004.1319621 . Bellantoni, Stephen; Cook, Stephen (1992). "多項式時間関数の新しい再帰理論的特徴付け". Computational Complexity . 2 (2): 97–110 . doi : 10.1007/BF01201998 . Clote, Peter (1999). 「計算モデルと関数代数」。Griffor, Edward R. (編)『計算可能性理論ハンドブック』。論理 学 と数学の基礎に関する研究。第 140巻。アムステルダム:North-Holland。pp. 589–681。ISBN 978-0-444-89882-1 。 Dal Lago, Ugo (2012). "暗黙的計算複雑性入門" (PDF) . In Bezhanishvili, N.; Goranko, V. (eds.). Lecture Notes in Computer Science (LNCS) . Vol. 7388. Berlin, Heidelberg: Springer . pp. 89–109 . doi : 10.1007/978-3-642-31485-8_3 . ISBN 978-3-642-31485-8 2026年4月22日 に取得 。 DICE (2014). "DICE 2014 – 暗黙的計算複雑性における発展" . dice14.tcs.ifi.lmu.de . 2026年 4月22日 取得 . リヨン高等師範学校 (2017)。「暗黙の計算複雑さ」。person.ens-lyon.fr 。2026 年4 月 22 日 に取得 。Girard, Jean-Yves (1987). "線形論理" (PDF) . Theoretical Computer Science . 50 (1): 1– 102. doi : 10.1016/0304-3975(87)90045-4 . hdl : 10338.dmlcz/120513 .Jones, Neil D. (1999). "LOGSPACEとPTIMEのプログラミング言語による特徴付け". Theoretical Computer Science . 228 ( 1–2 ): 151–174 . doi : 10.1016/S0304-3975(98)00357-0 . Jones, Neil D. (2001). "高階型の表現力、またはCONSなしの生活" . Journal of Functional Programming . 11 (1): 55– 94. doi : 10.1017/S0956796800003889 . Kristiansen, Lars; Voda, Paul J. (2005). 「プログラミング言語における複雑性クラスの把握」Nordic Journal of Computing . 12 : 89– 115. Leivant, Daniel (2020). "多項式時間のための汎用命令言語". arXiv : 1911.04026 [ cs.CC ]. Marion, Jean-Yves (2011). 「複雑性フロー解析のための型システム」.第26回IEEEコンピュータサイエンスにおける論理シンポジウム(LICS 2011)論文集 . IEEE Computer Society Press. pp. 123–132 . doi : 10.1109/LICS.2011.41 . 国立情報学研究所 (2013)。「No.033 暗黙的計算複雑性と応用:リソース制御、セキュリティ、実数計算|セミナーNII 湘南会議」 。NII湘南会議。 2026年 4月22日 取得 。Rose, HE (1984).部分再帰: 関数と階層 . オックスフォード論理ガイド. 第 9巻. オックスフォード: クラレンドン・プレス. ISBN 0198531893 。 エディンバラ大学 (2001)。「ICC'01 - 暗黙的計算複雑性」。www.dcs.ed.ac.uk 。 2026年4 月 22日 取得 。
外部リンク Rusch, Neea (2024年8月20日). 「暗黙の計算複雑性:理論から実践へ」 .個人ブログ . ジョージア州オーガスタ(米国):オーガスタ大学. 2026年 4月22日 取得 .