健全性定理 Soundness Theorem


|| 証明されたものは正しくあるべき

「証明が正しい」を『定義から構築した成果』

スポンサーリンク

 

 

 


目次

 

公理「明らかに正しいので真と仮定する論理式

真理値「真か偽を表現する記号」

証明可能性「出力が論理式+正しい手順」

   妥当な推論規則「論理公理と \mathrm{Modus \,\, Ponens} と全称化」

   LKの推論規則「真と仮定された論理式記号と各規則」

 

健全性「証明できるなら正しくなければならない」

健全性定理一階述語論理で健全性が確認できた」

   Hilbert健全性定理「論理公理+MP」

   Gentzen健全性定理「真仮定記号+構造規則+論理規則」

 

 

 

 

 


定理の前提

 

この定理については

 

\begin{array}{lcl} 公理 && 当たり前すぎて真と仮定される \\ \\ 真理値 && 真偽を記号で表現したもの \\ \\ \\ 証明可能 && 正しい手順から論理式が出力される \\ \\ 推論規則 && 前提から結論が導ける感じを記号化 \end{array}

 

これらの知識が必須になります。

(知らなくても感覚は分かるかも)

 

 

 

 

 

証明可能性

 

これはこの記事の主題で

 

\begin{array}{ccc} 証明可能 &\Longleftrightarrow& 正しい手順で論理式が出力される \end{array}

 

こういった感覚的に導ける定義から

 

\begin{array}{ccc} 証明可能 & \left\{ \begin{array}{lcc} 論理公理+\mathrm{MP}+\mathrm{UG}から得られる \\ \\ 真仮定記号+記号規則から得られる \end{array} \right. \end{array}

 

このように意味が変化するため

「健全性」を語る上でかなり重要な部分になります。

(健全性定理全体に要請されるものにもなる)

 

 

 

 

 

記号の注意点

 

ここ以外の記事で は適当に使っていますが

(厳密には感覚層に近い自然言語定義はある)

 

\begin{array}{ccl} 他の記事での→ && 左と右の同値かを意識しない接続 \\ \\ この記事での→ && 注釈が無いなら含意に限定 \end{array}

 

『この記事では』厳密に取り扱うので

 

\begin{array}{ccc} 適当に使ってる→ && この記事では→_* \end{array}

 

他の記事での と混同しないように気を付けてください。

\to_* は含意より抽象的で「情報の繋がり」を表現する)

 

 

 

 

 


健全性 Soundness

 

|| 証明されたものが正しくないのはおかしい

「証明されたもの」と「正しい」を繋げる感覚

 

\begin{array}{lcl} 健全である &\Longleftrightarrow& 証明されたやつ→_* 正しい \\ \\ 健全でない &\Longleftrightarrow& 証明されたやつ →_* おかしい \end{array}

 

こういう感じの意味を持っています。

(感覚的に安定していて正常な感じ)

 

\begin{array}{ccccl} 証明可能 && 正しい \\ \\ Γ\vdash φ &⇒& Γ\vDash φ && 全てのΓ,φで真なら健全 \\ \\ Γ\vdash φ &⇒& Γ\vDash φ && 1つでも偽なら健全でない \end{array}

 

記号ではこのように書かれることが多いです。

\vdash は証明可能で \vDash はモデル内で正しい)

 

 

 

 

 

健全性定理 Soundness Theorem

 

|| 健全性を満たすような条件を整備できる

一階述語論理」などを『整理した結果』のこと

 

\begin{array}{ccc} && 証明可能 && 正しい \\ \\ 健全性定理 && \vdash &⇒& \vDash \end{array}

 

これは定理の型としてはこんな感じですが

 

