• Aucun résultat trouvé

5 Données dans le SDL

5.2 Le langage de noyau de données

5.2.3 Axiomes

Les axiomes déterminent quels termes représentent la même valeur. A partir des axiomes dans une définition de type de données, on détermine les relations entre les valeurs des arguments et les valeurs des résultats des opérateurs et par là même on donne une signification aux opérateurs. Les axiomes sont donnés soit comme étant des axiomes booléens soit sous la forme d'équations algébriques d'équivalence.

Grammaire abstraite

Equation = Unquantified-equation |

Quantified-equations |

Conditional-equation |

Informal-text

Unquantified-equation :: Term Term Quantified-equations :: Value-name-set

Sort-identifier

Equations

Value-name = Name

Term = Ground-term |

Composite-term |

Error-term

Composite-term :: Value-identifier | Operator-identifier Term+ |

Conditional-composite-term

Value-identifier = Identifier Operator-identifier = Identifier

Ground-term :: Literal-operator-identifier | Operator-identifier Ground-term+ |

Conditional-ground-term

Literal-operator-identifier = Identifier

Les possibilités Conditional-composite-term et Conditional-ground-term dans les règles Composite-term et Ground-term respectivement ne font pas partie du noyau de données, bien que les équations contenant ces termes puissent être

remplacées par des équations sémantiquement équivalentes écrites dans le langage du noyau (voir 5.3.1.6). La possibilité Error-term dans la règle Term ne fait pas partie du noyau de données.

Les définitions de texte informal text et conditional equations sont respectivement données en 2.2.3 et 5.2.4.

Chaque term (ou ground term) dans la liste des termes après un identificateur operator identifier doit avoir la même sorte que la sorte correspondante (position) dans la liste argument list de la signature operator signature.

Les deux termes terms dans une équation unquantified equation doivent être de la même sorte.

Grammaire textuelle concrète

<axioms> ::=

<equation> { <end> <equation>}* [ <end> ]

<equation> ::=

<unquantified equation>

| <quantified equations>

| <conditional equation>

| <informal text>

<quantified equations> ::=

<quantification> ( <axioms> )

<quantification> ::=

for all <value name> { , <value name> }*

in <extended sort>

<unquantified equation> ::=

<term> == <term>

| <Boolean axiom>

<term> ::=

<ground term>

| <composite term>

| <error term>

| <spelling term>

<composite term> ::=

<value identifier>

| <operator identifier> ( <composite term list> )

| ( <composite term> )

| <extended composite term>

<composite term list> ::=

<composite term> { , <term> }*

| <term> , <composite term list>

<ground term> ::=

<literal identifier>

| <operator identifier> ( <ground term> { , <ground term> }* )

| ( <ground term> )

| <extended ground term>

<literal identifier> ::=

<literal operator identifier>

| <extended literal identifier>

Les possibilités axiome <Boolean axiom> de la règle équation <unquantified equation>, terme <error term> et terme

<spelling term> de la règle terme <term>, terme <extended composite term> de la règle terme <composite term>, terme

<extended ground term> de la règle terme <ground term> et identificateur <extended literal identifier> de la règle identificateur <literal identifier> ne font pas partie du noyau de données.

La sorte <sort> dans une <quantification> représente l'identificateur sort identifier dans les équations quantified equations. Le nom <value name> dans une <quantification> représente l'ensemble des noms value name dans les équations quantified equations.

Une liste <composite term list> représente une liste de terme. Un identificateur operator identifier suivi par une liste de terme est un terme composite term seulement si la liste de terme contient au moins un identificateur value identifier.

Un identificateur <identifier> qui est un nom qualifié apparaissant dans un <term> représente:

a) un identificateur operator identifier s'il précède une parenthèse ouverte (ou si c'est un nom <operator name> qui est un nom <extended operator name>) (voir 5.3.1); sinon

b) un identificateur value identifier s'il y a une définition de ce nom dans une <quantification> d'équation

<quantified equation> englobant le terme <term> d'une sorte adaptée à ce contexte; sinon

c) un identificateur literal operator identifier s'il y a un littéral visible portant ce nom d'une sorte adaptée au contexte; sinon

d) un identificateur value identifier qui a une équation quantified equation implicite dans la syntaxe abstraite pour l'équation <unquantified equation>.

Deux occurrences au moins du même identificateur non lié value identifier dans la même équation <unquantified equation>, ou si cette équation est contenue dans une équation <conditional equation>, alors dans cette équation

