コンピュータ科学において、代数的意味論は、プログラムの動作を定義、指定、推論するために代数的手法を用いるプログラミング言語理論への形式的なアプローチである。これは、代数構造と等式論理を用いてプログラムを分析するための数学的枠組みを提供する公理的意味論の一形態である。[ 1 ] [ 2 ] [ 3 ] [ 4 ]
代数的意味論は、プログラムとデータ型を代数(特定の等式法則を満たす演算を備えた集合からなる数学的構造)として表現します。このアプローチにより、プログラムの特性を数学的推論によって証明可能な代数的特性として扱うことで、ソフトウェアの厳密な形式検証が可能になります。代数的意味論の重要な利点は、プログラムの動作仕様と実装方法を分離できることであり、ソフトウェア設計における抽象化とモジュール性をサポートします。
代数仕様の構文は、(1)データ型と演算記号の形式的なシグネチャを定義すること、(2)集合と関数を通してシグネチャを解釈すること、という2つのステップで定式化されます。
代数仕様のシグネチャは、その形式的な構文を定義します。「シグネチャ」という言葉は、楽譜における「調号」の概念のように使われます。
署名は一連のソートと呼ばれるデータ型のファミリー各セットには、ソートを関連付ける演算記号(または単に記号)を含む集合があります。種類に関連する演算記号の集合を表す種類。
例えば、整数スタックのシグネチャについては、2つのソートを定義します。そして、および以下の演算記号群:
どこ空文字列を表します。
代数ソートと演算記号をセットと関数として解釈します。セットとして解釈されるこれは、ある種の、そして各シンボルで関数にマッピングされますこれは、。
整数スタックのシグネチャに関して、ソートを解釈しますセットとして整数のソートを解釈するセットとして整数スタックの。さらに、演算記号のファミリーを以下の関数として解釈する。
意味論とは、意味や振る舞いを指す。代数的仕様は、対象となるオブジェクトの意味と振る舞いの両方を提供する。
代数仕様のセマンティクスは、条件方程式の形式の公理によって定義される。[ 1 ]
整数スタックのシグネチャに関して、以下の公理が成り立つ。
仕様の数学的意味論(指示的意味論とも呼ばれる)[ 5 ]は、その数学的意味を指します。
代数仕様の数学的意味論は、その仕様を満たすすべての代数のクラスである。特に、Goguen らによる古典的なアプローチ[ 1 ] [ 2 ]では、初期代数(同型を除いて一意) を代数仕様の「最も代表的な」モデルとして採用している。
仕様の操作的意味論[ 6 ]とは、それを計算手順のシーケンスとしてどのように解釈するかを意味する。
基底項とは、変数を含まない代数式と定義する。代数仕様の操作的意味論とは、与えられた等式公理を左から右への書き換え規則として使用し、基底項が正規形(それ以上書き換えが不可能な状態)に達するまで、どのように変換できるかを示すものである。
整数スタックの公理を考えてみましょう。「 」は「 への書き換え」を表します。
代数仕様は、任意の基底項を書き換えても常に同じ正規形になる場合、合流性(チャーチ・ロッサーとも呼ばれる)であると言われます。任意の基底項を書き換えても有限ステップで正規形になる場合、それは停止性であると言われます。代数仕様は、合流性と停止性の両方を満たす場合、正準性(収束性とも呼ばれる)であると言われます。言い換えれば、任意の基底項を書き換えても有限ステップで一意の正規形になる場合、それは正準性であると言えます。
任意の標準的な代数仕様が与えられれば、数学的意味論は操作的意味論と一致する。[ 7 ]
その結果、プログラムの正当性に関する問題に対処するために、正規代数仕様が広く適用されてきた。例えば、多くの研究者が、オブジェクト指向プログラミングにおけるオブジェクトの観測的等価性のテストにこのような仕様を適用している。 1981年から2013年までの主要な研究の歴史的概観を提供する二次資料として、ChenとTse [ 8 ]を参照されたい。