\begin{array}{ccc} 健全性定理 & \left\{ \begin{array}{ll} \mathrm{Hilbert} 健全性定理 \\ \\ \mathrm{Gentzen}健全性定理 \end{array} \right. \end{array}

 

実際には2つの狭義的意味があり

それぞれの役割は明確に異なっています。

(他の定理と異なりこれは要請から定義を導いていく)

 

 

 

 

 

健全性定理の実態

 

これは「定理」と名付けられていますが

 

\begin{array}{ccc} 証明への要請的定義 &\to& 実際の構成 \end{array}

 

その実態は『構成的定義の整備』で

 

\begin{array}{lcl} 感覚層定義 && 証明はこういうもの \\ \\ 言語層定義 && 自然言語により具体的操作を定義し接続 \\ \\ 形式層定義 && 許可されるべき記号操作 \end{array}

 

「実際に行って良い操作」を

『やれないとおかしい』という

「要請」の観点から抽出していきます。

 

 

 

 

 


\mathrm{Hilbert} 健全性定理

 

|| ヒルベルトの時点での証明を扱った健全性定理

「論理公理」と「MP+全称化」の検証結果

 

\begin{array}{lcl} 発想段階 && 証明とは→_*論理公理+操作(\mathrm{MP}+\mathrm{UG}) \\ \\ 整理段階 && 材料(論理公理)と操作(\mathrm{MP}+\mathrm{UG}) \\ \\ 検証段階 && 論理公理は真?→_*操作は真保存? \end{array}

 

証明の概形はこんな感じになっています。

(証明文になるのは定義の確認段階です)

 

 

 

 

 

論理公理は真

 

ここで確認されるのは

あらゆる「恒真命題」の基礎となる

 

\begin{array}{ccc} 基礎論理公理 & \left\{ \begin{array}{l} 命題論理公理 \\ \\ 述語論理公理 \\ \\ 等号公理 \end{array} \right. \end{array}

 

『基礎論理公理』とでも呼ぶべき部分で

 

\begin{array}{lcl} ほぼ全ての公理 &\to_*& いくつかの公理で導ける \\ \\ &\to_*& 最低限の公理が整理される \\ \\ &\to_*& 整理された結果が基礎論理公理 \\ \\ &\to_*& 基礎で作れないなら論理公理ではない \end{array}

 

これらを確認することによって

間接的に全体が示されることになります。

(現時点で例外は発見されていないがあっても排除)

 

 

 

 

 

命題論理公理と真理値

 

これは大まかには3つあって

 

\begin{array}{ccc} 命題論理公理 &\left\{ \begin{array}{l} 後付け無意味 \\ \\ 抽象三段論法 \\ \\ 背理法の根拠 \end{array} \right. \end{array}

 

それぞれの真理値

 

\begin{array}{ccc} p&q && p\to q \\ \\ 1 & 1 && 1 \\ \\ 1 & 0 && 0 \\ \\ 0 & 1 && 1 \\ \\ 0 & 0 && 1 \end{array}

 

「含意 \to 」の真理値から導かれます。

(感覚的に正しい → 真理値を確認したら確認できた)

 

 

 

後付けの前提は無意味になる

 

\begin{array}{ccc} p&q && q\to p & p\to (q\to p) \\ \\ 1 & 1 && 1 & 1 \\ \\ 1 & 0 && 1 & 1 \\ \\ 0 & 1 && 0 & 1 \\ \\ 0 & 1 && 1 & 1 \end{array}

 

抽象化された三段論法

 

\begin{array}{lcl} A&\Longleftrightarrow& p\to (q\to r) \\ \\ B &\Longleftrightarrow& (p\to q) \to ( p\to r) \\ \\ A\to B&\Longleftrightarrow& \Bigl( p\to (q\to r) \Bigr) \to \Bigl( (p\to q) \to ( p\to r) \Bigr) \end{array}

 

\begin{array}{ccc} p&q & r && q\to r & A && p\to q & p\to r & B && A\to B \\ \\ 1&1&1 && 1 &1&&1&1&1&& 1 \\ \\ 1&1&0 && 0&0 &&1&0 &0&&1 \\ \\ 1&0&1 && 1 &1&&0&1&1&& 1 \\ \\ 1&0&0 && 1 &1&&0&0&1&& 1 \\ \\ 0&1&1 && 1 &1&&1&1&1&& 1 \\ \\ 0&1&0 && 0 &1&&1&1&1&& 1 \\ \\ 0&0&1 && 1 &1&&1&1&1&& 1 \\ \\ 0&0&0 && 1 &1&&1&1&1&& 1 \end{array}

 

背理法の根拠

 

\begin{array}{ccc} p&q && \lnot q\to \lnot p & p\to q && (\lnot p \to \lnot q )\to (p \to q) \\ \\ 1 & 1&& 1&1 && 1 \\ \\ 1 & 0 && 0 & 0 && 1 \\ \\ 0 & 1 && 1&1 && 1 \\ \\ 0 & 0 && 1&1 &&1 \end{array}

 

ちょっとややこしいですが

 

\begin{array}{ccc} 後付け無意味 &\to_*& 真 \\ \\ 抽象三段論法 &\to_*& 真 \\ \\ 背理法の根拠 &\to_*& 真 \end{array}

 

これで「命題論理公理」については確認できました。

(これがHilbert健全性定理の最初の検証)

 

 

 

 

 

述語論理公理とモデル

 

ここからは「真理値の確認」ではなく

『照合』とでも呼ぶべき手順が必要になります。

 

\begin{array}{lcccc} 具体化 & 全てのxでφ(x)が真 &→& φ(t)は真 \\ \\ 存在宣言 & φ(t)が真 &\to& φ(x)が真のxが存在 \end{array}

 

やることはほぼ「言い換え」で

(根本的には代入規則の話とも言える)

 

\begin{array}{lcl} 感覚表現段階 && 「全→個」と「個→存在」 \\ \\ 感覚記号段階 && 予想される述語論理公理の形 \\ \\ 厳密定義段階 && モデルと割り当てで定義 \\ \\ 定義検証段階 && 定義から述語論理公理が得られる \end{array}

 

その手順の概形はこんな感じです。

(ただ表現を変えただけとも言える)

 

 

 

 

 

量化子とモデルと割り当て

 

「感覚記号段階」から得られる

「厳密定義段階」の「量化子」なんですが

 

\begin{array}{lclcl} 主観的定義 && M\vDash φ &\Longleftrightarrow & Mの解釈の元でφは真 \\ \\ モデル定義 && M\vDash φ &\Longleftrightarrow & Mをモデルとしφを真と確定 \\ \\ メタ的定義 && M\vDash φ &\Longleftrightarrow & φはMの論理的帰結である \end{array}

 

「量化子」はこの「モデル」における

(定義時点のモデルはまだ無矛盾を確認する段階に無い)

 

\begin{array}{ccl} 無矛盾 &\Longleftrightarrow& 現時点で矛盾が発見されてない \\ \\ M\vDash φ &\Longleftrightarrow& Mの基でφは真と確定される \\ \\ s(x\rightharpoonup c) &\Longleftrightarrow& 自由変数xを定数cに置き換える \\ \\ M,s\vDash φ &\Longleftrightarrow& φが変数を引数に持つ時の書き方 \\ \\ |M| &\Longleftrightarrow& 定数と関数の出力結果の集まり \end{array}

 

『メタレベルの数理モデルにおける定義』から

(意味は数理モデルのものに限定され真と保証される)

 

\begin{array}{lcl} M,s \vDash \forall x \,\, φ(x) \\ \\ M,s(x\rightharpoonup c) \vDash φ が全てのc\in |M| で成立する\\ \\ \\ M,s \vDash \exists x \,\, φ(x) \\ \\ M,s(x\rightharpoonup c) \vDash φ を満たすc\in |M|が存在する \end{array}

 

『自然言語との接続』という形で定義されていて

これが「健全性」の根拠になっています。

(これで定義 →_* 公理の順で検証ができる)

 

 

 

 

 

数理モデルとメタ記号

 

以上の定義に出てくる

 

\begin{array}{ccc} メタ記号 & \left\{ \begin{array}{c} ⇒ && 真偽不明&→_*&真保証 \\ \\ \vDash && 真保証&→_*&真確定 \\ \\ ⇔ && 対象記号 &\to_*& 定義 \end{array} \right. \end{array}

 

このような記号は

「メタ記号」と呼ばれるもので

 

\begin{array}{ccl} 感覚層 && 発想の原型となる感覚 \\ \\ 言語層 && 感覚を説明する言語が生まれる \\ \\ 形式層 && 厳密で統一的な形の言語になる \end{array}

 

それぞれ3層でその意味は定義されています。

(メタ記号は形式層ではただの記号として扱われる)

 

 

補足しておくと

これらの「形式層に近い言語層」の定義は

 

\begin{array}{ccl} A⇒B && Aが真の場合に限りBを真と保証する \\ \\ A\vDash B && Aの保証によりB は真と確定される \\ \\ A⇔B && Aという記号をBと定義する \end{array}

 

このようになっています。

(健全性定理などの運用段階では形式層に限定される)

 

 

また振る舞いを再現するための操作許可として

「記号定義 」の形式層における定義で

 

\begin{array}{ccc} 入力 &α変換& 出力 \\ \\ x &↦& y \end{array}

 

α変換(同意味記号入れ替え)」が許容され

 

\begin{array}{ccc} A⇔B &\longrightarrow_*& B⇔A \end{array}

 

その結果として「入れ替え」が許容されます。

(これが許されないというのは実際の観察に違反する)

 

 

 

 

 

含意と保証メタ記号

 

以上のメタ記号により

 

\begin{array}{ccc} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \end{array}

 

「含意 \to 」はこのように定義されています。

(この場合は含意 \to が定義される対象記号になる)

 

 

補足しておくと

これは「含意 \to を定義したい」という動機から

 

\begin{array}{lcl} M,s\vDash φ && 確定でφが真になる \\ \\ M,s\vDash ψ && 確定でψが真になる \end{array}

 

材料の確認

 

\begin{array}{ccc} M,s \vDash (φ\to ψ) &\Longleftrightarrow& ? \\ \\ M,s \vDash (φ\to ψ) &\Longleftrightarrow& (M,s\vDash φ)?(M,s\vDash ψ) \end{array}

 

予想される形を経て

 

\begin{array}{ccc} ? &→& (φ→ψ) \\ \\ φ⇒ψ &→& (φ→ψ) \end{array}

 

「説明のためのメタ記号 」が発想されることで

φ が真なら ψ は真であると保証する)

 

\begin{array}{ccc} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \end{array}

 

結果的に得られるものになります。

(含意 \to を定義したいという動機から は発想される)

 

 

 

 

 

述語論理公理検証のための方向性

 

確認しておくと

 

\begin{array}{lc} 具体化 && \forall x \,\, φ(x) &\to& φ(t/x) \\ \\ 存在宣言 && φ(t/x) &\to& \exists x \,\, φ(x) \end{array}

 

示したいのはこれが「真になる」ことで

t/xtx代入されたことを表す記号)

 

\begin{array}{lcl} M,s \vDash \forall x \,\, φ(x) \\ \\ M,s(x\rightharpoonup c) \vDash φ が全てのc\in |M| で成立する\\ \\ \\ M,s \vDash \exists x \,\, φ(x) \\ \\ M,s(x\rightharpoonup c) \vDash φ を満たすc\in |M|が存在する \end{array}

 

それを示すための材料となる

「量化子の定義」はこんな感じになります。

(量化子の記号的振る舞いと自然言語の接続部分)

 

 

 

 

 

代入規則と基礎定義

 

ここから目的の形を求めるために

 

\begin{array}{ccc} M,s(x\rightharpoonup c)\vDash φ &\Longleftrightarrow& M,s\vDash φ(c/x) \end{array}

 

代入規則」により許可される操作と

(真理値割り当て s のモデル上での記号操作定義)

 

\begin{array}{ccc} M,s \vDash \forall x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が全てのc\in |M| で成立する \\ \\ \Downarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が特定のc\in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ \end{array}

 

「量化子の振る舞い」により定義される操作を

(この自然言語と記号の接続が数学の最も基礎的な定義)

 

\begin{array}{ccc} M,s \vDash \exists x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が成立する c\in |M| が存在する \\ \\ \Uparrow \\ \\ M,s(x\rightharpoonup c) \vDash φ という関係が c \in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ \end{array}

 

それぞれ「自然言語」と「記号」に分けて定義します。

(ここで言語層と形式層を明確に分離する)

 

 

 

 

 

全称量化の検証

 

以上を踏まえると

 

\begin{array}{ccc} M,s(x\rightharpoonup c)\vDash φ &\Longleftrightarrow& M,s\vDash φ(c/x) \\ \\ M,s\vDash (φ\rightharpoonup ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \end{array}

 

後は「代入規則」と「含意」の定義を用いれば

 

\begin{array}{ccc} M,s \vDash \forall x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が全てのc\in |M| で成立する \\ \\ \Downarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が特定のc\in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ \\ \\ \Updownarrow \\ \\ M,s\vDash φ(c/x) \end{array}

 

「自然言語の定義と記号定義を並び替える」形で

の関係にあるものは入れ替え可能)

 

\begin{array}{ccc} M,s \vDash \forall x \,\, φ(x) &\Longrightarrow& M,s\vDash φ(c/x) \end{array}

 

この形と「含意」の定義から

 

\begin{array}{ccc} M,s &\vDash &\forall x \,\, φ(x) &\to & φ(c/x) \end{array}

 

こうなるということが分かります。

(やってることは必要な記号操作の定義とその整理)

 

 

 

 

 

量化子と変数パターン

 

「定数」パターンは分かりましたが

 

\begin{array}{ccc} φ(t/x) & \left\{ \begin{array}{lcc} φ(c/x) && 定数パターン \\ \\ φ(y/x) && 変数パターン \end{array} \right. \end{array}

 

求めたい「項 t 」の形における

「変数」パターンはまだ分かっていません。

 

\begin{array}{ccc} M,s\Bigl( x\rightharpoonup s(y) \Bigr) \vDash φ &\Longleftrightarrow& M,s\vDash φ(y/x) \end{array}

 

これはこの「記号変換定義」を用いることで

(変数割り当て ss(y)=c も意味する)

 

\begin{array}{ccc} M,s \vDash \forall x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup s(y)) \vDash φ が全てのs(y)\in |M| で成立する \\ \\ \Downarrow \\ \\ M,s(x\rightharpoonup s(y)) \vDash φ が特定のs(y)\in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s\Bigl( x\rightharpoonup s(y) \Bigr) \vDash φ \\ \\ \Updownarrow \\ \\ M,s\vDash φ(y/x) \end{array}

 

示すことができますが

 

\begin{array}{ccc} s(y)&=&c \\ \\ y&=&x \end{array}

 

α 変換である」という注釈が必要だったり

『変数割り当て s がどうなってるか』など

厳密にはきちんと考える必要があります。

 

 

 

 

 

変数割り当ての考察と修正

 

「定数出力」の関数 σ を考えて

(関数 σ(y)y を先に定数 c にする処理)

 

\begin{array}{lcl} σ(x)&\Longleftrightarrow& 変数xを引数とする関数σの出力は定数 \\ \\ σ(y)&\Longleftrightarrow& 変数yを引数とする関数σの出力は定数 \end{array}

 

「変数割り当て s 」の振る舞いを整理すると

 

\begin{array}{lclcl} M,s &\to_*& M,s,σ &\overset{出力が定数記号なら}{\longrightarrow_*}& M,s \\ \\ M,s &\to_*& M,s,σ &\overset{出力が関数記号なら}{\longrightarrow_*}& M,s,σ \end{array}

 

これはけっこう簡潔に説明することができます。

(変数割り当てから定数出力関数 σ を分離)

 

\begin{array}{lcr} s(x\rightharpoonup c) &\Longleftrightarrow& 変数記号xを定数記号cに置換 \\ \\ s(x\rightharpoonup c)\vDash φ &\Longleftrightarrow& φの変数記号xを定数記号cに置換 \end{array}

 

というのも ↑ のように定義すれば

(変数割り当て s は分岐せず関数 σ は先処理)

 

\begin{array}{ccc} M,s \vDash \forall x \,\, φ(x) &\overset{sの定数部分が関数なら}{\longrightarrow_*}& M,s,σ \vDash \forall x \,\, φ(x) \end{array}

 

量化子定義の「定数」「変数」のパターンを

M,\vDash の自然言語定義は「モデル M の基で」)

 

\begin{array}{ll} M,s(x\rightharpoonup c) \vDash φ が&全てのc\in |M| で成立 \\ \\ M,s(x\rightharpoonup σ(y)),σ \vDash φ が & 全てのσ(y)\in |M| で成立\end{array}

 

『記号表現のみ』で分離できるので

( ↑ の証明も記号を変えるだけで良い)

 

\begin{array}{lcl} M,s\Bigl( x\rightharpoonup s(y) \Bigr) \vDash φ &\Longleftrightarrow& M,s\vDash φ(y/x) \\ \\ M,s\Bigl( x\rightharpoonup σ(y) \Bigr),σ \vDash φ &\Longleftrightarrow& M,s,σ\vDash φ(y/x) \end{array}

 

従来の「曖昧な変数割り当て」より

単純かつ自然な形で量化子定義に接続できます。

(これで s の曖昧で複雑な分岐定義を排除できる)

 

 

 

 

 

存在量化と検証

 

以上の整理と同様に

 

\begin{array}{lcl} M,s(x\rightharpoonup c) \vDash φ &\Longleftrightarrow& M,s\vDash φ(c/x) \\ \\ M,s(x\rightharpoonup σ(y)),σ \vDash φ &\Longleftrightarrow& M,s,σ\vDash φ(y/x) \end{array}

 

こちらもほぼ同じ手順を用いれば

(この変形は全称量化と共通)

 

\begin{array}{ccc} M,s,σ \vDash \exists x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ が成立する c\in |M| が存在する \\ \\ \Uparrow \\ \\ M,s(x\rightharpoonup c) \vDash φ という関係が c \in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup c) \vDash φ \\ \\ \Updownarrow \\ \\ M,s\vDash φ(c/x) \end{array}

 

