[プログラミング言語とラムダ計算] 1.2〜1.3関係、割り当て、関係

1.2関係

リレーションシップは、要素が順序対で構成されているコレクションです。例えば、我々は定義することができ:各要素は、それ自体に一致するような関係を
図1
ためのバイナリ関係:、我々は通常≡として、<、>∈≡書き込み
ここに画像の説明を挿入します
またはさらに簡単:
ここに画像の説明を挿入します
我々は理解して一度の定義≡を、この関係は、反射的、対称的、推移的であることがわかります。
ここに画像の説明を挿入します
関係が反射的、対称的、推移的である場合、それは同値関係です。

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に安全に最適化します同様に、言語の文法規則により、ある数値を別の数値以外の値に加算できないことが保証されている場合、言語は、加算器を実装するときに、加算のパラメーターが数値であるかどうかをチェックする必要はありません。(加算は指定した値にしか加算できないため)

おすすめ

転載: blog.csdn.net/qq_35714301/article/details/113749338