私たちは一階言語FOL数学を記述するための言語Mathelを扱います。\(\dagger\)

ライブラリはMathelで記述されており、FOLは他ソフトとの橋渡しとして使用されます。
まずはFOLに焦点をあてて作っていきます。(一般の一階言語については既知とします…)

a1

一般に言語は「単語の列」のうち文法を満たすもので構成されます。
ここでは機械にとって処理しやすいprefix形の文法を採用します。\(\dagger\)

私たちの言語

記号列のうち一定の規則を満たすものをFormといいます。
FOLでは、Formのうち通常使用されるものはs-Formとp-Formです。\(\dagger\)

Formはいくつかの形をとりますが、そのうちの一つにprefix形があります。

wordのgram

prefix Formで使用される記号はwordと呼ばれます。
wordはgramというデータを持ちます。gram は (gram0, gram1) という形になります。
FOLでは次の形になります。
・gram0 … s,p の列か vp
・gram1 … s,p のどれか
また、arity : gram0の長さ、ただし gram0がvp ⇒ arity : q とされます。

var

phpの正規表現に倣ったものを準備します。
数字を[0-9]とします。
ローマ字の小文字を[a-z]、小文字と大文字を[a-zA-Z]とします。
ギリシャ字はローマ字にないもののみ用いられ [greek] とします。\(\dagger\)
0回以上の繰り返しを*、またはを|で表します。

prefix Form

Formは、wordの列で帰納的に作成されます。
・\({\tt w}\)がword[arity : \({\tt n}\)],  \({\tt F}_1,\cdots,{\tt F}_{\tt n}\)がForm ⇒  \({\tt wF}_1\cdots{\tt F}_{\tt n}\)がForm
・\({\tt w}\)がword[arity : q], \({\tt x}\)がvar, \({\tt F}\)がForm ⇒ \({\tt wxF}\)がForm

s-Form, p-Form の細かい規則として、例えば
・\({\tt w}\)がword(s,p),\({\tt S}\)がs-Form ⇒  \({\tt wS}\)がp-Form

a2

prefix形は人間には読みにくいので他の形を導入します。省略表現もできるようにします。
使用される記号が増えます。

wordの表記法

arityが0でないwordは表記法データも持ちます。それは次の2種類のどちらかになります。
 F 結合性(LかR)およびprecedの組
結合性は通常は L です。precedは自然数ですが、大小関係に意味があります。

decent Form

{ } を含むForm

% を ;; に変更すべし

( ) を補わない { } を含むForm

{ } は通常はFormとしての塊を作りますが、稀にその塊を崩すこともあります。
abbrを使用するときは ( ) を補いますが、補わないものは abbr* とされます。

a3

言語の取り扱いで注意すべきものを挙げます。

Formの同値、代入

表記上の注意

メタ自然数の利用

\n+1等も使えるように。xn は x\n に変更すべし。

a4

ここでMathelの正式な作成をします。

一階言語の拡張

Mathelでは使用されるFormにc-Formが加わります。\(\dagger\)
wordのgramも次のように拡張されます。\(\dagger\)

・gram0 … s,c,p の列か vp
・gram1 … s,c,p のどれか
Formを作る規則~代入はFOLと同様です。

FOLとMathelのword

FOLのwordはすべてMathelのwordになります。
FOLのwordはMathelのwordになったとき、稀にgramが変化することがあります。

内包記法によるクラス生成