定数パターンの定義と

 

\begin{array}{ccc} M,s,σ \vDash \exists x \,\, φ(x) \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup σ(y)),σ \vDash φ が成立する σ(y)\in |M| が存在する \\ \\ \Uparrow \\ \\ M,s(x\rightharpoonup σ(y)),σ \vDash φ という関係が σ(y) \in |M| で成立する \\ \\ \Updownarrow \\ \\ M,s(x\rightharpoonup σ(y)),σ \vDash φ \\ \\ \Updownarrow \\ \\ M,s,σ\vDash φ(y/x) \end{array}

 

変数パターンの定義から

 

\begin{array}{lcl} M,s,σ\vDash φ(c/x) &⇒& M,s,σ \vDash \exists x \,\, φ(x) \\ \\ M,s,σ\vDash φ(y/x) &⇒& M,s,σ \vDash \exists x \,\, φ(x) \end{array}

 

こうなることが分かるので

 

\begin{array}{lcl} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \\ \\ M,s,σ\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s,σ\vDash φ) ⇒( M,s,σ\vDash ψ) \Bigr) \end{array}

 

後は含意の定義を用いれば

 

\begin{array}{ccc} φ(t/x) &\to& \exists x \,\, φ(x) \end{array}

 

「存在量化」でも真になると分かることから

最終的に「述語論理公理は真」を得ることができます。

(ややこしいですが根本的にはこの着地からの逆算)

 

 

 

 

 

等号の公理とモデル

 

これもほぼ『記号の定義』です。

 

\begin{array}{cc} && x=x \\ \\ x=y &\to& φ(x)↔ φ(y) \\ \\ x_1=y_1∧\cdots ∧x_n=y_n &\to& R(x_1,...,x_n)=R(y_1,...,y_n) \end{array}

 

これらが『真になるように』定義します。

(これも量化子定義と同様に一種の記号整理)

 

 

 

 

 

真になるように定義する

 

これの具体的な実現方法は

 

\begin{array}{lclcl} && A=B &\Longleftrightarrow& AとBは同じである \\ \\ M & \vDash & A=B &\Longleftrightarrow& AとBは同じである \\ \\ M,s & \vDash & x=A &\Longleftrightarrow& xとAは同じである \end{array}

 

「モデル M 上で定義する」という

『真偽が分かるようになる操作』のことで

(モデル上での定義が無いなら真偽は不明)

 

\begin{array}{lcl} 感覚層 && 一致するという感覚 \\ \\ 言語層 && 同じという自然言語表現の誕生 \\ \\ 形式層 && 同じの統一表現として=を採用 \\ \\ 健全性定理 && モデル上で真偽確定の調整 \end{array}

 

これにより直接的に「等号公理」は証明されます。

(モデルとの対応となる記号操作の定義が証明の本質)

 

 

 

 

 

同一律

 

まず基礎的な部分から

 

\begin{array}{lcl} M\vDash c=c &\Longleftrightarrow& cとcは同じである \end{array}

 

これは最初に定義される部分で

↑ をより一般的にしたものが ↓ になります。

 

\begin{array}{lcl} M\vDash c=c &\Longleftrightarrow& c\in |M| は c\in |M| と同じである \\ \\ M\vDash a=b &\Longleftrightarrow& a\in |M| は b\in |M| と同じである \\ \\ M,s \vDash x=y &\Longleftrightarrow& s(x) \in |M| は s(y) \in |M| と同じである \end{array}

 

これにより「等号 = 」は厳密に定義され

 

\begin{array}{ccc} M,s & \vDash & x=y \end{array}

 

「真確定記号 \vDash 」により

「証明された」という結果が直接与えられます。

(これが正しくない場合「それ自身」という概念さえ使えない)

 

 

 

 

 

同一律と各記号の振る舞い

 

以上の定義と記号の振る舞いから

 

\begin{array}{ccc} M,s⊨f(x)=f(y) \\ \\ \Updownarrow \\ \\ f(s(x))∈|M|はf(s(y))∈|M|と同じである \end{array}

 

「関数」の定義と

(関数記号の自然な振る舞い)

 

\begin{array}{ccc} x=yはf(x)=f(y)を保証する \\ \\ \Updownarrow \\ \\ M,s\vDash x=y \,\, \Longrightarrow \,\, M,s\vDash f(x)=f(y) \end{array}

 

「関数」の「記号操作」

(これが違うというのは現実と不整合)

 

\begin{array}{ccc} M,s⊨x=y \\ \\ \Downarrow \\ \\ \displaystyle \left( \Bigl(M,s⊨φ(x)⇒M,s⊨φ(y) \Bigr) , \Bigl( M,s⊨φ(y)⇒M,s⊨φ(x) \Bigr) \right) \end{array}

 

そしてこの「記号入れ替えの許可」が定義されます。

(意味が変化しない記号変換を含意で分解した形)

 

 

 

 

 

論理式と同値記号

 

これは「同値記号 を定義する」という

 

\begin{array}{ccc} x=y &→& φ(x)↔φ(y) \end{array}

 

「同値関係からの逆算」から得られる公理で

(量化子同様にこれも原型となる記号が出発点)

 

\begin{array}{ccc} M,s⊨φ(x)↔φ(y) \\ \\ \Updownarrow \\ \\ \Bigl( M,s⊨φ(x)→φ(y) \Bigr)∧\Bigl( M,s⊨φ(y)→φ(x) \Bigr) \end{array}

 

この定義から得られる必然的な結果になります。

(やることは記号 の分解と最小限の定義での説明)

 

 

 

 

 

同値記号 の定義と公理の正当化

 

これは「論理積 」の定義と

