Thmel①
admin
import /common/word_logic.book
1 Thmelの基本
1.1 ヘッダ指定、propと Thm
p-Formの間の推論関係を扱うソフトが
Thmel です。その設定は .thmelファイル に書かれています。
ヘッダで指定しなければ default.thmel が読み込まれます。このBookもそうです。
なおヘッダの
import /common/word_logic は、論理のword(
\(\top\) など)を読み込みます。だからこの Book ではそれらを紹介せずに使えます。
Thmel の定数として
Formel のp-Formを登録したものを
propと言います。
prop \({\tt P}\) とpropの列 \(\Gamma\) に対し \({\tt P}\) ◀ \(\Gamma\) の形のものをThmと言います。\({\tt P}\)をgoal、\(\Gamma\)をsosと言うことがあります。
例えば
\(\top\) ◀ O はThmです。O は空の列です。prop の代わりに式を
`⊤` のように直接書くこともできます(名前の無い prop)。
列が2つ以上のときはソースで
, で区切ります(表示では「,」)。
Thm を査読器が読むときは、各 prop を
Formel で
FCL に変換します(これを Thm の eval と言います)。
Bookにpropを載せるには、ソースに
prop で始まる行を書きます。
DB に登録されてあるものを使う他に、自分で
<- を書いて作ることもできます。
BookにThmを載せるには、ソースに
thm で始まる行を書きます。propを紹介しつつThmまで書いてしまう
prop/thm もあります(ソース133行目など)。
prop \({\tt P}\) が指すp-FormをForm内で使用したいときは @\({\tt P}\) とします。乱用しない方が良いです。
1.2 Thmの変換
ThmをThmに変換することがMatheliaでは重要です。
backendごとに扱える論理が違う(次の節)ので、Thmをそのbackendが扱える言語のThmに変換してから投げるためです。
最も簡単な例として、所属言語の変換を挙げます。
Formは高階{s,c}ソート言語です。それとは別に「高階言語」があるとみなし、Thmの変換
|0 を作ります。
\(\mathcal{T}\)が部分Formとしてc-Formを含んでいなければ \(\mathcal{T}\)
|0 = (\(\mathcal{T}\)を高階言語に自然に翻訳したもの)、そうでなければ \(\mathcal{T}\)
|0 はエラー
高階言語のThmは ◀ ではなく ◁ を使って作ります(説明でしか使わない記号)。また、違う言語であることを明示したいときなどにFormを緑にします。
例 (
\(\top\) ◀ O)
|0 \(=\)
\(\top\) ◁ O
Thm \(\mathcal{T}\)に対して、\(\mathcal{T}\)
|0 の eval は、\(\mathcal{T}\)を eval してから
|0 を計算したものです。
1.3 論理
Thmは形式的なものです。Thmに意味を与えるものを
論理と言います。
Thm \(\mathcal{T}\) を論理 \(\mathbb{L}\) で扱うことができ ◀ を「推論できる」と読めるとき \(\mathcal{T}\) holds in \(\mathbb{L}\) と書きます。
Matheliaでは 高階{s,c}ソート論理 \(\mathbb{L}_{\rm Hsc}\) と 高階論理 \(\mathbb{L}_{\rm H}\) は既知のものとされます。
通常はそれらの部分論理である、一階{s,c}ソート論理 \(\mathbb{L}_{\rm 1sc}\) と 一階論理 \(\mathbb{L}_1\) が使用されます。
なお例えば \(\mathbb{L}_1\) の公理には 等号公理、領域の非空性公理
\(\exists x \, ( x = x )\) が含まれます。
backend が「\(\mathbb{L}\) を判定する」とは「Thm \(\mathcal{T}\) を受け取り、\(\mathcal{T}\) holds in \(\mathbb{L}\) を確かめられたときに 〇 を返す」事です。各backendが判定する論理は
prover+ … \(\mathbb{L}_1\)
vampire+ … \(\mathbb{L}_\mathrm{1sc}\)
satallax+ … \(\mathbb{L}_\mathrm{Hsc}\)
1.4 定理とそのprf
Matheliaでは独自の論理 \(\mathbb{L}_*\) という論理を規定します。\(\mathcal{T}\) holds in \(\mathbb{L}_*\) という形のものを「定理」と呼ぶべきです。
\(\mathcal{T}\)に「gramにcや( )が含まれるword」が出現しなければ、
\(\mathcal{T}\) holds in \(\mathbb{L}_*\) \(\Longleftrightarrow\) \(\mathcal{T}\) holds in \(\mathbb{L}_\mathrm{Hsc}\) \(\Longleftrightarrow\) \(\mathcal{T}\)
|0 holds in \(\mathbb{L}_\mathrm{H}\)
\(\mathcal{T}\)に「gramにcや( )が含まれるword」が出現する場合の規定は 4.book にあります。
BookではThmの後には
prfが書かれます(表示はされないので
prfの議論になったときはソースファイルを見て下さい)。
\(\mathcal{T}\)というThmの後のprfは \(\mathcal{T}\) holds in \(\mathbb{L}_*\) の証明とみなせるものです。
prfはThm査読において査読器に見てもらうものです。 backendの略記法が使用されます:p=
prover+ v=
vampire+ s=
satallax+ h=
hyperionprfには例えば
P ◀ Γ v; という記述がされます。査読器はそれを見ると \({\tt P}\) ◀ \(\Gamma\) を eval し
vampire+ に投げます。
「gramにcや( )が含まれるword」が出現しないThmに対しては、次の略記法が使用されます(ただ所属言語を替えるだけです)。
\({\tt P}\) -| \(\Gamma\) … (\({\tt P}\) ◀ \(\Gamma\))
|0prfには
P -| Γ p; という記述もよくされます。査読器はそれを見ると \({\tt P}\) -| \(\Gamma\) を eval し
prover+ に投げます。
「どういうときにどのbackendに投げるべきか」は、AI用tutorialに実測の例がまとめてあります。