私たちは、数学を「単なる記号列を変形していくゲーム」とみなします。それを機械に行わせるべく、ルールを決めます。
数学の現場(大学の数学科)で使われる表現を、なるべくそのまま使用できるようにします。

ルールは完全・厳密でなくても機械化できればOKと考えます。また、一部のルールは未完のまま放置されていますし、新しいルールも追加される可能性があります。
web上でクリックすると出てくるものを注釈と言います。クイズなんかもできます。今日は?

記号の列

このシステムでは数学記号の列を扱います。
ほとんどの数学記号は(単独で)tex表記を持ちます。通常、人間が目にするのはtex表記ですが、注釈にtxt(機械への入力時に使用される記号本体)があります。例 \(=\)
tex表記が同じでも異なる記号があります。例 クラスが等しいことを表す \(=\)
tex表記の無い記号も多くあります。

記号列もtex表記およびtxtを持ちます。txtは各記号のtxtをスペースで区切って並べたものです。例 \(x x\)
\((\) \()\) や { } の前後ではスペースを略せます。例 \(( x )\)
tex表記を作るためにしか使用されない記号があります。
\, \; \! はtex表記でスペースを調整します。例 \(x \; x\)
\(x_{1} x_{2} \cdots x_{99}\) なんて表記もできます。

1

一階言語を拡張しFormというものを作ります。Formはいくつかの形をとりますが、機械にとって処理しやすいprefix形と人間にとってまともなdecent形を説明します。

word

prefix Formで使用される記号はwordと呼ばれます。
wordはgramというデータを持ちます。gram は (gram0, gram1) という形になります。
・gram0 … s,c,p の列か vp (vsとかも?)
・gram1 … s,c,p のどれか
また、arity : gram0の長さ、ただし gram0がvp ⇒ arity : q とされます。
word(s,s)は1項関数、word(ss,p)は2項述語、等と呼ばれることもあります。

varは特別なword(,s)で \(x_{0}\)
通常、wordは数学の教科書において次のように「紹介」されます。
word(ss,p) … \(=\)  
word(cc,p) … \(=\)  

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

Formのtex表記は【 】内にされます。
word[arity : 0] はそれだけでFormになります。例 【\(x\)
\([\;]\)を使うときは入れ子列としてみなされるので、例えば 【\(\neg \neg \top\)】\([1][0]\) = \(\neg\)

Formの中でもgramが正しく処理されているものに s-Form, c-Form, p-Form があります。それらの細かい規則として、例えば
・\({\tt w}\)がword(s,p),\({\tt S}\)がs-Form ⇒  \({\tt wS}\)がp-Form
【\(\neg P\)】はp-Formにはなっていません…【\(P\)】はs-Formなので。

wordの表記法

arityが0でないwordは表記法データも持ちます。それは次の3種類のどれかになります。
 F ! 結合性(LかR)およびprecedの組
! は(単独では)表記を持たないことを意味します。結合性は通常は L です。

word紹介時にgram以外では F ! R は明記されます。
word(vp,p) … \(\forall\)  \(\exists\)  \(\)  

precedは大小関係に意味があります。デフォルトでは次の値になります。
 word[gram1 : sかc] … 300
 word[gram0 : s,c以外を含まない、gram1 : p] … 700
 word(vp,p) … 750
さらに
 \(\neg\) … 730
 \(\Rightarrow\) \(\Leftrightarrow\) … 770
 \(,\) \(\mathbin{\rm o\!r}\) … 780
 \(\Longrightarrow\) \(\Longleftrightarrow\) … 790
 \({\bf ,}\) … 800

decent Form

wordと \((\) \(,\) \()\)の列で、読みやすい形を作ります。
word[arity : 2] はinfixにされます。例 【\(P , Q\)
\(\forall\) はinfixにはされません。例 【\(\forall x P\)
表記法がFのword [arity : \(n\)] \({\tt w}\) は【\({\tt w}({\tt x}_1,\cdots,{\tt x}_n)\)】の形で使用されます。
後置もできます?

prefixへの変形によって等しくなることを ≈ で表します。
infixでは\((\;)\)が必要になりますが、precedの差を利用して略せることがあります。
例 【\(x = y \Rightarrow y = x\)】≈【\(( x = y ) \Rightarrow ( y = x )\)
例 【\(P \Rightarrow Q \Longleftrightarrow \neg P \mathbin{\rm o\!r} Q\)】≈【\(( P \Rightarrow Q ) \Longleftrightarrow ( ( \neg P ) \mathbin{\rm o\!r} Q )\)

L結合性でprecedが等しいものは左から読まれます。例 【\(P , Q , R\)】≈【\(( P , Q ) , R\)
\(\forall\) はR結合性で 【\(\forall x \forall y P\)】≈【\(\forall x ( \forall y P )\)
なお、decentでは区別されますが、prefixでは次の同一視をして良いです。
 \(\Rightarrow\)\(\Longrightarrow\)
 \(\Leftrightarrow\)\(\Longleftrightarrow\)

Formの同値