(「カンマ , 」は一貫して『記号を区切る記号』です)

 

\begin{array}{lcc} M,s\vDash φ∧ψ &\Longleftrightarrow& M,s\vDash φ かつ M,s\vDash ψ \\ \\ && \Updownarrow \\ \\ M,s\vDash φ,ψ &\Longleftrightarrow& M,s の基で φ と ψ の真が確定される \end{array}

 

「含意 \to 」の定義

 

\begin{array}{lcl} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \\ \\ M,s,σ\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s,σ\vDash φ) ⇒( M,s,σ\vDash ψ) \Bigr) \end{array}

 

そして「許可されるべき記号操作」から

 

\begin{array}{ccc} M,s⊨x=y \\ \\ \Downarrow \\ \\ \displaystyle \left( \Bigl(M,s⊨φ(x)⇒M,s⊨φ(y) \Bigr) , \Bigl( M,s⊨φ(y)⇒M,s⊨φ(x) \Bigr) \right) \\ \\ \Updownarrow \\ \\ \Bigl(M,s⊨φ(x)→φ(y) \Bigr) , \Bigl( M,s⊨φ(y)→φ(x) \Bigr) \\ \\ \Updownarrow \\ \\ \Bigl(M,s⊨φ(x)→φ(y) \Bigr) ∧ \Bigl( M,s⊨φ(y)→φ(x) \Bigr) \\ \\ \Updownarrow \\ \\ M,s⊨φ(x)↔φ(y) \end{array}

 

各記号操作を適用する形で

(厳密にはこうなるよう着地を分解して設計されてる)

 

\begin{array}{rcr} M,s⊨x=y &\Longrightarrow& M,s⊨φ(x)↔φ(y) \\ \\ M,s⊨x=y &\to& φ(x)↔φ(y) \end{array}

 

これは必然的に証明されます。

(量化子と同様に記号整理のチェック)

 

 

 

 

 

関係記号と複数引数

 

等号公理の3つ目である ↓ も

 

\begin{array}{ccc} x_1=y_1∧\cdots ∧x_n=y_n &\to& R(x_1,...,x_n)=R(y_1,...,y_n) \end{array}

 

感覚的な定義であるこれを分解する形で

 

\begin{array}{ccc} M,s\vDash x_1=y_1∧\cdots ∧x_n=y_n \\ \\ \Updownarrow \\ \\ M,s\vDash (x_1=y_1),\cdots ,(x_n=y_n) \\ \\ \Downarrow \\ \\ ? \\ \\ \Updownarrow \\ \\ M,s\vDash R(x_1,...,x_n)=R(y_1,...,y_n) \end{array}

 

その正当性を定義することができます。

(間を埋めるための許可すべき定義を探る)

 

 

 

 

 

関数の帰納ステップ

 

これは関数の定義から

(より広範囲には写像の定義から)

 

\begin{array}{ccc} x=yはf(x)=f(y)を保証する \\ \\ \Updownarrow \\ \\ M,s\vDash x=y \,\, \Longrightarrow \,\, M,s\vDash f(x)=f(y) \end{array}

 

「引数を増やす」時の操作を考えると

 

\begin{array}{ccc} M,s⊨x_1=y_1∧x_2=y_2 \Longrightarrow M,s⊨f(x_1,x_2)=f(y_1,y_2) \\ \\ \Updownarrow \\ \\ M,s⊨x_1=y_1,x_2=y_2 \Longrightarrow M,s⊨f(x_1,x_2)=f(y_1,y_2) \\ \\ \Updownarrow \\ \\ ? \end{array}

 

ちょっとややこしいですが

↑ を正当化するような

 

\begin{array}{lcl} M,s⊨x_1=y_1 &\Longrightarrow& M,s⊨f(x_1,c_2)=f(y_1,c_2) \\ \\ M,s⊨x_2=y_2 &\Longrightarrow& M,s⊨f(c_1,x_2)=f(c_1,y_2)\end{array}

 

1引数のパターンに寄せた記号操作として

( ↑ を , で区切るのが正確な表記だが長いので縦置き)

 

\begin{array}{ccc} \left( \begin{array}{lcl} M,s⊨x_1=y_1 &\Longrightarrow& M,s⊨f(x_1,c_2)=f(y_1,c_2) \\ \\ M,s⊨x_2=y_2 &\Longrightarrow& M,s⊨f(c_1,x_2)=f(c_1,y_2)\end{array} \right) \\ \\ \Updownarrow \\ \\ M,s⊨x_1=y_1,x_2=y_2 \Longrightarrow M,s⊨f(x_1,x_2)=f(y_1,y_2) \end{array}

 

このような「許可すべき操作」が抽出できます。

(この操作により帰納的定義が可能となる)

 

 

この結果として

 

\begin{array}{ccc} \left( \begin{array}{lcl} M,s⊨x_1=y_1 &\Longrightarrow& M,s⊨f(x_1,...,c_n)=f(y_1,...,c_n) \\ \\ M,s⊨x_2=y_2 &\Longrightarrow& M,s⊨f(c_1,...,c_n)=f(c_1,...,c_n) \\ \\ &\vdots \\ \\ M,s⊨x_n=y_n &\Longrightarrow& M,s⊨f(c_1,...,x_n)=f(c_1,...,y_n) \end{array} \right) \\ \\ \Updownarrow \\ \\ M,s⊨x_1=y_1,...,x_n=y_n \Longrightarrow M,s⊨f(x_1,...,x_n)=f(y_1,...,y_n) \end{array}

 

このような一般化が可能になるため

k 番目から k+1 番目を作れる)

 

\begin{array}{ccc} M,s⊨x_1=y_1,...,x_n=y_n & \Longrightarrow & M,s⊨f(x_1,...,x_n)=f(y_1,...,y_n) \end{array}

 

この操作の正しさが保証されます。

(この許可が無い場合 n 引数の関数は未定義記号)

 

 

 

 

 

述語でも同様

 

「関数」で定義したように

 

\begin{array}{ccc} \left( \begin{array}{lcl} M,s⊨x_1=y_1 &\Longrightarrow& M,s⊨P(x_1,...,c_n)=P(y_1,...,c_n) \\ \\ M,s⊨x_2=y_2 &\Longrightarrow& M,s⊨P(c_1,...,c_n)=P(c_1,...,c_n) \\ \\ &\vdots \\ \\ M,s⊨x_n=y_n &\Longrightarrow& M,s⊨P(c_1,...,x_n)=P(c_1,...,y_n) \end{array} \right) \\ \\ \Updownarrow \\ \\ M,s⊨x_1=y_1,...,x_n=y_n \Longrightarrow M,s⊨P(x_1,...,x_n)=P(y_1,...,y_n) \end{array}

 

同様の手順を辿れば

(1つの引数だけ入れ替えて他は定数)

 

\begin{array}{ccc} M,s⊨x_1=y_1,...,x_n=y_n & \Longrightarrow & M,s⊨P(x_1,...,x_n)=P(y_1,...,y_n) \end{array}

 

「述語」についても定義することができます。

(これが「関係」の具体的な中身になる)

 

 

 

 

 

関係の複数引数での公理

 

以上より

「この定理での関係」は「述語」のことなので

 

\begin{array}{ccc} M,s⊨x_1=y_1,...,x_n=y_n & \Longrightarrow & M,s⊨R(x_1,...,x_n)=R(y_1,...,y_n) \end{array}

 

これが定義できたことから

(定数パターンは引数 0 とする)

 

\begin{array}{ccc} M,s⊨x_1=y_1,...,x_n=y_n \,\, \Longrightarrow \,\, M,s⊨R(x_1,...,x_n)=R(y_1,...,y_n) \\ \\ \Updownarrow \\ \\ M,s⊨x_1=y_1∧...∧x_n=y_n \,\, \Longrightarrow \,\, M,s⊨R(x_1,...,x_n)=R(y_1,...,y_n) \\ \\ \Updownarrow \\ \\ M,s\vDash x_1=y_1∧...∧x_n=y_n → R(x_1,...,x_n)=R(y_1,...,y_n) \end{array}

 

「等号の公理」は真であると言えます。

(以上でHilbert健全性定理の核は示されたと言える)

 

 

 

 

 

\mathrm{MP} は真保存である

 

これについては

 

\begin{array}{ccc} \left. \begin{array}{lcc} M,s\vDash φ \\ \\ M,s\vDash φ\to ψ \end{array} \right\} &\to_*& M,s\vDash ψ \end{array}

 

要はこういう話なんですが

 

\begin{array}{ccc} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) ⇒( M,s\vDash ψ) \Bigr) \end{array}

 

これは「含意の定義」から

 

\begin{array}{ccl} A⇒B && Aが真の場合に限りBを真と保証する \\ \\ A\vDash B && Aの保証によりB は真と確定される \\ \\ A⇔B && Aという記号をBと定義する \end{array}

 

記号の意味を確認していくと

 

\begin{array}{ccc} M,s\vDash (φ\to ψ) &\Longleftrightarrow& \Bigl( (M,s\vDash φ) &⇒&( M,s\vDash ψ) \Bigr) \\ \\ 真確定 && 真確定 && ? \end{array}

 

『真と保証される』という形で

 

