A.3 Theorie des ensembles
A.3.1 Les types
EORIE DES ENSEMBLES 153
r =p )q r est egal a p impliqueq. L'implication est denie de la m^eme facon que :p _q. r a la valeurvrai si petq ont la valeurvrai ou si p a la valeur faux
r =p ,q r est egal a p equivaut a q. L'equivalence est denie de la m^eme facon que p )q ^q )p. r a la valeurvrai si p et q ont la m^eme valeur
p q :p p ^q p _q p )q p ,q
vrai vrai faux vrai vrai vrai vrai
vrai faux faux faux vrai faux faux
faux vrai vrai faux vrai vrai faux
faux faux vrai faux faux vrai vrai
A.2.2 Quantication
La logique des predicats etend la logique propositionnelle avec la quantication des variables:
8X p quel que soitX, alors p
9X p il existe X pour quep ait la valeur vrai
9
1X p il existe un unique X pour lequel p a la valeur vrai
A.3 Theorie des ensembles
Le langage Z n'est en fait pas base directement sur une theorie des ensembles mais sur les axiomesde Zermelo-Fraenkel,sans l'axiomedu choix et sans le schemade remplacement [Monin96]. Ceci permet d'assurer l'existence d'une classe d'ensembles cloisonnes appeles types. Ces types sont disjoints. Il n'est pas possible de les reunir ou de former un ensemble comportant des individus choisis parmi plusieurs d'entre eux. Il existe cependant quelques operateurs permettant de construire des types composes.
L'utilisation des types dans le langage Z est tres restrictive. Par contre les types per-mettent de verier que les operations sur les ensembles ne sont pas des non sens et ils aident donc a la structuration des specications.
A.3.1 Les types
Les types sont de quatre sortes: les types construits, les types libres, les types de base et les schemas.
Le seul type construit estZ.Nou N
1 ne sont pas des types (bien qu'ils soient reguliere-ment utilises tels quels), mais des sous-ensembles deZ.Rn'est pas non plus un type, bien que certains auteurs proposent de l'inclure dans le langage Z en tant que type construit.
Les types de base permettent de declarer des types sans se soucier de ce que sont reellement les individus (ou presque). Par exemple, si nous voulons utiliser des ensembles de villes et de personnes dans une specication, nous devons declarer les types:
[VILLE;PERSONNE]
Il faut cependant supposer que les individus sont denis de maniere unique. Si nous identions les personnes par leur nom,((dupont ))ne peut representer qu'un seul individu d'un ensemble de type PERSONNE. Il pourrait tout aussi bien representer un individu d'un ensemblede type VILLE, par contre il ne peut pas exister en m^emetemps un individu
((durand ))d'un ensemble de type PERSONNE et un autre d'un ensemble de type VILLE. Les types libres sont des types dont les individus possibles des ensembles de ce type sont enumeres. Par exemple, si nous voulons que les ensembles de villes ne comportent que certaines villes, nous pouvons declarer le type:
Ville ::=Lille jLyonjMarseille jParis jToulouse
Il est egalement possible de construire un type libre a partir d'autres types ou de lui-m^eme ([Spivey94], page 83, pour plus de details):
TypeLibre2 ::= element1jconstr1hhTypeLibre1iijconstr2hhTypeLibre2iij:::
Cette possibilite est tres utile pour decrire des structures recursives tellesque les arbres. Un schema peut egalement^etre utilisse commetype (voir section A.4.4). La declaration d'un type schema consiste a ecrire le schema, comme n'importe quel schema (voir section A.4) pour tout ce qui concerne les schemas).
Un type peut egalement ^etre declare par l'utilisation d'une denition abregee. Elle permet de:
{ redenir un type pour un besoin particulier:
DATE =b N
{ de denir un type en comprehension (voir section sur les ensembles):
A.3. TH
EORIE DES ENSEMBLES 155
{ de denir un type comme le produit cartesien de plusieurs types:
PERSONNE =b NOM PRENOM
A.3.2 Les ensembles
A partir de maintenant, le terme ensemble ne comprendra pas les types presentes pre-cedemment. Un ensemble est une collection d'individus. Tout ensemble ou tout individu doit ^etre declare, c'est a dire type. Par exemple:
durand :PERSONNE signie quedurandest une variable qui prend commeva-leur un individu de type PERSONNE (pour faire plus court, on ecrira plut^ot par la suite: durand est un indi-vidu de typePERSONNE),
homme :PPERSONNE signie quehommeest une variable qui prend commeva-leur un ensemble de type PERSONNE (pour faire plus court, on ecrira plut^ot par la suite: homme est un en-semble de type PERSONNE).
Il existe d'autres declarations possibles:
homme :FPERSONNE signie que homme est un ensemble ni de type
PERSONNE,
homme :P
1PERSONNE signie que homme est un ensemble non vide de type
PERSONNE,
homme :F
1PERSONNE signie quehomme est un ensemble ni non vide de type
PERSONNE.
Un ensemble peut ^etre declare par enumeration: A =b f1;2;3;5;7g signie que l'en-semble A est egal a l'enl'en-semble comprenant les individus 1, 2, 3, 5 et 7. L'enl'en-semble vide peut s'ecrire de deux manieres: ; et fg. En fait, il n'existe pas un seul ensemble vide, mais un par type deni, cependant son ecriture et sa denition sont generiques.
Les individus de type produit cartesien de plusieurs types (X Y) sont appeles des n-uplets. Ils s'ecrivent (x;y;z) (ou x 7!y 7!z, voir section relations), et un n-uplet est ordonne. On appelle couple un n-uplet forme de deux types, triplet un n-uplet forme de trois types, quadruplet un n-uplet forme de quatre types, etc.
Les operateurs habituels d'operation sur les individus et sur les ensembles sont utili-sables en Z. On retrouve ainsi:
x =y l'expression x est egale a l'expressiony x 6=y l'expression x n'est pas egale a l'expressiony a 2A a est un individu de l'ensembleA
a 2= A a n'est pas un individu de l'ensembleA
AB l'ensembleA est un sous-ensemble de l'ensembleB AB A est un sous-ensemble propre de B (AB ^A6=B)
C =A[B l'ensembleC est egal a l'union des ensemblesA etB
C =A\B l'ensembleC est egal a l'intersection des deux ensemblesA et B C =AnB l'ensembleC est egal a la dierence des deux ensemblesAet B
8A;B :PX AnB =fx :X jx 2A^x 2= Bg
B =S
A l'ensembleB est egal a l'union generalisee de l'ensembled'ensemblesA
8A:P(PX) S
A=fx :X j(9S :Ax 2S)g
B =T
A l'ensemble B est egal a l'intersection generalisee de l'ensemble d'en-semblesA
8A:P(PX) T
A=fx :X j(8S :Ax 2S)g
n = #A n est egal a la cardinalite de l'ensembleA (nombre d'individus deA)