INITIALLY
elems = create(0)
MESSAGE ajouter( x: nat )
WHEN (x | 2) & size(domain(elems)) < 100
TRANSITION
elems = bind( x, *elems[x]+1, *elems )
WHEN ~(x | 2)
REPLY EXCEPTION ajout_element_invalide
OTHERWISE
REPLY EXCEPTION maximum_atteint
On pourrait aussi ajouter une pré-condition à faire vérifier par
le client du module:
MESSAGE ajouter( x: nat SUCH THAT 2 | x )
WHEN size(domain(elems)) < max_elems
TRANSITION
elems = bind( x, *elems[x]+1, *elems )
OTHERWISE
REPLY EXCEPTION maximum_atteint
WHEN domain(elems) ~= {}
REPLY( r: nat )
WHERE r = MINIMUM( x: nat SUCH THAT x IN elems :: x )
OTHERWISE
REPLY EXCEPTION dictionnaire_vide
Quant au message present, la valeur booléenne associée à r peut être produite sans problème puisque elems[x] retourne une valeur peu importe x (la valeur par défaut est définie) et qu'on peut toujours comparer deux nat.
elems = {[10, 2], [20, 3]; 0}
vs.
elems = {[10, 1], [20, 4]; 0}
Or, ces deux états ne peuvent pas être distingués l'un de l'autre à l'aide des messages exportés par le module, et ce peu importe les séries de messages qu'on pourrait envoyer à la machine: les messsages present et obtenir_min ne permettent pas de distinguer ces deux états. De plus, si on fait appel à ajouter(x), on aura le même comportement: on obtiendra des états équivalents non-distinguables ou une exception sera générée de la même façon dans les deux cas (si x est nouveau et max_items = 2).
MESSAGE nb_occurences( x: nat )
REPLY( r: nat ) WHERE r = elems[x]
This document was generated using the LaTeX2HTML translator Version 97.1 (release) (July 13th, 1997)
Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -split +0 -auto_navigation biais-s.tex.
The translation was initiated by Tremblay Guy on 3/19/2001