\begin{array}{ccc} (M,s\vDash φ) ⇒( M,s\vDash ψ) は全体が真確定 \\ \\ M,s\vDash φは真確定 \\ \\ M,s\vDash φが真確定なのでM,s\vDash ψは真だと保証される \end{array}

 

すぐに導くことができます。

(全体が真確定なので「保証される」も真確定になる)

 

 

 

 

 


\mathrm{Gentzen} 健全性定理

 

|| LKの推論規則から見た健全性定理

「真仮定論理式記号」と「LKの推論規則」での話

 

\begin{array}{lcl} 発想段階 && 証明とは→_*真仮定記号+記号規則 \\ \\ 整理段階 && 材料(真仮定記号)+操作(記号規則) \\ \\ 検証段階 && 操作は真保存? \end{array}

 

証明の概形はこんな感じです。

(真仮定記号なので真かどうかの確認は不要)

 

 

 

 

 

LKの推論規則における証明とは

 

これは「実際の証明」を厳密にしたもので

 

\begin{array}{lcl} 証明開始 && 全ての前提と結論を確認 \\ \\ 目標設定 && 規則適用により前提を結論に繋げる \\ \\ \\ 選出 && 使いたい前提を選ぶ \\ \\ 導出 && 取り出した前提に規則を適用 \\ \\ 追加 && 得られたものを前提に追加 \\ \\ 繰り返し && 結論に繋がるまで繰り返す \\ \\ \\ 最終確認 && 証明文全体を作りたい \\ \\ 記号整理 && 得られた真論理式を追加・並び替え \\ \\ 証明完成 && 証明全体が完成する \end{array}

 

ここではこのような手順に分解されています。

(根本的には実際に行う証明の話でこれはその中身)

 

 

 

 

 

記号と要請

 

「真と仮定されている」などの

『記号の定義』については

 

\begin{array}{lcl} M && Mはモデル \\ \\ \,s && sは変数割り当て \\ \\ \,, && ,は異なる記号を区切る \\ \\ \,Γ && Γは0個以上の真仮定論理式の有限列 \\ \\ \,Δ && Δは1個以上の真仮定論理式の有限列 \\ \\ \\ M,s⊨Γ &\Longleftrightarrow& M,s上でΓの各論理式は真 \\ \\ M,s⊨Δ &\Longleftrightarrow& M,s上でΔの各論理式は真 \end{array}

 

このような「記号への要請」という形で

Γ,Δ は集合としての定義も見ますが厳密には不適切)

 

\begin{array}{ccc} Γ\vdash Δ && Γ\vdash Δ は推件式 \end{array}

 

「自然言語定義」が与えられているので

(任意性での定義も見ますがそちらも厳密には不適切)

 

\begin{array}{ccc} 要請 && 確認 \\ \\ Mはモデルであるべき &\to& Mの性質確認 \end{array}

 

これに当てはまらないものは要請段階で弾かれます。

(つまり要請により記号の中身は縛りを受ける)

 

 

補足しておくと

 

\begin{array}{ccl} A && Aは真と仮定される論理式 \\ \\ B && Bは真と仮定される論理式 \\ \\ &\vdots \\ \\ φ && φは真と仮定される論理式 \\ \\ ψ && ψは真と仮定される論理式 \\ \\ &\vdots \end{array}

 

「論理式を表現する記号」については

「採用」の段階で個人の選択が必要になります。

(これらは実際に真かどうかは考慮されない)

 

 

 

 

 

要請的定義の解釈と許可される操作

 

記号定義において

 

\begin{array}{lcl} M && Mはモデル \\ \\ \,s && sは変数割り当て \\ \\ \,, && ,は異なる記号を区切る \\ \\ \,Γ && Γは0個以上の真仮定論理式の有限列 \\ \\ \,Δ && Δは1個以上の真仮定論理式の有限列 \\ \\ \\ M,s⊨Γ &\Longleftrightarrow& M,s上でΓの各論理式は真 \\ \\ M,s⊨Δ &\Longleftrightarrow& M,s上でΔの各論理式は真 \end{array}

 

このように定義されていることから分かるように

 

\begin{array}{lcl} Γの中の論理式ψ &\Longleftrightarrow& ψは真と仮定される論理式 \\ \\ Δの中の論理式φ &\Longleftrightarrow& φは真と仮定される論理式 \end{array}

 

『真仮定論理式記号 ψ,φ 』は

 

\begin{array}{ccc} 導出されたφ &\Longleftrightarrow& φは真仮定論理式記号 \end{array}

 

「いつでも使える前提」として機能します。

(結論側も前提として扱えるようになる)

 

 

 

 

 

推件式とメタ的意味への接続

 

この定理の核は

『実際の推論で観察できる』 ↓ の接続で

 

\begin{array}{lccc} 形式層 && Γ\vdash Δ \\ \\ && \Updownarrow \\ \\ 言語層 && 初期推件式から規則適用でΔへ至る \\ \\ && \Updownarrow \\ \\ 言語層 && 公理系Γに規則を適用してΔを導ける \\ \\ && \Downarrow \\ \\ 言語層 && (Γが真)から(Δが真)を導ける \\ \\ && \Updownarrow \\ \\ 言語層 && (Γが真確定)は(Δが真確定)を保証する \\ \\ && \Updownarrow \\ \\ 形式層 && M,s\vDash Γ \,\, \Longrightarrow \,\, M,s\vDash Δ \\ \\ && \Updownarrow \\ \\ 形式層 && Γ\vDash Δ \end{array}

 

この「接続の定義(自然言語の解釈部分)」により

(各記号は要請的定義により固定されている)

 

\begin{array}{ccc} Γ\vdash Δ &\Longrightarrow& Γ\vDash Δ \end{array}

 

「健全性」の確認が行われます。

(この接続が無い場合は結論 Γ\vDash Δ に繋がらない)

 

 

 

 

 

推件式計算と定義の接続

 

「推件式の計算」における上と下

推件式の詳細についてはこの記事では語りません)

 

\begin{array}{ccc} 証明計算 && \displaystyle \frac{上の推件式から}{下の推件式が得られる} \end{array}

 

この位置についての定義は

(この記号操作はシークエント計算とも呼ばれる)

 

\begin{array}{ccc} 保証記号 & 上の推件式&⇒&下の推件式 \\ \\ & 記号操作前 && 記号操作後 \end{array}

 

こういったメタ記号によって定義することができます。

(構造規則を推件式に繋げたいという動機から得られる)

 

 

 

 

 

初期推件式と同一律

 

「初期推件式」というのは

\mathrm{Gentzen} 健全性定理の出発点になるもので

 

\begin{array}{ccc} 同一律 && \displaystyle \frac{}{A\vdash A} \end{array}

 

この「 A\vdash A 」がそれに当たります。

A が真ならもちろん A が真は導ける)

 

\begin{array}{ccc} \displaystyle \frac{根拠無し}{(A が真)から (Aが真)は証明できる} \end{array}

 

これを「無条件に正しい」とすることで

『証明の最小単位』が得られる感じです。

(初期推件式のみ上の推件式を必要としない)

 

 

 

 

 

証明の概形

 

\mathrm{Gentzen} 健全性定理」の証明は

 

\displaystyle \frac{}{A\vdash A}

 

「同一律」の推件式に対して

「弱化規則」のような記号操作を適用することや

 

\begin{array}{ccc} \displaystyle \frac{A\vdash A}{A,B\vdash A} && \displaystyle \frac{A\vdash A}{A\vdash A,B} \end{array}

 

『論理記号の定義』を用いることで

 

\begin{array}{ccl} \displaystyle \frac{A,B\vdash A}{A∧B\vdash A} \end{array}

 

着地となる「規則」の形へ持っていく作業です。

(これもHilbert健全性定理と同様に結論からの逆算)

 

 

なので型としては

 

\begin{array}{ccl} 同一律&\to_*&許可されるべき記号操作を適用 \\ \\ &\to_*& 論理記号定義で対応付け \end{array}

 

こんな感じのことをすることで健全性は証明されます。

(これにより各規則が定義により証明される)

 

 

 

 

 

証明計算と同一律変形許可

 

「構造規則の原型」を考えると

 

\begin{array}{lcl} 重複省略L && A\vdash A &\Longleftrightarrow& A,A \vdash A \\ \\ 重複省略R && A\vdash A &\Longleftrightarrow& A \vdash A,A \\ \\ \\ 追加L && A\vdash A &\Longrightarrow& A,B\vdash A \\ \\ 追加R && A\vdash A &\Longrightarrow& A\vdash A,B \end{array}

 

このような記号操作も許可されるべきで

(交換は追加の後にしか定義できない)

 

\begin{array}{lcl} A\vdash A ⇔ A,A \vdash A &\Longleftrightarrow& 前件のAの重複は省略可 \\ \\ A\vdash A ⇔ A \vdash A,A &\Longleftrightarrow& 後件のAの重複は省略可 \\ \\ \\ A\vdash A ⇒ A,B \vdash A &\Longleftrightarrow& 前件に真仮定記号Bを追加可 \\ \\ A\vdash A ⇒ A \vdash A,B &\Longleftrightarrow& 後件に真仮定記号Bを追加可 \end{array}

 