word[arity : q]から始まるFormの中にあるvarは束縛varと言われます。
\(x = y \Rightarrow \forall x ( x = y )\)】の2,3番目の\(x\)は束縛varです。

積分では \(\int f(x)dx=\int f(y) dy\) と\(x\)を\(y\)に替えることができます。
束縛varの名前替えでできるFormはもとのFormと同一視されます。
例 【\(\forall x ( x \in A )\)】=【\(\forall y ( y \in A )\)

詳しい定義は補足のページで。

3

Formのdecent形よりさらに高度な(人間にとってありがたい)形を作ります。
使われる記号が増え、また一つの記号に多様な使い方を与えることも出てきます。

$変数

「記号列の変換の規則」も記号列としてシステムに記述できるようにします。

記号(列)が代入されるものとして $var, $Var, $.var, $..var を導入します。
txtは$で始まり、ローマ字およびそれらに自然数が付いたものになります。tex表記はサンセリフ体です。例 \({\sf a}\) \({\sf A}\) \(\mathop{{\sf a}}\) \(\mathop{{\sf a}}\)

 【\(\neg \neg {\sf P}\)】→【\({\sf P}\)
という規則を【\(\neg \neg \neg Q\)】に適用するとき代入 \(({\sf P}\mapsto \neg Q)\) が計算され【\(\neg Q\)】という結果になります。

規則を使用する際には、$varには1つのvar、$Varには記号列、$.var には word[arity : 1], $..var には word[arity : 2] が代入されます。その他の代入条件が課されることもあります(?)。

abbrによる超decent Form

一定の変形によってdecent Formになるものを超decent Formと言います。
超decent Formのtxtでは、塊を作るために { } が使われます。

decentへの変形にはabbrというデータが使われます。abbrは
 abbr0 ≈ abbr1 ただし、abbr0,abbr1は$列
の形になり、これは「abbr0 を ( abbr1 ) に変形する規則」と捉えられます。( )つける

abbrは次のように「紹介」されます。
abbr …【\(\forall {\sf x} {\sf A} . {\sf P}\)】≈【\(\forall {\sf x} \, ( {\sf x} {\sf A} \Rightarrow ( {\sf P} ) )\)
例 【\(\forall x \in R . \forall x \in S . x \in T\)】≈【\(\forall x \, ( x \in R \Rightarrow \forall x \, ( x \in S \Rightarrow x \in T ) )\)

\(({\sf P})\) の \((\;)\) は必要です。\({\sf P}\)の代入先に \(\Rightarrow\) よりprecedの大きいwordが含まれていても働くように。

abbr*による超decent form

{ } は通常はFormとしての塊を作りますが、稀に塊を崩すこともあります。
( ) を付けずに「abbr0 を abbr1 に変形する規則」と捉えらるものは abbr* とされます。

pileという記号はtex表記が無く、次のabbr*はtex表記からは何が何だか。
abbr* …【\( {\sf X}\)】≈【\({\sf X} , {\sf X}\)
例 【\(x \in y\)】≈【\(x \in y , y \in z\)
precedに注意しなければなりません。
\(x \in y \in z \Longrightarrow P\)】≈【\(( x \in y , y \in z ) \Longrightarrow P\)
\(x \in y \in z \Rightarrow P\)】≈【\(x \in y , ( y \in z \Rightarrow P )\)

特殊表記

超decent Formでは表記が特殊になることが多いです。「一定の形の列」に対して表記が与えられます。
clsは単独では表記無しのword(vp,c)で、次の式の右辺はtex表記できません。
abbr …【\(\{ {\sf X} \mid {\sf P} \}\)】≈ cls $X $P

次の左辺は$Xが表記上消える珍しい例です。
abbr …【\(\{ {\sf T} \mid {\sf P} \}\)】≈【\(\{ {\sf x} \mid \exists {\sf X} \, ( ( {\sf P} ) , {\sf x} = {\sf T} ) \}\)
abbrを使用するとき、abbr0に含まれずabbr1に含まれる$var(例えば上の \({\sf x}\))には適当なvarを代入します。私たちはFormの同値類を見ていることに注意しましょう。
例 【\(\{ x \cup y \mid x \in X , y \in Y \}\)】≈【\(\{ z \mid \exists x , y \, ( x \in X , y \in Y , z = x \cup y ) \}\)

メタ自然数の利用

次の式は正確には無限個のabbrを生成します。
abbr … 【\(\forall {\sf x}_{1} , \cdots , {\sf x}_{\tt n} {\sf P}\)】≈【\(\forall {\sf x}_{1} \cdots \forall {\sf x}_{\tt n} ( {\sf P} )\)
例 【\(\forall x , y \, ( x = y )\)】≈【\(\forall x \, \forall y \, ( x = y )\)

setはFormの中での使用され方でgramが変わるwordで、教科書では word(s\(^{\tt n}\),s)とされています。
abbr … 【\(\{ {\sf X}_{1} , \cdots , {\sf X}_{\tt n} \}\)】≈ set $X1 … $Xn
例えば【\(\{ x , \{ x , y \} \}\)】はs-Formで、現れる2つのsetはword(ss,s)です。