カテゴリ理論/抽象代数と計算の複雑さを組み合わせた理論はありますか?


18

カテゴリ理論と抽象代数は、関数を他の関数と組み合わせる方法を扱います。複雑性理論は、関数の計算がいかに難しいかを扱います。これらの研究分野が自然なペアのように見えるので、これらの研究分野を組み合わせた人を見たことがありません。誰もこれをやったことがありますか?


やる気を起こさせる例として、モノイドを見てみましょう。操作がモノイドの場合、操作を並列化できることはよく知られています。

たとえば、Haskellでは、加算が次のような整数のモノイドであると簡単に定義できます。

instance Monoid Int where
    mempty = 0
    mappend = (+)

ここで、0〜999の合計を計算する場合、次のように順番に実行できます。

foldl1' (+) [0..999]

または、並行して行うことができます

mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel

しかし、このモノイドの並列化は、mappendが一定の時間で実行されるためにのみ意味があります。これが当てはまらない場合はどうなりますか?たとえば、リストは、mappendが一定の時間(またはスペース)で実行されないモノイドです。これが、Haskellにデフォルトの並列mconcat関数がない理由です。最適な実装は、モノイドの複雑さに依存します。


これらの2つのモノイドの違いを説明する便利な方法があるはずです。その後、これらの違いでコードに注釈を付け、モノイドの複雑さに応じて、使用する最適なアルゴリズムをプログラムが自動的に選択できるようにする必要があります。


1
HaskellのInteger型は多精度整数であり、それらの加算の時間の複雑さは入力整数の長さに自然に依存するため、IntegerのMonoidインスタンスのmappendが一定の時間で実行されると言うのは誤解を招きます。
伊藤剛

@TsuyoshiItoそうですね、Intを使うつもりでした。修繕。
マイクIzbicki


@Kavehありませんでした、ポインターに感謝します。簡単に読んでみると、複雑なクラス自体については誰もカテゴリー理論的な作業を行っていないように思えます(そして、それが意味することや価値のある目標であるかどうかについては議論があります)。だから、私の質問の最初の部分にほとんど答えて、代数と複雑さの間の相互作用を残すだけだと思います。
マイクIzbicki

代数と複雑性理論の間には多くの相互作用があります。「代数的複雑性理論」というタイトルの本さえあり、代数的概念と技術を使用して複雑性に適用しています。また、複雑性理論を代数に適用した大規模な研究もあります。回答を得るには、より具体的にする必要があります。
カベ

回答:


12

[計算の複雑さとカテゴリー理論]は、そのような自然なペアのように見えます。

研究分野としての計算の複雑さの卓越性を考えると、もし彼らがそのような自然な仲間であったなら、おそらく誰かがすでにそのつながりを引き出していただろうか?

ワイルドな憶測。 計算の複雑さのカテゴリカルレンダリングが難しい理由について考えて、読者を楽しませてください。おそらく、カテゴリー理論の重要な概念クラスターは、普遍的な構造/特性を中心にしています(関手、自然変換、付属などの関連装置を使用)。数学的な構成に普遍的な性質があることを示すことができれば、多くの洞察が得られます。したがって、計算の複雑さへのカテゴリカルなアプローチが必要な場合、便利なカテゴリを見つけ、そのカテゴリを使用した普遍的な構成によって複雑さの理論の重要な概念(例:LOGSPACEまたはNP-hardness)を与える方法を示す必要があります。これはまだ行われていませんが、これは本当に難しい問題だからだと思います。

T=T1T2T3T1。代わりに、コントロール(FSM)とテープという2つのコンポーネントを個別に指定してTMを構築します。コントロールもテープも良い代数を持っているわけではありません。

最初にテープを見てみましょう。テープを作成する自然な方法がいくつかありますが、いずれもTMの構成記述には機能しないようです。

  • 順序追加のようにそれらを一緒に接着します。 これは正しい概念ではありません。テープは無限であり、順序加算のようにテープを貼り付けることにより、有限の計算可能性を超える二重無限オブジェクトが得られ、無限計算/ハイパー計算につながります。実行可能な計算。

  • それらを並行して貼り付けます。たとえば、2台の3ヘッドマシンが6ヘッドマシンに変わります。これは、コンポーネントマシンが相互にどのように相互作用するかを教えてくれません。

  • テープをインターリーブします。このアプローチの1つの問題は、標準的なインターリーブが存在する場合、それが何であるかが不明確であることです。さらに、インターリーブは既存のコントロールを「混乱」させ、特定のテープレイアウトに合わせて微調整する傾向があります。したがって、制御を直接再利用することはできません。

π

全体として、私たちはかなり複雑な計算の複雑な代数的/カテゴリー的扱いからかなり離れており、そこに到達するにはいくつかの概念的な進歩が必要です。


λπλπαλπ


チューリングマシンを抽象的なコンピュータープログラムと考えると、チューリングマシンの構成はかなり明確だと思います。プログラムを作成する自然な方法は、あるプログラムを別のプログラムのサブプログラムとして呼び出すことです。より一般的には、各プログラムは、特定のフォーマットされた入力を受け入れ、別の関数に入力できる別のフォーマットされた文字列を出力する有限時間および空間関数で計算可能です。ガベージ入力によってはガベージ出力が発生したり、割り当てられた時間とスペース内で一部の関数の実行に失敗したりする可能性があり、その場合はプログラム全体がクラッシュします。
アントンフェティソフ

明らかに、すべてのプログラムがこの方法で構成できるわけではないため、当然ながらTMのカテゴリーに導かれます。時空間無制限のTMの概念を手放す必要がある可能性もありますが、それはとにかく実用的ではありません。この構造をキャプチャする公開された概念はありますか?
アントンフェティソフ

@AntonFetisov詳細を書き留めてみましたか?それはきれいではありません。
マーティンバーガー

2

形式言語間の同型に関するこの答えは、コード理論の代数的結果とカテゴリ理論の概念を組み合わせて、形式言語と複雑度クラス間の同値および同型の考えられる概念を調査します。

これらの結果についての私自身の解釈は、決定論的および明確な非決定論的トランスデューサーでは単語の同期点が異なり、決定論的フォワードトランスデューサーと決定論的バックワードトランスデューサーでも異なります。同期ポイントのこの観点を使用すると、これらの結果を目に見えるプッシュダウン言語に結び付けることができ、呼び出しと戻りに加えて単純な区切り文字(スペースやコンマなど)も考慮する必要があるかどうかという疑問が生じます。(セパレータはreturn + callの組み合わせでエミュレートできると思いますが、1つではなく2つのシンボルが必要なため、これで十分かどうかはわかりません。セパレータだけがあるが、シンボルを呼び出すか返す)


私はこれをコミュニティWikiにしました。なぜなら、それは私自身の質問に対する私自身の答えにリンクしているからです。私はお気に入りを「掃除」していましたが、この短い答えを書くだけで最も簡単な方法でした。
トーマスクリンペル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.