それぞれの「自然言語定義」はこのようになっています。

(これらがコンテキストと構造規則の原型になる)

 

 

補足しておくと

 

\begin{array}{lcl} 前件 &\Longleftrightarrow& 記号\vdash の左側 &\Longleftrightarrow& Γ\vdash ΔのΓ \\ \\ 後件 &\Longleftrightarrow& 記号\vdash の右側 &\Longleftrightarrow& Γ\vdash ΔのΔ \end{array}

 

「前件」「後件」の定義はこんな感じです。

(メタ記号の定義なのでこれも本質は自然言語定義)

 

 

 

 

 

部分操作の分離によって基礎を定義

 

ただ ↑ のままでは

 

\begin{array}{lcl} A,A,B&\vdash& A && ? \\ \\ A,B,C&\vdash& B,A,C && ? \end{array}

 

「複数の論理式の変形」に対応していないため

 

\begin{array}{lcl} 重複省略 && A &\Longleftrightarrow& A,A \\ \\ 追加 && A &\Longrightarrow& A,B \end{array}

 

厳密にはこのような形で記号操作を分離する必要があり

(これらを便宜的に部分操作と呼ぶことにする)

 

\begin{array}{ccc} 推件式S &\Longrightarrow& Sに部分操作を適用した推件式 \end{array}

 

このような宣言もまた基礎として定義する必要があります。

(双方向かどうかは部分操作の内容に依存)

 

 

 

 

 

追加における制限

 

また同一律からの定義がそうであるように

 

\begin{array}{ccc} 追加 && A &\Longrightarrow& A,B \end{array}

 

「追加できる記号」には

『推件式で扱うための制約』として

 

\begin{array}{ccc} Bは真仮定論理式記号 &\Longrightarrow& Bは追加可能である \end{array}

 

『真仮定論理式記号である』という制限が付きます。

(これがあることで「導出されたもの」も前提に追加できる)

 

 

 

 

 

基礎定義と入れ替え

 

「追加」が定義された後

 

\begin{array}{ccc} 追加L && A\vdash A &\Longrightarrow& A,B\vdash A \\ \\ 追加R && A\vdash A &\Longrightarrow& A\vdash A,B \end{array}

 

この形に定義されるのが「交換」で

 

\begin{array}{ccc} 交換 && A,B &\Longrightarrow& B,A \end{array}

 

その定義は部分操作としてこのように定義されます。

(基礎定義と同様コンテキストが無い形)

 

\begin{array}{ccc} A,B \Leftrightarrow B,A \\ \\ \Updownarrow \\ \\ 並び変えても証明計算上では違いが無い \end{array}

 

言語層の定義はこんな感じ。

(大前提として「証明である」という要請がある)

 

 

 

 

 

証明の基礎的概形

 

以上をまとめると

 

\begin{array}{lcl} 証明要請定義 && 証明文での記号操作を実現したい \\ \\ \\ 基礎記号定義 && 記号への要請的定義 \\ \\ 推件式定義 && Γ\vdash Δ への要請を定義 \\ \\ 証明計算定義 && 証明計算の上下を⇒で定義 \\ \\ \\ 推件式の定義分離 && 部分操作+推件式同士の関係 \\ \\ 部分操作定義 && 重複排除+追加+交換 \\ \\ 証明計算と推件式 && 操作適用前⇒操作適用後 \\ \\ \\ 基礎定義完了 && 証明計算の記号操作が明確に \end{array}

 

「証明計算」の記号操作は

このような形で保証されていることがわかります。

 

 

 

 

 

記号規則の概形

 

「証明計算」の概形がまとまったので

 

\begin{array}{c} \displaystyle \frac{L,A,B,R\vdash Δ}{L,B,A,R\vdash Δ}(\mathrm{PL}) & \displaystyle \frac{Γ\vdash L,A,B,R}{Γ\vdash L,B,A,R}(\mathrm{PR}) \\ \\ \\ \displaystyle \frac{L,A,A,R\vdash Δ}{L,A,R\vdash Δ}(\mathrm{CL}) & \displaystyle \frac{Γ\vdash L,A,A,R}{Γ\vdash L,A,R}(\mathrm{CR}) \\ \\ \\ \displaystyle \frac{L,A,R\vdash Δ}{L,A,B,R\vdash Δ}(\mathrm{WL}) & \displaystyle \frac{Γ\vdash L,A,R}{Γ\vdash L,A,B,R}(\mathrm{WR}) \end{array}

 

次は本丸となるこれらを整備するために

 

\begin{array}{rcr} Lはコンテキスト &\Longleftrightarrow& Lは0個以上の論理式の有限列 \\ \\ Rはコンテキスト &\Longleftrightarrow& Rは0個以上の論理式の有限列 \end{array}

 

まずは「コンテキスト」について整理してみます。

(構造規則と論理規則で一番謎な部分)

 

 

 

 

 

基礎定義とコンテキスト

 

「構造規則」という着地を目指して

↑ の「追加 \mathrm{ad} (弱化の基礎定義)」を用いると

 

\begin{array}{ccc} \displaystyle \frac{A,B\vdash A}{A,B,C\vdash A}(\mathrm{adL}) &&\displaystyle \frac{A,B\vdash A}{A,B\vdash A,C}(\mathrm{adR}) \end{array}

 

このような操作が可能になることから

 

\begin{array}{ccc} A,B_1,B_2,...,B_n \vdash A,C_1,C_2,...,C_n \end{array}

 

この「任意の真仮定論理式記号」の「追加」

という操作が許可されるので

 

\begin{array}{ccc} 操作しない & 操作する & 操作しない \\ \\ & A & B_1,...,B_{n} \\ \\ A,B_1 ,..., B_{k-1} & B_k & B_{k+1},..., B_n \\ \\ A,B_1 ,..., B_{n-1} & B_n \\ \\ &A& C_1,...,C_n \\ \\ A, C_1,...,C_{k-1} &C_{k} &C_{k+1},...,C_n \\ \\ A, C_1,...,C_{n-1} &C_{n} \end{array}

 

『操作しない真仮定論理式記号の有限列』として

(実際の運用で規則適用外の記号の処理は必要)

 

\begin{array}{ccc} \mathrm{Left} \,\, \mathrm{Context} & 規則適用記号 & \mathrm{Right} \,\, \mathrm{Context} \\ \\ & A & B_1,...,B_{n} \\ \\ A,B_1 ,..., B_{k-1} & B_k & B_{k+1},..., B_n \\ \\ A,B_1 ,..., B_{n-1} & B_n \\ \\ A,B_1 ,..., B_{k-1} & B_k,B_{k+1} & B_{k+2},..., B_n \end{array}

 

コンテキスト」はこのように定めることができます。

(これにより加工済み証明文との対応が取れる)

 

 

またこれに加えて

 

\begin{array}{lcl} 規則適用前 && コンテキストはそのまま \\ \\ 規則適用記号選択 && コンテキストの再定義開始 \\ \\ 規則適用 && 操作対象の記号を変更 \\ \\ 記号整理 && 変更後記号と規則適用外記号 \\ \\ コンテキスト初期化 && コンテキスト記号の中身を空に \\ \\ コンテキスト再定義 && コンテキスト記号の再利用 \\ \\ 規則適用後 && コンテキストの中身も変わる \end{array}

 

『同一視の許可』により

(主な目的は変更しない部分の表記の簡略化)

 

\begin{array}{lcl} L,A,B,R\vdash φ && ここの中身は固定 \\ \\ L,B,A,R\vdash φ && 規則適用後は同一とは限らない \end{array}

 

「同一記号の使用」については

このような形で正当化されます。

(同一視許可が無い場合コンテキストの記号操作は曖昧)

 

 

 

 

 

コンテキストの省略

 

↑ の話に付け加えておくと

 

\begin{array}{ccc} 交換 && A,B &\Longrightarrow& B,A \end{array}

 

「交換 \mathrm{c} 」の部分操作により

 

\begin{array}{ccc} \displaystyle \frac{\displaystyle \frac{A,B,C,D,E \vdash φ }{ A,B,C,E,D \vdash φ }(\mathrm{cL})}{A,B,E,C,D \vdash φ}(\mathrm{cL}) \end{array}

 

「任意の記号」は『左詰め』『右詰め』が可能なので

(統合したいコンテキスト側に寄せられる)

 

\begin{array}{ccc} L,A,R\vdash φ &\Longrightarrow& L,A \vdash φ \end{array}

 

コンテキストはこのように簡略表記することが可能です。

(いずれにせよ『証明では』意味が変わらない)

 

 

 

 

 

コンテキストの解釈

 

感覚的には分かると思うんですが

 

\begin{array}{ccl} コンテキスト &\Longleftrightarrow& 操作対象外の記号の有限列 \\ \\ コンテキスト &\Longleftarrow& 存在はするが省略される部分 \end{array}

 

これは要は「実際の証明」での

『いちいち全ての前提や結論を記述しない』という

(記述しないだけで結論も前提も存在はそのまま)

 

\begin{array}{ccc} 使える部分だけ見る &\to& 新たな結論を得る \end{array}

 

「省略の感覚」を表したものに過ぎません。

(つまり『その時には見ないもの』でしかない)

 

 

