1.2関係
リレーションシップは、要素が順序対で構成されているコレクションです。例えば、我々は定義することができ≡:各要素は、それ自体に一致するような関係を
ためのバイナリ関係≡:、我々は通常≡として、<、>∈≡書き込み
またはさらに簡単:
我々は理解して一度の定義≡を、この関係は、反射的、対称的、推移的であることがわかります。
関係が反射的、対称的、推移的である場合、それは同値関係です。
r-関係は次のように定義されます。これは、反射的でも対称的でもなく、推移的でもありません。
新しい関係を定義することができます)(r、制約を追加して)(r reflexive:
この新しい関係はr関係の反射的な閉鎖です。同様に、別の関係を定義して、対称的で転送可能にすることもできます。 。
この≈r関係は)(r関係の対称推移閉包です。これはr関係の反射対称推移閉包です。
1.3課題としての関係
セットB(前の記事を参照)とrの関係についての上記は、プログラミング言語がテキストと関係、より具体的にはセットBとセットの関係rによって定義できることを知っているはずです。
実際、Bは•が「または」であるブール式の構文であり、≈rは同じブール値を持つ式のペアを表していると思われるかもしれません。
実際、上記の制約を使用して、(f•t)≈r(t•t)がfalse v true = true vtrueのようであることを証明できます。
ただし、•がブール値と一致している、またはブール値であるということを直接示すものではありません。それどころか、•の一般性を証明する必要があります。つまり、B1の任意の式に対して、(B1•t)≈rtを確立できます。(結果として、これを行うことはできません。しばらくするとわかります)
言い換えれば、通常、メタ言語インタープリターによって定義されたプログラミング言語と、それが正しいことを確認したい言語との間にいくつかのギャップがあります。さまざまな理由から、言語のプロパティは、計算される値と同じくらい重要です。たとえば、•実際に「または」のように動作する場合、コンパイラは**(B1•t)**をtに安全に最適化します。同様に、言語の文法規則により、ある数値を別の数値以外の値に加算できないことが保証されている場合、言語は、加算器を実装するときに、加算のパラメーターが数値であるかどうかをチェックする必要はありません。(加算は指定した値にしか加算できないため)