← 戻る ライブラリ › 数学の基礎 › 数理論理学 数学の基礎
ゲーデルの不完全性定理 算術を記述できるほど強力な形式体系は、証明できない真の命題を必ず含み、また自分自身の無矛盾性を証明することもできない——1931年に発見されたこの根本的な限界は、論理学、計算可能性理論、数学の哲学を一変させた。
直観 自分自身について語る文 次の文を考えよう:「この文は証明できない」。もしこれが証明できるなら、それは偽になる(証明できないと言っているから)。これは真なることしか証明しないはずの証明体系にとって都合が悪い。だから証明不可能でなければならない——しかしそうなると、その文が述べていることは真 である。証明できない真の命題が見つかったことになる。これは単なる言葉遊びではない。1931年、クルト・ゲーデルは、十分強力などの形式体系の内部にも、まさにこの振る舞いをする、正直で純粋に算術的な文を構成できることを示した。
中高 形式体系とは規則が固定されたゲームである 形式体系はチェスのようなものだと考えてみよう:固定された初期配置(公理)、駒を動かすための固定された規則(推論規則)があり、合法な局面(証明された定理)に到達したとき「勝ち」となる。この規則は現実世界について何も知らない——コンピュータは証明が「何を意味するか」を理解せずとも、機械的にすべての手をチェックできる。ゲーデルの発見はまさにこの点に関わる:算術のための公理と規則をどのように固定しても、数についてのある真なる事実は、このゲームの中で決して「合法な局面」として到達できない。
大学 真理と証明可能性、そしてゲーデル数化 定義: 無矛盾性と完全性
形式体系 F F F が無矛盾 であるとは、F F F が φ \varphi φ と ¬ φ \neg\varphi ¬ φ の両方を証明する(F ⊢ φ F \vdash \varphi F ⊢ φ かつ F ⊢ ¬ φ F \vdash \neg\varphi F ⊢ ¬ φ と書く)ような命題 φ \varphi φ が存在しないことをいう。その言語のすべての文 φ \varphi φ について F ⊢ φ F \vdash \varphi F ⊢ φ または F ⊢ ¬ φ F \vdash \neg\varphi F ⊢ ¬ φ のいずれかが成り立つとき、それは完全 であるという。また、与えられたテキストが F F F における正当な証明であるかどうかをコンピュータが判定できるとき、F F F は実効的に公理化されている という。
数についての論理式がどうして証明について語れるのだろうか?ゲーデル数化 によってである:すべての記号、論理式 φ \varphi φ 、論理式の列に一意な自然数 ⌜ φ ⌝ \ulcorner\varphi\urcorner ┌ φ ┐ を割り当てる(コンピュータがあらゆるファイルを数として保存するのとまったく同じだ)。論理式の列が正当な証明かどうかを検査することは、それらの数に対する機械的な計算なので、「数 p p p はコード n n n を持つ論理式の証明を符号化している」ということは、+ + + 、× \times × 、量化子だけを使った通常の算術的関係 P r f F ( p , n ) \mathrm{Prf}_F(p, n) Prf F ( p , n ) になる。F F F における証明可能性は、算術の論理式 P r o v F ( n ) : = ∃ p P r f F ( p , n ) \mathrm{Prov}_F(n) := \exists p\,\mathrm{Prf}_F(p, n) Prov F ( n ) := ∃ p Prf F ( p , n ) となる。
⌜ φ ⌝ = 2 a 1 3 a 2 ⋯ p k a k \ulcorner\varphi\urcorner = 2^{a_1} 3^{a_2} \cdots p_k^{a_k} ┌ φ ┐ = 2 a 1 3 a 2 ⋯ p k a k 論理式 φ \varphi φ を記号の有限列として読み、その記号の番号(たとえば言語のそれぞれの記号に小さな番号を割り当てた固定の対応表による)を順に a 1 , a 2 , … , a k a_1, a_2, \dots, a_k a 1 , a 2 , … , a k とする。すると論理式全体のコード ⌜ φ ⌝ \ulcorner\varphi\urcorner ┌ φ ┐ は上の数そのものである:i i i 番目の素数 p 1 , p 2 , … , p k p_1, p_2, \dots, p_k p 1 , p 2 , … , p k (すなわち 2 , 3 , 5 , … 2, 3, 5, \dots 2 , 3 , 5 , … )の指数が i i i 番目の記号のコードを記録している。任意の自然数は素因数分解が一意に定まるため、この数は常に元の記号列へと一意に復号できる——論理式を数として符号化しても情報は一切失われない。これはコンピュータがテキストファイルをバイト列として保存するのとまったく同じである。
T ⊢ G ↔ ¬ P r o v T ( ⌜ G ⌝ ) T \vdash G \leftrightarrow \neg\mathrm{Prov}_T(\ulcorner G\urcorner) T ⊢ G ↔ ¬ Prov T ( ┌ G ┐ ) 上の等式 T ⊢ G ↔ ¬ P r o v T ( ⌜ G ⌝ ) T \vdash G \leftrightarrow \neg\mathrm{Prov}_T(\ulcorner G\urcorner) T ⊢ G ↔ ¬ Prov T ( ┌ G ┐ ) は、あらゆる対角線(不動点)文に共通する形である:理論 T T T に対して、これは「私、G G G は T T T で証明できない」という主張と証明可能に同値な文 G G G を生成する。これはゲーデルの例に限った特殊なトリックではない——同じレシピは、算術で表現できるどんな 性質に対しても自己言及文を構成できる。これこそ、下に描かれたループが決して閉じずに終わることのない理由である:G G G を出た矢印は必ず G G G へと戻ってくる。
依存のループ:文 G F G_F G F は自身の証明可能性を述べる命題と結ばれている。ノード「G F G_F G F 」はノード「P r o v F ( ⌜ G F ⌝ ) \mathrm{Prov}_F(\ulcorner G_F\urcorner) Prov F ( ┌ G F ┐ ) 」(G F G_F G F が F F F で証明可能であるという主張)を指し、それがまた G F G_F G F に戻る。図が表すのはこのループだけであり、対角化補題により G F G_F G F は否定 ¬ P r o v F ( ⌜ G F ⌝ ) \neg\mathrm{Prov}_F(\ulcorner G_F\urcorner) ¬ Prov F ( ┌ G F ┐ ) と証明可能に同値となる。これが G F G_F G F に「私は証明できない」と言わせる。 F F F を初等算術を表現できる無矛盾かつ実効的に公理化された形式体系とする。このとき F F F の言語の文 G F G_F G F であって、標準的な自然数 N \mathbb{N} N において真であるが F ⊬ G F F \nvdash G_F F ⊬ G F となるものが存在する(さらに F F F が ω \omega ω -無矛盾ならば F ⊬ ¬ G F F \nvdash \neg G_F F ⊬ ¬ G F でもある)。特に、F F F は不完全である。
なぜ正しいのか? 対角線補題(カントールの対角線論法の形式版)により、算術の中で F ⊢ G F ↔ ¬ P r o v F ( ⌜ G F ⌝ ) F \vdash G_F \leftrightarrow \neg\mathrm{Prov}_F(\ulcorner G_F\urcorner) F ⊢ G F ↔ ¬ Prov F ( ┌ G F ┐ ) を満たす文 G F G_F G F ——F F F における自分自身の証明不可能性を主張する文——を構成できる。もし F ⊢ G F F \vdash G_F F ⊢ G F なら P r o v F ( ⌜ G F ⌝ ) \mathrm{Prov}_F(\ulcorner G_F\urcorner) Prov F ( ┌ G F ┐ ) が成り立つので F ⊢ ¬ G F F \vdash \neg G_F F ⊢ ¬ G F となり、無矛盾性に反する。ゆえに F ⊬ G F F \nvdash G_F F ⊬ G F であるが、これはまさに G F G_F G F が主張していることそのものなので、G F G_F G F は N \mathbb{N} N において真となる。(後にロッサーが ω \omega ω -無矛盾性の仮定を取り除いた。)
証明 第1段階(構文の算術化)。F F F の言語のすべての記号、論理式、および論理式の有限列に一意な自然数(そのゲーデル数)を割り当てる、計算可能な符号化方式を固定する。F F F が実効的に公理化されているため、関係 P r f F ( p , n ) \mathrm{Prf}_F(p, n) Prf F ( p , n ) ——「p p p はコード n n n を持つ論理式の証明のコードである」—— は + + + 、× \times × 、量化子のみを使った算術の論理式で表現できる。証明を1行ずつ検査することは有限の機械的手続きだからである。P r o v F ( n ) : = ∃ p P r f F ( p , n ) \mathrm{Prov}_F(n) := \exists p\, \mathrm{Prf}_F(p, n) Prov F ( n ) := ∃ p Prf F ( p , n ) と定義する。
第2段階(対角線補題)。自由変数を1つ持つ任意の算術の論理式 ψ ( x ) \psi(x) ψ ( x ) に対して、対角線補題は F ⊢ D ↔ ψ ( ⌜ D ⌝ ) F \vdash D \leftrightarrow \psi(\ulcorner D \urcorner) F ⊢ D ↔ ψ ( ┌ D ┐ ) を満たす文 D D D を生成する——D D D は自分自身のコードについて ψ ( x ) \psi(x) ψ ( x ) が成り立つと主張する。これを ψ ( x ) : = ¬ P r o v F ( x ) \psi(x) := \neg\mathrm{Prov}_F(x) ψ ( x ) := ¬ Prov F ( x ) に適用すると、F ⊢ G F ↔ ¬ P r o v F ( ⌜ G F ⌝ ) F \vdash G_F \leftrightarrow \neg\mathrm{Prov}_F(\ulcorner G_F \urcorner) F ⊢ G F ↔ ¬ Prov F ( ┌ G F ┐ ) を満たす文 G F G_F G F が得られる。直感的には、G F G_F G F は「私は F F F で証明できない」と述べている。
第3段階(F ⊬ G F F \nvdash G_F F ⊬ G F )。背理法により F ⊢ G F F \vdash G_F F ⊢ G F と仮定する。F F F は実効的に公理化されているため、この証明自体がコード p 0 p_0 p 0 を持ち、P r f F ( p 0 , ⌜ G F ⌝ ) \mathrm{Prf}_F(p_0, \ulcorner G_F \urcorner) Prf F ( p 0 , ┌ G F ┐ ) が真となる。したがって F ⊢ P r o v F ( ⌜ G F ⌝ ) F \vdash \mathrm{Prov}_F(\ulcorner G_F \urcorner) F ⊢ Prov F ( ┌ G F ┐ ) である(具体的な数についての証明可能な算術的事実は、それ自体 F F F で証明可能である)。しかし対角線の同値関係と F ⊢ G F F \vdash G_F F ⊢ G F を組み合わせると F ⊢ ¬ P r o v F ( ⌜ G F ⌝ ) F \vdash \neg \mathrm{Prov}_F(\ulcorner G_F \urcorner) F ⊢ ¬ Prov F ( ┌ G F ┐ ) が得られる。したがって F F F はある命題とその否定の両方を証明してしまい、無矛盾性に反する。ゆえに F ⊬ G F F \nvdash G_F F ⊬ G F である。
第4段階(G F G_F G F は真であり、ω \omega ω -無矛盾性を仮定すれば F ⊬ ¬ G F F \nvdash \neg G_F F ⊬ ¬ G F でもある)。F ⊬ G F F \nvdash G_F F ⊬ G F なので、G F G_F G F の証明を符号化する数は存在せず、¬ P r o v F ( ⌜ G F ⌝ ) \neg\mathrm{Prov}_F(\ulcorner G_F \urcorner) ¬ Prov F ( ┌ G F ┐ ) が N \mathbb{N} N において成り立つ。対角線の同値関係により、これはまさに G F G_F G F が主張していることなので、G F G_F G F は真である。もし F F F が G F G_F G F の否定、すなわち F ⊢ ¬ G F F \vdash \neg G_F F ⊢ ¬ G F も証明したなら、これと対角線の同値関係を組み合わせて F ⊢ P r o v F ( ⌜ G F ⌝ ) F \vdash \mathrm{Prov}_F(\ulcorner G_F \urcorner) F ⊢ Prov F ( ┌ G F ┐ ) ——「ある p p p が G F G_F G F の証明を符号化している」——が得られるが、それを裏付ける実際の証明は一つも存在しないことになり、これはまさに ω \omega ω -無矛盾性が排除する状況である。したがって ω \omega ω -無矛盾性のもとでは F ⊬ ¬ G F F \nvdash \neg G_F F ⊬ ¬ G F でもあり、F F F は不完全である。
F F F をペアノ算術を拡張する(または自分自身の証明述語を形式化できるほど強力な)無矛盾かつ実効的に公理化された形式体系とし、C o n ( F ) : = ¬ P r o v F ( ⌜ 0 = 1 ⌝ ) \mathrm{Con}(F) := \neg\mathrm{Prov}_F(\ulcorner 0 = 1\urcorner) Con ( F ) := ¬ Prov F ( ┌ 0 = 1 ┐ ) を F F F が無矛盾であることを表す算術の文とする。このとき F ⊬ C o n ( F ) F \nvdash \mathrm{Con}(F) F ⊬ Con ( F ) である。
なぜ正しいのか? 第一定理の証明——「F F F が無矛盾ならば、F F F は G F G_F G F を証明しない」——それ自体を F F F の内部で形式化することができ、F ⊢ C o n ( F ) → G F F \vdash \mathrm{Con}(F) \to G_F F ⊢ Con ( F ) → G F が得られる。もし F F F が C o n ( F ) \mathrm{Con}(F) Con ( F ) を証明できたとすると、モーダスポネンスにより F ⊢ G F F \vdash G_F F ⊢ G F が導かれ、第一定理に矛盾する。
証明 第1段階(証明可能性述語は定義可能なだけでなく形式化可能である)。P r o v F \mathrm{Prov}_F Prov F は機械的に検査可能な関係 P r f F ( p , n ) \mathrm{Prf}_F(p,n) Prf F ( p , n ) から構成されているため、次の3つの「導出可能性条件」自体が F F F の内部で証明可能である(この議論で F F F が単に無矛盾であるだけでなくペアノ算術を拡張している必要がある理由はここにある):(P 1 P_1 P 1 ) F F F が φ \varphi φ を証明するならば F F F は P r o v F ( ⌜ φ ⌝ ) \mathrm{Prov}_F(\ulcorner\varphi\urcorner) Prov F ( ┌ φ ┐ ) を証明する;(P 2 P_2 P 2 ) F F F は P r o v F ( ⌜ φ → ψ ⌝ ) → ( P r o v F ( ⌜ φ ⌝ ) → P r o v F ( ⌜ ψ ⌝ ) ) \mathrm{Prov}_F(\ulcorner\varphi\to\psi\urcorner) \to (\mathrm{Prov}_F(\ulcorner\varphi\urcorner)\to\mathrm{Prov}_F(\ulcorner\psi\urcorner)) Prov F ( ┌ φ → ψ ┐ ) → ( Prov F ( ┌ φ ┐ ) → Prov F ( ┌ ψ ┐ )) を証明する;(P 3 P_3 P 3 ) F F F は P r o v F ( ⌜ φ ⌝ ) → P r o v F ( ⌜ P r o v F ( ⌜ φ ⌝ ) ⌝ ) \mathrm{Prov}_F(\ulcorner\varphi\urcorner) \to \mathrm{Prov}_F(\ulcorner\mathrm{Prov}_F(\ulcorner\varphi\urcorner)\urcorner) Prov F ( ┌ φ ┐ ) → Prov F ( ┌ Prov F ( ┌ φ ┐ ) ┐ ) を証明する。
第2段階(定理1自身の議論を形式化する)。対角線の同値関係により F ⊢ ¬ G F → P r o v F ( ⌜ G F ⌝ ) F \vdash \neg G_F \to \mathrm{Prov}_F(\ulcorner G_F \urcorner) F ⊢ ¬ G F → Prov F ( ┌ G F ┐ ) 。定理1の非形式的な議論——「もし G F G_F G F が証明可能ならば、その証明自体が P r o v F ( ⌜ G F ⌝ ) \mathrm{Prov}_F(\ulcorner G_F\urcorner) Prov F ( ┌ G F ┐ ) を裏付け、対角線の同値関係によって ¬ G F \neg G_F ¬ G F の証明も手に入ってしまう」——は(P 1 P_1 P 1 )–(P 3 P_3 P 3 )でカバーされる記号操作以外は何も使っていないため、F F F の内部での形式的推論として一歩一歩そのまま再現でき、F ⊢ P r o v F ( ⌜ G F ⌝ ) → P r o v F ( ⌜ ¬ G F ⌝ ) F \vdash \mathrm{Prov}_F(\ulcorner G_F \urcorner) \to \mathrm{Prov}_F(\ulcorner \neg G_F \urcorner) F ⊢ Prov F ( ┌ G F ┐ ) → Prov F ( ┌ ¬ G F ┐ ) が得られる。G F G_F G F とその否定の両方が証明可能であることから、爆発律(ex falso quodlibet)により F F F は 0 = 1 0 = 1 0 = 1 を導けるので、これは F ⊢ P r o v F ( ⌜ G F ⌝ ) → ¬ C o n ( F ) F \vdash \mathrm{Prov}_F(\ulcorner G_F \urcorner) \to \neg\mathrm{Con}(F) F ⊢ Prov F ( ┌ G F ┐ ) → ¬ Con ( F ) 、すなわち F ⊢ C o n ( F ) → G F F \vdash \mathrm{Con}(F) \to G_F F ⊢ Con ( F ) → G F を与える。
第3段階(結論)。背理法により F ⊢ C o n ( F ) F \vdash \mathrm{Con}(F) F ⊢ Con ( F ) と仮定する。F ⊢ C o n ( F ) → G F F \vdash \mathrm{Con}(F) \to G_F F ⊢ Con ( F ) → G F とモーダスポネンスを組み合わせると、F F F は G F G_F G F を証明することになる。しかし定理1により、無矛盾な F F F について F ⊬ G F F \nvdash G_F F ⊬ G F であることがすでに示されている——矛盾である。したがって F F F は C o n ( F ) \mathrm{Con}(F) Con ( F ) を証明できない。これがまさに主張の内容である。
1920年代、ダフィット・ヒルベルトはヒルベルト・プログラム を提唱した:数学全体を公理化し、記号に関する単純な有限的推論だけを使って、その公理系が無矛盾かつ完全であることを証明しようという計画である。ゲーデルの二つの定理は、これがそのままの形では実現不可能であることを示した:ペアノ算術は、検証対象よりも強い原理を使わない限り、集合論どころか自分自身の無矛盾性さえ証明できない。
任意の一階理論 T T T と文 φ \varphi φ について、T ⊢ φ T \vdash \varphi T ⊢ φ であることと、T T T のすべての モデルで φ \varphi φ が真であること(T ⊨ φ T \models \varphi T ⊨ φ )は同値である。
なぜ正しいのか? 1929年にゲーデル(博士論文)が証明したこの定理は、一階述語論理の推論規則 が完全であり、論理的帰結を一つも取り逃さないことを述べている。不完全性定理(1931年)はこれと矛盾しない:G F G_F G F が証明できないのは、意図されたモデル N \mathbb{N} N では G F G_F G F が真であっても、G F G_F G F が偽となる超準モデル を F F F が持つからである。
証明 第1段階(健全性——易しい方向、T ⊢ φ T \vdash \varphi T ⊢ φ ならば T ⊨ φ T \models \varphi T ⊨ φ )。T T T から φ \varphi φ への形式的証明の長さについての帰納法で議論する。T T T のすべての公理は、定義により T T T の任意のモデル M M M で真である;純粋に論理的な公理(例えば φ → ( ψ → φ ) \varphi \to (\psi \to \varphi) φ → ( ψ → φ ) )はすべて妥当であり、いかなる解釈のもとでも真である。そして各推論規則は M M M における真理を保存する:モーダスポネンスの場合、M ⊨ θ M \models \theta M ⊨ θ かつ M ⊨ θ → φ M \models \theta \to \varphi M ⊨ θ → φ ならば自動的に M ⊨ φ M \models \varphi M ⊨ φ となる。したがって証明のすべての行が M M M で真であり、特に最後の行である φ \varphi φ も真である;M M M は T T T の任意のモデルであったから、T ⊨ φ T \models \varphi T ⊨ φ が成り立つ。
第2段階(完全性——難しい方向、対偶による:T ⊬ φ T \nvdash \varphi T ⊬ φ ならば T ⊭ φ T \not\models \varphi T ⊨ φ )。T ⊬ φ T \nvdash \varphi T ⊬ φ と仮定する。このとき集合 T ∪ { ¬ φ } T \cup \{\neg\varphi\} T ∪ { ¬ φ } は無矛盾である(もし矛盾を証明してしまうなら、背理法により T T T が φ \varphi φ を証明することになる)。ヘンキンの方法を用いて、これを証人を持つ極大無矛盾集合 Σ \Sigma Σ へと拡張する:∃ x ψ ( x ) \exists x\, \psi(x) ∃ x ψ ( x ) が Σ \Sigma Σ に属するときはいつでも、新しい定数 c c c を追加して ψ ( c ) \psi(c) ψ ( c ) も Σ \Sigma Σ に属するようにする。拡張された言語の閉じた項を Σ \Sigma Σ における証明可能な等号で同一視したものを要素とし、関係と関数を Σ \Sigma Σ から直接解釈する項モデル M Σ M_\Sigma M Σ を構成する。項の長さについての帰納法(「真理の補題」)により、任意の文 θ \theta θ について M Σ ⊨ θ ⟺ θ ∈ Σ M_\Sigma \models \theta \iff \theta \in \Sigma M Σ ⊨ θ ⟺ θ ∈ Σ が成り立つ。
第3段階(モデルの組み立てと結論)。¬ φ ∈ Σ \neg\varphi \in \Sigma ¬ φ ∈ Σ なので、真理の補題により M Σ ⊨ ¬ φ M_\Sigma \models \neg\varphi M Σ ⊨ ¬ φ が成り立ち、T T T のすべての公理が Σ \Sigma Σ に属することから M Σ ⊨ T M_\Sigma \models T M Σ ⊨ T も成り立つ。したがって M Σ M_\Sigma M Σ は φ \varphi φ が成り立たない T T T の実際のモデルであり、すなわち T ⊭ φ T \not\models \varphi T ⊨ φ である。これにより第2段階の対偶が証明され、第1段階と合わせて、T ⊢ φ T \vdash \varphi T ⊢ φ であることと T ⊨ φ T \models \varphi T ⊨ φ であることは同値となる——これはゲーデルの1929年の博士論文の結果であり、後にレオン・ヘンキン(1949年)によって、ここで用いた項モデルの構成へと整理された。
よくある誤り. ゲーデルの定理は「数学は壊れている」とも「人間には永遠に知りえない真理がある」とも言っていない。この定理が適用されるのは、算術(+ + + と × \times × )を表現できるほど強力な、固定された 無矛盾かつ実効的に公理化された体系に対してのみである。豊かな理論の中にも完全かつ決定可能なものは多く存在する:プレスバーガー算術(乗法を含まない加法のみの算術)やタルスキの実閉体の理論(R \mathbb{R} R 上の初等代数と初等幾何)には、すべての命題を判定するアルゴリズムが存在する。 発展 不完全性、停止問題、決定不能な問題 任意のプログラム P P P のコードと入力 x x x を受け取り、P ( x ) P(x) P ( x ) がいずれ停止するかどうかに常に正しい答えを出して停止するようなアルゴリズム(チューリング機械)H H H は存在しない。
なぜ正しいのか? 仮に H ( P , x ) H(P, x) H ( P , x ) が停止性を判定できたとしよう。H ( P , P ) H(P, P) H ( P , P ) を実行し、H H H が「停止する」と答えたら無限ループ に入り、H H H が「ループする」と答えたら停止する 機械 D ( P ) D(P) D ( P ) を作る。D D D に自分自身のコードを与えると、D ( D ) D(D) D ( D ) が停止することと H ( D , D ) H(D, D) H ( D , D ) が「ループする」と答えることが同値になり矛盾する。これはゲーデルの対角線文の、計算の側における双子そのものである。
証明 第1段階(停止判定器が存在すると仮定する)。背理法により、コード P P P を持つプログラムが入力 x x x で停止するなら「停止する」、そうでなければ「ループする」と、常に停止して正しく答えるアルゴリズム H H H が存在すると仮定する(H ( P , x ) H(P, x) H ( P , x ) は常に停止する)。
第2段階(H H H から対角線機械を構成する)。プログラムのコード P P P を入力とし、まず H ( P , P ) H(P, P) H ( P , P ) を計算する新しいアルゴリズム D ( P ) D(P) D ( P ) を定義する——H H H に P P P をプログラムと入力の両方として 与えて実行する。もし H ( P , P ) H(P, P) H ( P , P ) が「停止する」と答えたら、D D D はわざと無限ループに入る;もし H ( P , P ) H(P, P) H ( P , P ) が「ループする」と答えたら、D D D は(例えば 0 0 0 を返して)直ちに停止する。
第3段階(D D D に自分自身のコードを与える)。D D D 自体がアルゴリズムなのでコードを持ち、そのコードの上で D D D を実行することを妨げるものは何もない:D ( D ) D(D) D ( D ) を考える。二つの場合があり、どちらも不可能である:もし D ( D ) D(D) D ( D ) が停止するなら、構成によりこれはちょうど H ( D , D ) H(D, D) H ( D , D ) が「ループする」と答えた場合に起こる——つまり H H H は、D D D が D D D 上で停止しないと誤って報告したことになるが、実際にはたった今停止したのである。逆に D ( D ) D(D) D ( D ) が永遠に走り続けるなら、これはちょうど H ( D , D ) H(D, D) H ( D , D ) が「停止する」と答えた場合に起こる——つまり H H H は停止すると誤って報告したことになるが、実際には永遠にループするのである。
第4段階(結論)。いずれの場合も H H H は入力 ( D , D ) (D, D) ( D , D ) に対して誤った答えを出してしまい、H H H が常に正しいという仮定に矛盾する。したがって、そのようなアルゴリズム H H H は存在しえない:停止問題は決定不能である。
停止問題から第一不完全性定理がただちに導かれる:もし健全で実効的に公理化された体系 F F F が算術について完全であったなら、P ( x ) P(x) P ( x ) が停止することの証明か停止しないことの証明のどちらかが見つかるまで F F F の証明を順に列挙するだけで、P ( x ) P(x) P ( x ) が停止するかどうかを判定できてしまうからである。さらに決定不能性は通常の整数論にも及ぶ:整数係数の多項式方程式が整数解を持つかどうかを判定するアルゴリズムを求めたヒルベルトの第10問題 (`hilbert-tenth-problem`)は、デービス、パトナム、ロビンソン、マチャセビッチ(1970年)によってそのようなアルゴリズムが存在しない ことが示された。その結果、任意の無矛盾な体系 F F F において、実際には整数解を持たないにもかかわらず、解を持たないことを F F F が証明できない具体的なディオファントス方程式が存在する。
大学 実世界での応用と具体例 ゲーデルとチューリングの限界は、単なる哲学的な興味の対象ではない。それらはソフトウェアツールが約束できることに厳格な境界を課す。「私のプログラムにバグがないことを証明する」静的解析ツール、完全自動の定理証明系、そしてあらゆる 悪意ある挙動を検出すると謳うウイルス対策ソフトはすべて、これらの定理に直接ぶつかる——プログラムについてのある種の問いは、どれほど計算力や工夫を注ぎ込んでも、いかなるアルゴリズムによっても決定できないのである。以下の2つの例はこれを具体的に示す:一つは証明の中心にある番号付けの仕組みを小さく再現したもの、もう一つは停止問題から直接、決定不能性を受け継ぐ本物のソフトウェア工学の課題である。
例
小さな論理アルファベットのための試作対応表を固定する:¬ ↦ 1 \neg \mapsto 1 ¬ ↦ 1 、∃ ↦ 3 \exists \mapsto 3 ∃ ↦ 3 、x ↦ 4 x \mapsto 4 x ↦ 4 。ゲーデル数化の公式を使って、3記号の文字列「¬ ∃ x \neg \exists x ¬∃ x 」のコード ⌜ ¬ ∃ x ⌝ \ulcorner \neg \exists x \urcorner ┌ ¬∃ x ┐ を計算せよ。
解答 第1段階(記号のコードを順に読み取る)。文字列「¬ ∃ x \neg \exists x ¬∃ x 」には次の順で3つの記号がある:¬ \neg ¬ 、∃ \exists ∃ 、x x x 。表を引くとコード列 a 1 = 1 a_1 = 1 a 1 = 1 、a 2 = 3 a_2 = 3 a 2 = 3 、a 3 = 4 a_3 = 4 a 3 = 4 が得られる。
第2段階(数化の公式を適用する)。k = 3 k = 3 k = 3 個の記号なので、公式は ⌜ ¬ ∃ x ⌝ = 2 a 1 ⋅ 3 a 2 ⋅ 5 a 3 = 2 1 ⋅ 3 3 ⋅ 5 4 \ulcorner \neg \exists x \urcorner = 2^{a_1} \cdot 3^{a_2} \cdot 5^{a_3} = 2^{1} \cdot 3^{3} \cdot 5^{4} ┌ ¬∃ x ┐ = 2 a 1 ⋅ 3 a 2 ⋅ 5 a 3 = 2 1 ⋅ 3 3 ⋅ 5 4 となり、最初の3つの素数 2 , 3 , 5 2, 3, 5 2 , 3 , 5 を底として使う。
第3段階(各素数のべき乗を計算する)。2 1 = 2 2^{1} = 2 2 1 = 2 、3 3 = 27 3^{3} = 27 3 3 = 27 、そして 5 4 = 625 5^{4} = 625 5 4 = 625 。
第4段階(掛け合わせる)。⌜ ¬ ∃ x ⌝ = 2 × 27 × 625 = 33,750 \ulcorner \neg \exists x \urcorner = 2 \times 27 \times 625 = 33{,}750 ┌ ¬∃ x ┐ = 2 × 27 × 625 = 33 , 750 。33,750 33{,}750 33 , 750 は 2 1 ⋅ 3 3 ⋅ 5 4 2^1 \cdot 3^3 \cdot 5^4 2 1 ⋅ 3 3 ⋅ 5 4 という形に一意に分解されるため、この一つの数さえ持っていれば、指数 1 , 3 , 4 1, 3, 4 1 , 3 , 4 を復元でき、したがって元の文字列「¬ ∃ x \neg \exists x ¬∃ x 」を正確に読み戻すことができる——符号化によって情報は何一つ失われていない。
例
ある静的解析チームが、ツールに機能 Z Z Z を追加したいと考えている:彼らの言語の任意の関数 f f f のソースコードが与えられたとき、Z ( f ) Z(f) Z ( f ) は常に停止し、f f f がヌルポインタ例外を投げる入力が何か 存在するかどうかを正しく報告する。停止問題をこれに帰着させることで、そのような Z Z Z は存在しえないことを示せ。
解答 第1段階(停止問題をヌルポインタ検出に帰着させる)。背理法により Z Z Z が存在すると仮定する。任意のプログラム P P P と入力 x x x ——停止問題の一つのインスタンス——が与えられたとき、次のように新しい関数 f P , x f_{P,x} f P , x (それ自体には入力を取らない)を構成する:f P , x f_{P,x} f P , x はまず P P P が x x x の上で動く様子を1ステップずつシミュレートし、そのシミュレーションのコードにはどこにもヌルポインタを使わない。
第2段階(観測可能な信号を付加する)。P ( x ) P(x) P ( x ) のシミュレーションが終了した直後——これは P ( x ) P(x) P ( x ) が停止する場合にのみ起こる——f P , x f_{P,x} f P , x はさらにもう1行、わざとヌルポインタを参照解除して例外を投げる。P ( x ) P(x) P ( x ) のシミュレーションが決して終わらなければ、この行には決して到達せず、例外も一切投げられない。
第3段階(帰着が正確であること)。構成により、f P , x f_{P,x} f P , x がある入力でヌルポインタ例外を投げることと P ( x ) P(x) P ( x ) が停止することは同値である:f P , x f_{P,x} f P , x は自分の引数を無視するので「ある入力」という部分はここでは意味を持たないが、ツールが f P , x f_{P,x} f P , x について下す判定は、( P , x ) (P, x) ( P , x ) についての停止問題への答えそのものである。
第4段階(矛盾)。仮定した判定器を Z ( f P , x ) Z(f_{P,x}) Z ( f P , x ) として実行すれば、任意の P P P と x x x について P ( x ) P(x) P ( x ) が停止するかどうかを判定できてしまうが、上の定理はそのようなアルゴリズムが存在しないことを示している。したがって、どれほど高度な解析であっても、任意のプログラムに対するこの静的解析機能 Z Z Z は存在しえない。
研究 自然な独立命題と連続体仮説 ゲーデルの文 G F G_F G F は人工的に見える——自分自身の証明について語るよう特別に設計されたものだからだ。では不完全性は、数学者がもともと 問うていた問題にも現れるのだろうか?現れる。最も有名な例はカントールの連続体仮説 (`continuum-hypothesis`)である:N \mathbb{N} N の濃度と R \mathbb{R} R の濃度の真に中間にあたる濃度を持つ集合は存在するか?ゲーデル(1940年)は構成可能宇宙 L L L を構成することで ZFC 集合論がこれを反証できないことを示し、ポール・コーエン(1963年)は強制法(フォーシング) を発明して ZFC がこれを証明することもできないことを示した。算術そのものの中でも、パリス–ハリントンの定理(1977年)やグッドスタインの定理(1944年、1982年にカービーとパリスが独立性を証明)は、有限の数に関する正真正銘の組合せ論的事実でありながら、N \mathbb{N} N で真であってペアノ算術では証明できない。
歴史的ノート
1900年、ダフィット・ヒルベルトは23の問題の2番目に算術の無矛盾性を掲げ、1920年代にはこれをヒルベルト・プログラムへと発展させた。クルト・ゲーデルはまず1929年に純粋な一階述語論理の完全性の問題に肯定的 に答え、続いて1930〜1931年に二つの不完全性定理で数学界に衝撃を与えた(ケーニヒスベルクの学会で発表されたのは、ヒルベルトが有名な「我々は知らねばならない、我々は知るであろう」の講演を行う前日であった)。1936年にはアラン・チューリングが——ヒルベルトの決定問題(Entscheidungsproblem) を解決しようとして——チューリング機械を定義し、停止問題の決定不能性を証明した。これにより不完全性への第二の計算論的な道筋が与えられ、理論計算機科学が誕生した。
ダフィット・ヒルベルト クルト・ゲーデル アラン・チューリング
研究の最前線 2026年時点
研究の現在地(2026年時点)。 ゲーデルの定理から直接伸びる三つの活発な研究の流れがある:
1. 証明論と順序数解析。 ゲンツェン(1936年)は順序数 ε 0 \varepsilon_0 ε 0 までの超限帰納法を用いてペアノ算術の無矛盾性を証明し、PA のすぐ外側にある一つの原理だけを使うことで第二不完全性定理を回避した。より強い理論(二階算術や集合論の部分体系)の正確な順序数的強さを測ることは、現在も中心的な未解決プログラムである。
2. 逆数学(reverse mathematics)。 フリードマンとシンプソンによって始められたこのプログラムは、解析学や代数学の通常の各定理に対して、それを証明するのに正確にどの公理が必要か を(R C A 0 \mathrm{RCA}_0 RCA 0 から Π 1 1 - C A 0 \Pi^1_1\text{-}\mathrm{CA}_0 Π 1 1 - CA 0 までの五つの基準体系に照らして)問う。
3. 機械検証による形式化。 二つの不完全性定理はいずれも対話型定理証明支援系の中で完全に形式化されている——最初はシャンカール(1986年、Nqthm)、続いてオコナー(2005年、Coq)、ハリソン(HOL Light)、ポールソン(2015年、Isabelle/HOL)による——これにより、形式証明についてのゲーデルの1931年の議論それ自体が、機械検証された形式証明となった。
ゲーデルの第一不完全性定理がプレスバーガー算術(乗法 × \times × を持たず加法 + + + のみを持つ N \mathbb{N} N の一階理論)に適用されない のはなぜか?
乗法なしではゲーデル数化による任意の証明検査を符号化できないからであり、実際この理論は完全かつ決定可能である。 プレスバーガー算術は矛盾しているから。 プレスバーガー算術は無限個の公理を持つため、実効的に公理化されていないから。
ゲーデルの第二 不完全性定理は、ペアノ算術を拡張する無矛盾かつ実効的に公理化された体系 F F F について何を述べているか?
F F F は自分自身の無矛盾性を表す文 C o n ( F ) \mathrm{Con}(F) Con ( F ) を証明できない。他のいかなる体系も C o n ( F ) \mathrm{Con}(F) Con ( F ) を証明することは決してできない。 F F F は ¬ C o n ( F ) \neg\mathrm{Con}(F) ¬ Con ( F ) を証明する。ゲーデルは1929年に完全性 定理を、1931年に不完全性 定理を証明した。なぜこの二つは矛盾しないのか?
完全性定理は「F ⊢ φ F \vdash \varphi F ⊢ φ となるのは φ \varphi φ が F F F のすべての モデルで成り立つとき、かつそのときに限る」と述べる。G F G_F G F は N \mathbb{N} N では真だが F F F のある超準モデルでは偽なので F ⊬ G F F \nvdash G_F F ⊬ G F となる。 1931年の定理が1929年の定理を覆したから。 完全性定理は命題論理にのみ適用され、述語論理には適用されないから。 もし健全で実効的に公理化された形式体系 F F F が算術について完全 であったとしたら、停止問題について何が導かれるか?
「停止する」または「停止しない」のいずれかが証明されるまで F F F の証明をすべて列挙することで停止問題が決定可能になってしまう——これはチューリングの定理に矛盾する。 すべてのチューリング機械があらゆる入力に対して停止するようになる。 何も導かれない:停止性はプログラムに関するものであり、F F F は数に関するものだから。