「部分操作」における『追加』で

「後から補強できる」ものでしかないため

 

\begin{array}{lcl} 証明開始 && 全ての前提と結論を確認 \\ \\ 目標設定 && 規則適用により前提を結論に繋げる \\ \\ \\ 選出 && 使いたい前提を選ぶ \\ \\ 導出 && 取り出した前提に規則を適用 \\ \\ 追加 && 得られたものを前提に追加 \\ \\ 繰り返し && 結論に繋がるまで繰り返す \\ \\ \\ 最終確認 && 証明文全体を作りたい \\ \\ 記号整理 && 得られた真論理式を追加・並び替え \\ \\ 証明完成 && 証明全体が完成する \end{array}

 

この中身は『形式的な記号操作』上では

「モデル上で真である」なら無くても良いです。

(厳密には結論部分に最低1つは論理式が必要)

 

 

 

 

 

構造規則

 

コンテキスト」が見た目ややこしいですが

「証明計算」が定義できている以上

 

\begin{array}{c} \displaystyle \frac{L,A,B,R\vdash Δ}{L,B,A,R\vdash Δ}(\mathrm{PL}) & \displaystyle \frac{Γ\vdash L,A,B,R}{Γ\vdash L,B,A,R}(\mathrm{PR}) \\ \\ \\ \displaystyle \frac{L,A,A,R\vdash Δ}{L,A,R\vdash Δ}(\mathrm{CL}) & \displaystyle \frac{Γ\vdash L,A,A,R}{Γ\vdash L,A,R}(\mathrm{CR}) \\ \\ \\ \displaystyle \frac{L,A,R\vdash Δ}{L,A,B,R\vdash Δ}(\mathrm{WL}) & \displaystyle \frac{Γ\vdash L,A,R}{Γ\vdash L,A,B,R}(\mathrm{WR}) \end{array}

 

これらは「コンテキスト」「部分操作」の定義により

直ちに『証明される』と言えます。

 

 

 

 

 

論理規則

 

これの証明は

ほぼ「自然言語定義による接続」で

 

\begin{array}{ccc} \mathrm{Not} && \displaystyle \frac{Γ\vdash L,A}{Γ,\lnot A \vdash L}(\mathrm{\lnot L}) & \displaystyle \frac{A,R\vdash Δ}{R\vdash Δ, \lnot A}(\mathrm{\lnot R}) \\ \\ \\ \mathrm{And} && \displaystyle \frac{A,B,R\vdash Δ}{A∧B,R\vdash Δ}(\mathrm{∧L}) & \displaystyle \frac{Γ\vdash L,A \quad Γ\vdash L,B}{Γ\vdash L,A∧B}(\mathrm{∧R}) \\ \\ \\ \mathrm{Or} && \displaystyle \frac{A,R\vdash Δ \quad B,R\vdash Δ}{A∨B,R\vdash Δ}(\mathrm{∨L}) & \displaystyle \frac{Γ\vdash L,A}{Γ\vdash L,A∨B}(\mathrm{∨R}) \\ \\ \\ \mathrm{If} && \displaystyle \frac{R\vdash L,A \quad B,R\vdash L}{A\to B,R\vdash L}(\mathrm{\to L}) & \displaystyle \frac{A,R\vdash L,B}{R\vdash L,A\to B}(\mathrm{\to R}) \end{array}

 

これらはただそれを表現した結果になります。

 

\begin{array}{ccc} \mathrm{All} && \displaystyle \frac{L,P(t)\vdash Δ}{L,\forall x\,\, P(x) \vdash Δ}(\mathrm{\forall L}) & \displaystyle \frac{Γ\vdash L,P(y)}{Γ\vdash L,\forall x \,\, P(x)}(\mathrm{\forall R}) \\ \\ \\ \mathrm{Exist} && \displaystyle \frac{L,P(y)\vdash Δ}{L,\exists x \,\, P(x) \vdash Δ}(\mathrm{\exists L}) & \displaystyle \frac{Γ\vdash L,P(t)}{Γ\vdash L,\exists x \,\, P(x)}(\mathrm{\exists R}) \end{array}

 

なのでこれも確認すべきは「定義」です。

(これらも定義の整理によって示される形)

 

 

 

 

 

論理結合子規則

 

『証明できる』という記述や

「操作しない部分」の記述を省略し

 

\begin{array}{ccc} Γ⊢Δ &\Longleftrightarrow& \left\{ \begin{array}{lcl} Γを前提として使える \\ \\ とするなら(\vdash の自然言語定義) \\ \\ Δ を結論として導ける \end{array} \right. \end{array}

 

『コンテキストは後で追加できる』ことを利用すると

「否定」と「含意L」はいったん置いておくなら

(他と違ってこれらの定義には注意が必要)

 

\begin{array}{ccc} A,B\vdash Δ \\ \\ \Updownarrow \\ \\ A,Bを前提として使える \\ \\ \Downarrow \\ \\ A,Bが両方成立するという前提が使える \\ \\ \Updownarrow \\ \\ A∧B\vdash Δ \end{array}

 

まず「論理積L」はこんな感じで

 

\begin{array}{ccc} Γ_1\vdash A \quad Γ_2\vdash B \\ \\ \Updownarrow \\ \\ AとBが結論として導かれる \\ \\ \Downarrow \\ \\ AとBが両方成立するという結論が導かれる \\ \\ \Updownarrow \\ \\ Γ_1,Γ_2\vdash A∧B \end{array}

 

同様に「論理積R」もこんな感じになります。

Γ は厳密には区別が必要で同一とは限らない)

 

\begin{array}{ccc} A\vdash Δ_1 \quad B\vdash Δ_2 \\ \\ \Updownarrow \\ \\ Aは前提でBも前提 \\ \\ \Downarrow \\ \\ AかBが成立するを前提として使える \\ \\ \Updownarrow \\ \\ A∨B\vdash Δ_1,Δ_2 \end{array}

 

また「論理和L」はこういう感じで

(厳密には追加が適用された上でこの定義が来る)

 

\begin{array}{ccc} Γ\vdash A \\ \\ \Updownarrow \\ \\ Aが結論として導かれる \\ \\ \Downarrow \\ \\ AかBが成立するという結論が導かれる \\ \\ \Updownarrow \\ \\ Γ\vdash A∨B \end{array}

 

A が真仮定論理式である」以上

「論理和R」もまたこんな感じになります。

(こちらも厳密には追加が適用された後に定義される)

 

 

最後、同様に定義すると

 

\begin{array}{ccc} A\vdash B \\ \\ \Updownarrow \\ \\ 前提Aから結論Bが導かれる \\ \\ \Downarrow \\ \\ AならばBが結論として導かれる \\ \\ \Updownarrow \\ \\ A\vdash A\to B \end{array}

 

「含意R」もそのままこんな感じになります。

(感覚的な話をそのまま表現してるだけ)

 

\begin{array}{ccc} \displaystyle \frac{A\vdash B}{A,A\to B\vdash B}(\mathrm{adL}) \end{array}

 

加えてこの「含意R」と「追加」により

\mathrm{MP} の正当性」が定理として与えられます。

(規則により A\to B は真仮定論理式記号になる)

 

 

 

 

 

否定と真仮定

 

これは記号操作と自然言語定義はシンプルなので

 

\begin{array}{ccc} Γ\vdash A,Δ \\ \\ \Updownarrow \\ \\ Aが結論として導かれる \\ \\ \Downarrow \\ \\ Aが導かれないならAは前提として使えない \\ \\ \Updownarrow \\ \\ Γ,\lnot A \vdash Δ \end{array}

 

両者とも「感覚的には明らか」なんですが

 

\begin{array}{ccc} Γ,A\vdash Δ \\ \\ \Updownarrow \\ \\ Aが前提として使える \\ \\ \Downarrow \\ \\ Aが前提として使えないならAは導かれない \\ \\ \Updownarrow \\ \\ Γ\vdash \lnot A,Δ \end{array}

 

「真仮定記号である」という点で

 

\begin{array}{rcr} Aは真と仮定された論理式記号である \\ \\ \lnot Aは真と仮定された論理式記号である \end{array}

 

少し注意が必要になります。

 

 

見てわかる通り

『モデルの中で考える』なら

 

\begin{array}{l} M,s\vDash A &真&偽 \\ \\ M,s\vDash \lnot A & 偽 & 真 \end{array}

 

『否定 \lnot を素直に扱う』場合

これらはこのようになるはず

 

\begin{array}{rcr} Aは真と仮定された論理式記号である \\ \\ \lnot Aは真と仮定された論理式記号である \end{array}

 

しかし「推件式の記号への要請」はこのようになるので

少なくとも『偽と仮定される』ことはありません。

 

 

 

 

 

否定と前件後件入れ替え

 

↑ の話で分かる通り

『否定』の「自然言語的義」については

 

\begin{array}{lcc} \lnot Aは真と仮定された論理式記号である \\ \\ \lnot Aは記号操作の段階では偽にならない \end{array}

 

『形式層での整合性』をとる必要があって

(形式段階では真仮定の要請を満たす必要がある)

 

\begin{array}{ccc} \lnot && 証明計算時点では真偽の入れ替えが起きない \end{array}

 