<conditional equation>, impliquent une quantification.

Un identificateur operator identifier est obtenu à partir du contexte de manière à ce que si le nom <operator name> est surchargé (c'est-à-dire que le même nom <name> est utilisé pour plusieurs opérateurs), il sera alors le nom operator name qui identifie un opérateur visible avec le même nom et les sortes d'argument et sorte résultante cohérente avec l'application de l'opérateur. Si le nom <operator name> est surchargé, il peut être nécessaire d'obtenir les sortes d'argument à partir des arguments et la sorte résultante à partir du contexte afin de déterminer le nom operator name.

Dans une équation <unquantified equation>, ou si cette équation est contenue dans une équation <conditional equation>, alors dans cette équation <conditional equation>, il doit y avoir exactement une sorte pour chaque identificateur de valeur quantifiée implicitement qui soit cohérente avec toutes ses utilisations.

Il doit être possible de lier chaque identificateur <operator identifier> ou identificateur <literal operator identifier> non qualifié à exactement un identificateur operator identifier ou literal operator identifier défini qui satisfait la condition dans la construction dans laquelle l'identificateur <identifier> est utilisé. C'est-à-dire que la liaison doit être unique.

NOTE – A titre de directive: un axiome doit appartenir à la sorte de la définition partielle de type englobante en mentionnant un opérateur ou un littéral avec un résultat de cette sorte ou un opérateur qui a un argument de cette sorte; un axiome ne doit être défini qu'une seule fois.

Sémantique

Chaque équation exprime l'équivalence algébrique de termes. Le membre de gauche et le membre de droite sont supposés être équivalents si bien que chaque fois qu'un terme apparaît, l'autre terme peut lui être substitué. Quand un identificateur de valeur apparaît dans une équation, il peut simultanément être substitué dans cette équation par le même terme pour chaque apparition de l'identificateur de valeur. Pour cette substitution, le terme peut être un terme clos quelconque de la même sorte que l'identificateur de valeur.

Les identificateurs de valeur sont introduits par les noms de valeur dans les équations quantifiées. Un identificateur de valeur est utilisé pour représenter toute valeur de données appartenant à la sorte de la quantification. Une équation est valide si la même valeur est simultanément substituée pour toute occurrence de l'identificateur de valeur dans l'équation quelle que soit la valeur choisie pour la substitution.

Un terme clos est un terme qui ne contient aucun identificateur de valeur. Un terme clos représente une valeur particulière connue. Pour chaque valeur dans une sorte, il existe au moins un terme clos qui représente cette valeur.

Si un axiome quelconque contient un texte informel, l'interprétation des expressions n'est pas forcément définie par le LDS, mais peut être déterminée à partir du texte informel par l'interpréteur. Il est supposé que si un terme informel est spécifié, l'ensemble d'équations est connu comme étant incomplet et par conséquent une spécification formelle complète n'a pas été donnée en SDL.

Un nom de valeur est toujours introduit au moyen d'équations quantifiées dans la syntaxe abstraite, et la valeur correspondante a un identificateur de valeur qui est le nom de la valeur qualifiée par l'identificateur de sorte des équations quantifiées englobantes. Par exemple:

for all z,z in X (for all z in X _ ) introduit un seul identificateur de valeur appelé z de la sorte X.

Dans la syntaxe concrète, il n'est pas permis de spécifier un qualificatif pour des identificateurs de valeur.

Chaque identificateur de valeur introduit au moyen d'équations quantifiées a une sorte qui est la sorte identifiée dans les équations quantifiées par l'identificateur sort reference identifier. La sorte des quantifications implicites est la sorte requise par le ou les contextes d'occurrence de l'identificateur non lié. Si les contextes d'un identificateur de valeur qui a une quantification implicite permettent différentes sortes, l'identificateur est lié à une sorte qui est cohérente avec toutes ses utilisations dans l'équation.

Un terme a une sorte qui est la sorte de l'identificateur de valeur ou la sorte résultante de l'opérateur (littéral).

A moins que l'on puisse déduire à partir des équations que deux termes désignent la même valeur, chaque terme représente une valeur différente.

Exemple 1

for all b in logical (eq(b,b)==T) Exemple 2

neq(T, F)== T; neq(T, T) == F;

neq(F, T)== T; neq(F, F) == F;

Exemple 3

eq(b, b) == T;

eq(F, eq(T, F)) == T;

eq(eq(b, a),eq(a, b)) == T;