そのために

『否定記号 \lnot の意味』について

(形式層では『位置入れ替えの履歴』を意味する)

 

\begin{array}{rcr} A & \Longleftrightarrow & 真仮定 \\ \\ M,s \vDash A & \Longleftrightarrow & M,s \not\vDash \lnot A \\ \\ \\ \lnot A & \Longleftrightarrow &真仮定 \\ \\ M,s \vDash \lnot A & \Longleftrightarrow &M,s \not\vDash A \end{array}

 

この形を壊さないように

 

\begin{array}{ccccr} モデル定義前 && \lnot & \Longleftrightarrow & 前件と後件の入れ替え記号 \\ \\ モデル定義後 && \lnot & \Longleftrightarrow & 真偽の入れ替え記号 \end{array}

 

意味をこのように分ける必要があります。

(つまりモデル内でのみ真偽入れ替えを行う)

 

 

補足しておくと

 

\begin{array}{lcl} 0は自然数である && 真になり得る \\ \\ 0は自然数ではない && 真になり得る \end{array}

 

「両方とも真仮定」は一般的にあり得る状態です。

(真偽が確定するモデル内では起き得ない)

 

 

 

 

 

含意Lと真理値

 

最後の「含意L」については

 

\begin{array}{ccc} Γ,A\to B\vdash Δ \\ \\ \Updownarrow \\ \\ A\to Bが前提として使える \\ \\ \Uparrow \\ \\ A\to B と \lnot A ∨ B の真理値は一致する \\ \\ \Uparrow \\ \\ Γ , \lnot A ∨ B \vdash Δ \\ \\ \Uparrow \\ \\ 否定Lと論理和Lを使える \\ \\ \Uparrow \\ \\ Γ\vdash A,Δ \quad B\vdash Δ \\ \\ \Uparrow \\ \\ Γ\vdash A \quad B\vdash Δ \end{array}

 

「直感的意味」ではなく

 

\begin{array}{ccc} A &B& \lnot A & \lnot B & & A→B & \lnot A∨B \\ \\ 1&1&0&0 && 1 & 1 \\ \\ 1&0&0&1 && 0 & 0 \\ \\ 0&1&1&0 && 1 & 1 \\ \\ 0&0&1&1 && 1 & 1 \end{array}

 

『真理値の一致』により結果が与えられていて

 

\begin{array}{ccc} \displaystyle \frac{ \displaystyle \frac{\displaystyle \frac{Γ \vdash A}{Γ \vdash A,Δ}(\mathrm{adR})}{Γ,\lnot A\vdash Δ \quad B\vdash Δ}(\mathrm{\lnot L}) }{Γ, \lnot A∨B\vdash Δ }(\mathrm{∨L}) \end{array}

 

この既存規則による変形と

 

\begin{array}{ccc} モデル内 && A→B &\Longleftrightarrow& \lnot A∨B \\ \\ モデル外 && A→B &\Longleftarrow& \lnot A∨B \end{array}

 

この関係が本体になります。

(モデル内での真理値一致が根拠の入れ替え操作許可)

 

 

 

 

 

量化子規則

 

これらの「代入」周りは面倒ですが

 

\begin{array}{ccc} \mathrm{All} && \displaystyle \frac{L,P(t)\vdash Δ}{L,\forall x\,\, P(x) \vdash Δ}(\mathrm{\forall L}) & \displaystyle \frac{Γ\vdash L,P(y)}{Γ\vdash L,\forall x \,\, P(x)}(\mathrm{\forall R}) \\ \\ \\ \mathrm{Exist} && \displaystyle \frac{L,P(y)\vdash Δ}{L,\exists x \,\, P(x) \vdash Δ}(\mathrm{\exists L}) & \displaystyle \frac{Γ\vdash L,P(t)}{Γ\vdash L,\exists x \,\, P(x)}(\mathrm{\exists R}) \end{array}

 

基本的には直感的な操作です。

(代入周りの話は別記事で詳しく解説)

 

 

 

 

 

量化子と自由変数

 

これは「 P(y) が真仮定である」ことから

 

\begin{array}{ccc} P(y)\vdash Δ &\Longrightarrow& P(y) は真仮定記号である \\ \\ Γ \vdash P(y) &\Longrightarrow& P(y) は真仮定記号である \end{array}

 

「変数のパターン」では

 

\begin{array}{lcl} P(y) &⇒& \forall x \,\, P(x) \\ \\ P(y) &⇒& \exists x \,\, P(x) \end{array}

 

これは『必ず成立しなければならない』と言えて

(自然言語定義の接続を考えると)

 

\begin{array}{ccc} 自由変数y+定数c &\Longleftrightarrow& 項t \end{array}

 

「定数でも成立するかどうか」についてだけは

確認が必要な部分になります。

 

 

 

 

 

自由変数パターンの自然言語定義

 

これらは本質的には言い換えに過ぎず

 

\begin{array}{ccc} P(y) \\ \\ \Downarrow \\ \\ P(y)は真仮定論理式記号である \\ \\ \Downarrow \\ \\ yに関係なくP(y)は真仮定である \\ \\ \Downarrow \\ \\ 全てのx でP(x) は成立する \\ \\ \Updownarrow \\ \\ \forall x \,\, P(x) \end{array}

 

「表現する方法」に変化があるだけで

 

\begin{array}{c} P(y) \\ \\ \Downarrow \\ \\ P(y)は真仮定論理式記号である \\ \\ \Downarrow \\ \\ P(y)が真仮定であるためのyが存在しなければならない \\ \\ \Downarrow \\ \\ P(x) が成立するxが存在する \\ \\ \Updownarrow \\ \\ \exists x \,\, P(x) \end{array}

 

『主張の中身』には変化がありません。

(ただし中身に言及している点で明確に役割が異なる)

 

 

 

 

 

定数でも成立するはず

 

「項 t 」の部分はこれを前提としていて

 

\begin{array}{ccc} 自由変数y &\to_*& 項t \\ \\ &\to_*&定数cでも成立 \end{array}

 

まず最初の段階では

「成立するはずだ」という予想が来ます。

 

\begin{array}{ccc} Γ\vdash P(c) \\ \\ \Downarrow \\ \\ P(c)は結論として導かれる \\ \\ \Downarrow \\ \\ P(c)以外で成立するかは分からない \\ \\ × \\ \\ 全てのx でP(x) は成立するが結論として導かれる \\ \\ \Updownarrow \\ \\ Γ\vdash \forall x \,\, P(x) \end{array}

 

しかし「 \forall \mathrm{R} 」を確認してみると

これは明らかに「モデル上では」成立しません。

 

\begin{array}{ccc} Γ\vdash P(c) \\ \\ \Downarrow \\ \\ P(c)は結論として導かれる \\ \\ \Downarrow \\ \\ P(x)が成立するcが存在するが結論として導かれる \\ \\ \Downarrow \\ \\ P(x) が成立するxは存在するが結論として導かれる \\ \\ \Updownarrow \\ \\ Γ\vdash \exists x \,\, P(x) \end{array}

 

逆に「 \exists \mathrm{R} 」では成立すると言えますが

(これの成立のために前提を変化させる必要は無い)

 

\begin{array}{ccc} P(c) \vdash Δ \\ \\ \Downarrow \\ \\ P(c)からΔが導かれる \\ \\ \Downarrow \\ \\ P(c)以外からΔを導けることは保証しない \\ \\ × \\ \\ P(a)でもΔを導ける \\ \\ \Downarrow \\ \\ P(x) が成立するxは存在するが前提として使える \\ \\ \Updownarrow \\ \\ \exists x \,\, P(x) \vdash Δ \end{array}

 

これは「 \exists \mathrm{L} 」では逆の結果になります。

(下の存在論理式が持つ情報は上の具体例より多い)

 

\begin{array}{ccc} P(c) \vdash Δ \\ \\ \Downarrow \\ \\ P(c)からΔが導かれる \\ \\ \Downarrow \\ \\ 前提が増えてもP(c)が前提ならΔは導かれる \\ \\ \Downarrow \\ \\ P(x)が真になるパターンを任意に追加できる \\ \\ \Downarrow \\ \\ cを含む任意の x でP(x) は成立するからΔが導かれる \\ \\ \Updownarrow \\ \\ \forall x \,\, P(x) \vdash Δ \end{array}

 

これも似たような感じになりそうですが

\forall \mathrm{L} 」の方は定数でも成立します。

(構造としては追加を大量に行った形を言い換えただけ)

 

 

まあ要はこういう話で

 

\begin{array}{lcl} P(c) \vdash Δ &\Rightarrow& \forall x \,\, P(x) \vdash Δ && 〇 \\ \\ P(c) \vdash Δ &\Rightarrow& \exists x \,\, P(x) \vdash Δ && △ \\ \\ Γ\vdash P(c) &\Rightarrow& Γ\vdash \exists x \,\, P(x) && 〇 \\ \\ Γ\vdash P(c) &\Rightarrow& Γ\vdash \forall x \,\, P(x) && △ \end{array}

 

「定数でダメな場合」が

『項 t で定義できない』規則になります。

 

 

 

 

 

長くなりましたが

以上で健全性定理の証明は終わりです。