Você está na página 1de 246

MANUEL DE REFERENCE

DU LANGAGE

VERSION 1.8.6

2 MANUEL DE REFERENCE DU LANGAGE B Version 1.8.6 du 26 fvrier 2007

LAtelier B est un produit dvelopp en coopration avec Jean-Raymond ABRIAL. Document tabli par ClearSy

Ce document est la proprit de ClearSy et ne doit pas tre copi, reproduit, dupliqu totalement ou partiellement sans autorisation crite.

Tous les noms des produits cits sont des marques dposes par leurs auteurs respectifs.

Si vous constatez des erreurs ou des imprcisions dans ce document, merci de nous en faire part ladresse suivante : e-mail : maintenance.atelierb@clearsy.com Tl. : (+33) 04.42.37.12.97 Fax : (+33) 04.42.37.12.71 ClearSy Support Atelier B 320, avenue Ampre Les Pliades 3 Bt A 13857 Aix-en-Provence Cedex 3 FRANCE

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Sommaire

SOMMAIRE

SUIVI DES MODIFICATIONS 1 INTRODUCTION 2 CONCEPTS DE BASE


2.1 2.2 2.3 2.4

VI 1 3

Conventions lexicales ..........................................................................................................5 Conventions syntaxiques .....................................................................................................7 La clause DEFINITIONS......................................................................................................8 Rgles de syntaxe utiles ....................................................................................................11

3 TYPAGE
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9

13

Fondements du typage ......................................................................................................13 Les types B ........................................................................................................................14 Typage des donnes abstraites.........................................................................................15 Types et contraintes des donnes concrtes ....................................................................16 Typage des constantes concrtes .....................................................................................20 Typage des variables concrtes ........................................................................................22 Typage des paramtres dentre dopration ....................................................................23 Typage des paramtres de machines ...............................................................................24 Typage des variables locales et des paramtres de sortie dopration.............................24

4 PREDICATS
4.1 4.2 4.3 4.4 4.5 4.6

27

Propositions .......................................................................................................................28 Prdicats quantifis............................................................................................................29 Prdicats dgalit..............................................................................................................30 Prdicats dappartenance ..................................................................................................31 Prdicats dinclusion ..........................................................................................................32 Prdicats de comparaison dentiers...................................................................................33

5 EXPRESSIONS
5.1 5.2 5.3 5.4

35

Expressions primaires........................................................................................................36 Expressions boolennes....................................................................................................38 Expressions arithmtiques.................................................................................................39 Expressions arithmtiques (suite)......................................................................................41

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

ii
5.5 5.6 5.7 5.8 5.9 Expressions de couples .....................................................................................................43 Ensembles prdfinis.........................................................................................................44 Expressions ensemblistes .................................................................................................46 Expressions ensemblistes (suite) ......................................................................................48 Expressions de records .....................................................................................................51

5.10 Ensembles de relations......................................................................................................53 5.11 Expressions de relations....................................................................................................54 5.12 Expressions de relations (suite).........................................................................................57 5.13 Expressions de relations (suite).........................................................................................59 5.14 Expressions de relations (suite).........................................................................................60 5.15 Ensembles de fonctions.....................................................................................................62 5.16 Expressions de fonctions ...................................................................................................64 5.17 Ensembles de suites ..........................................................................................................66 5.18 Expressions de suites ........................................................................................................68 5.19 Expressions de suites (suite) .............................................................................................70 5.20 Ensembles darbres ...........................................................................................................72 5.21 Expressions darbres .........................................................................................................74 5.22 Expressions de nuds darbres ........................................................................................77 5.23 Expressions darbres binaires............................................................................................79

6 SUBSTITUTIONS
6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9

81

Substitution bloc.................................................................................................................84 Substitution identit............................................................................................................85 Substitution devient gal....................................................................................................86 Substitution prcondition....................................................................................................88 Substitution assertion.........................................................................................................89 Substitution choix born.....................................................................................................90 Substitution conditionnelle IF .............................................................................................91 Substitution slection .........................................................................................................93 Substitution condition par cas ............................................................................................94

6.10 Substitution choix non born..............................................................................................96 6.11 Substitution dfinition locale ..............................................................................................97 6.12 Substitution devient lment de.........................................................................................99 6.13 Substitution devient tel que..............................................................................................100 6.14 Substitution variable locale ..............................................................................................101

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Sommaire

iii

6.15 Substitution squencement..............................................................................................102 6.16 Substitution appel dopration..........................................................................................103 6.17 Substitution boucle tant que.............................................................................................105 6.18 Substitution simultane....................................................................................................107

7 COMPOSANTS
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9

109

Machine abstraite.............................................................................................................109 En-tte de composant ......................................................................................................111 Raffinement......................................................................................................................112 Implantation......................................................................................................................114 La clause CONSTRAINTS...............................................................................................116 La clause REFINES .........................................................................................................117 La clause IMPORTS ........................................................................................................118 La clause SEES ...............................................................................................................122 La clause INCLUDES ......................................................................................................126

7.10 La clause PROMOTES ....................................................................................................130 7.11 La clause EXTENDS........................................................................................................132 7.12 La clause USES ...............................................................................................................133 7.13 La clause SETS ...............................................................................................................135 7.14 La clause CONCRETE_CONSTANTS ............................................................................138 7.15 La clause ABSTRACT_CONSTANTS .............................................................................140 7.16 La clause PROPERTIES .................................................................................................142 7.17 La clause VALUES ..........................................................................................................145 7.18 La clause CONCRETE_VARIABLES ..............................................................................152 7.19 La clause ABSTRACT_VARIABLES ...............................................................................154 7.20 La clause INVARIANT .....................................................................................................156 7.21 La clause ASSERTIONS .................................................................................................160 7.22 La clause INITIALISATION ..............................................................................................161 7.23 La clause OPERATIONS .................................................................................................164 7.24 La clause LOCAL_OPERATIONS ...................................................................................172 7.25 Spcificits du B0.............................................................................................................176 7.25.1 Contrle des tableaux en B0 .........................................................................................176 7.25.2 Les termes.....................................................................................................................177 7.25.3 Les conditions................................................................................................................178 7.25.4 Les instructions..............................................................................................................179

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

iv
7.26 Rgles danticollision didentificateurs .............................................................................181

8 ARCHITECTURE B
8.1 8.2 8.3 8.4

185

Introduction ......................................................................................................................185 Module B ..........................................................................................................................185 Projet B ............................................................................................................................187 Librairies...........................................................................................................................190

ANNEXES
ANNEXE A ANNEXE B
B.1

193
MOTS RESERVES ET OPERATEURS GRAMMAIRES 195 201

Grammaire du langage B.................................................................................................201

B.1.1 Axiome .............................................................................................................................201 B.1.2 Clauses ............................................................................................................................201 B.1.3 Termes et regroupement dexpressions ..........................................................................204 B.1.4 Conditions ........................................................................................................................205 B.1.5 Instructions.......................................................................................................................205 B.1.6 Prdicats ..........................................................................................................................206 B.1.7 Expressions......................................................................................................................207 B.1.8 Substitutions.....................................................................................................................212 B.1.9 Rgles de syntaxe utiles ..................................................................................................214 B.2 B.3 Grammaire des prdicats de typage................................................................................215 Grammaire des types B ...................................................................................................216

ANNEXE C
C.1 C.2 C.3 C.4 C.5 C.6 C.7 C.8 C.9

TABLES DE VISIBILITE

217

Visibilit dans une machine abstraite MA .........................................................................217 Visibilit dune machine vue MB par une machine ou un raffinement MA.........................218 Visibilit dune machine incluse MB par une machine ou un raffinement MA ...................218 Visibilit dune machine utilise (USES) MB par une machine MA ...................................218 Visibilit dans un raffinement MN .....................................................................................219 Visibilit dans un raffinement MN par rapport son abstraction MN-1 ..............................219 Visibilit dans une implantation........................................................................................219 Visibilit dans une implantation MN par rapport son abstraction MN-1 ...........................220 Visibilit dune machine vue MB par une implantation MN ................................................220

C.10 Visibilit dune machine importe MB par une implantation MN........................................220

ANNEXE D

RESTRICTIONS DE LATELIER B VERSION 3.7

221

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Sommaire ANNEXE E ANNEXE F GLOSSAIRE INDEX

v 223 229

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

vi

SUIVI DES MODIFICATIONS


Manuel de Rfrence du Langage B version 1.8.6 (Version commerciale livre avec lAtelier B version beta 3.7) Objectif : intgration des remarques pour l'Atelier B v3.7. 1. Suppression de la rfrence aux bijections partielles Manuel de Rfrence du Langage B version 1.8.5 (Version commerciale livre avec lAtelier B version 3.6) Objectif : intgration des remarques pour l'Atelier B v3.6. 2. Prcision concernant le modle quivalent des oprations locales. 3. Restriction concernant lensemble vide. 4. Modification de la syntaxe de la composition de relation et du produit parallle conformment aux analyseurs syntaxique existants. 5. Ajout dune restriction pour lappel dopration x, x c op. Manuel de Rfrence du Langage B version 1.8.4 (Version commerciale livre avec lAtelier B version beta 3.6) Objectif : intgration des remarques des utilisateurs depuis la dernire version commerciale 1.8.1. 6. Contrainte sur les entiers littraux : pointeur dans la partie lexicale sur la partie syntaxique. 7. Correction dans la dfinition de l'oprateur mod. 8. Correction de l'exemple sur l'oprateur puissance. 9. Correction du typage de l'expression rel (R). 10. Correction de la dfinition d'une suite en extension. 11. Correction de la bonne dfinition des oprateurs : first, last, front, tail., q et w et modification de la description de q et w. 12. Correction de la dfinition de rev (S). 13. Correction de la dfinition de j. 14. Modification de la description de l'instruction devient gal . 15. Correction dans la syntaxe du CASE et changement dans l'ordre des productions sur les substitutions. 16. Correction de la bonne dfinition de const (x, q) et de infix (t). 17. Modification de la dfinition de cat. 18. Correction de l'exemple utilisant bin.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Sommaire 19. La clause SETS est interdite au sein d'une dfinition. 20. Suppression de la restriction sur le typage des paramtres ensembles d'une machine. Il suffit d'indiquer que ce sont des types et d'appliquer les rgles de vrification de typage.

vii

21. Mise jour des priorits des oprateurs B donnes en annexe, selon les priorits dfinies dans l'Atelier B. 22. Correction de la dfinition de conc (S). 23. Ajout du type de sizet (t). 24. Ajout de productions grammaticales sur les expressions d'arbres. 25. Correction sur les restrictions d'arbres binaires. 26. Correction sur la dfinition des s ou des p vides. 27. Prcision dans les tables de visibilit sur la nature non homonyme des donnes propres un composant. 28. Correction sur la description de la division entire. 29. Assouplissement de la restriction sur l'appel en parallle de deux oprations d'une machine incluse. : seul l'appel d'oprations de modification est interdit. 30. Prcision sur les arbres : un arbre n'est jamais vide. 31. Ajout de % dans la liste des expressions introduisant des variables quantifies. 32. Changement de syntaxe pour les expressions utilisant plusieurs paramtres. Avant on utilisait une seule expression, sachant que ',' est elle-mme une expression de couple, maintenant on utilise N expressions spares par des ','. 33. Rajout dans terme simple de bool et d'accs un lment de tableau ou de record dans les expressions arithmtiques. 34. Modification de la table de visibilit des oprations locales dans une implantation par rapport son abstraction. 35. Regroupement dans l'index des oprateurs B sous la rubrique '#'. 36. La porte du changement de type des ensembles abstraits, lors de leur valuation en implantation, stend dsormais la clause PROPERTIES. Manuel de Rfrence du Langage B version 1.8.3 (Atelier B version 3.6 interne) Objectif : intgration des oprations locales pour lAtelier B v3.5. 1. Typage : tableau de typage des donnes, typage des paramtres dentre dopration et typage des paramtres de sortie dopration. 2. Substitution simultane : modification de la contrainte sur la modification en parallle de variables distinctes, insertion de la restriction sur les appels en parallle doprations importes. 3. Clause OPERATIONS : nouvelles restrictions, la clause contient dsormais galement les implmentations des oprations locales.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

viii 4. Clause LOCAL_OPERATIONS : nouvelle clause pour spcifier les oprations locales. 5. Contrles danticollision didentificateurs. 6. Restrictions de lAtelier B : nouvelle restriction sur les paramtres de sortie en rapport avec les oprations locales (FT2229). 7. Glossaire : modification des dfinitions dopration et dopration propre, ajout dopration locale. 8. Tables de visibilit dimplantation : une nouvelle colonne pour la clause LOCAL_OPERATIONS et une nouvelle ligne pour les oprations locales. 9. Nouveau mot rserv LOCAL_OPERATIONS, en annexe et dans la feuille des symboles B. Manuel de Rfrence du Langage B version 1.8.2 (Atelier B version 3.5) Objectif : corrections des erreurs et des imprcisions dtectes principalement par lquipe B. Version de rfrence pour lAtelier B v3.5. 1. prcision concernant le $0 dans une boucle while : sapplique une variable implante par homonymie et modifie dans le corps de la boucle (5.1 Expressions primaires, restriction 3, sur la boucle tant que et 6.17 Substitution boucle tant que, description, sur le $0). Manuel de Rfrence du Langage B version 1.8.1 (Version commerciale livre avec lAtelier B version 3.5) Objectif : corrections des erreurs dtectes par les beta testeurs de lAtelier B v1.5 et intgrations de certaines remarques faites par le comit de relecture du manuel lors de la runion n6, du 30/03/98. 1. corrections concernant lintgration des arbres dans la grammaire B (index et BNF), 2. correction concernant les dfinitions : partie droite k le corps, 3. corrections concernant la BNF (cf. bordereau de relecture v1.8), 4. ensemble abstrait k ensemble diffr, 5. termes, condition, instruction k expression B0, prdicat B0, substitution B0, 6. table de visibilit : lecture criture k visible, 7. correction des dfinitions de chane littrale et commentaire, 8. plongement k changement de type, 9. correction, $0 dans les ASSERT de boucles, 10. modification des dfinitions des substitutions appel dop. et boucle : [S1][S2] k [S1 ; S2], 11. suppression des contrles syntaxiques de prsence des clauses PROPERTIES et INVARIANT, 12. modification de visibilit des valuations, 13. truct k struct,

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Sommaire 14. correction de la grammaire f ; g k (f ; g) et f || g k (f || g), 15. ajout des expressions rec comme mlange avec et sans labels, 16. correction de la dfinition de 8, 17. modification des rgles de syntaxe de la forme (exp, exp) k (exp), 18. ajout de la rgle (expression_arithmtique), 19. correction nom des substitutions dans la grammaire, 20. suppression des unions de tableaux concrets, Manuel de Rfrence du Langage B version 1.8 (Atelier B version 3.5.beta) Objectif : volutions du langage supports par lAtelier B v3.5 : fichiers de dfinitions, records et non supportes par lAtelier B v3.5 : les arbres.

ix

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Introduction

1 INTRODUCTION
Avant propos Le Manuel de Rfrence du Langage B dcrit le langage B support par loutil Atelier B version 3.7. Ce langage est fond sur le langage prsent dans louvrage de rfrence The B-Book, cependant certaines avances comme la rcursivit ou le raffinement multiple ne sont actuellement pas prises en compte par le langage B. Historique La mthode B est une mthode formelle permettant le dveloppement de logiciels srs. Elle a t conue par Jean-Raymond ABRIAL, qui avait dj particip dans les annes 1980 la conception de la notation Z. Les contributeurs de la Mthode B sont trop nombreux pour tre remercis ici, on en trouvera une liste dans les premires pages du B-Book. Dautre part, la mthode B repose sur les travaux scientifiques mens luniversit dOxford, dans le cadre du Programming Research Group dirig par C.A.R. Hoare. Le B-Book de J.R. Abrial est louvrage fondamental dcrivant la mthode B. Objectif Lobjectif de ce document est de dfinir prcisment le langage B afin d'en constituer le Manuel de Rfrence. Il est principalement destin aux utilisateurs qui ralisent des dveloppements selon la mthode B, mais aussi tous ceux qui souhaitent dcouvrir les possibilits du langage B. Le langage dcrit dans ce document ne constitue pas en luimme une norme, mais il tend s'en rapprocher le plus possible. Prsentation de la mthode B Le dveloppement dun projet selon la mthode B comporte deux activits troitement lies : lcriture de textes formels et la preuve de ces mmes textes. Lactivit dcriture consiste rdiger les spcifications formelles de machines abstraites laide dun formalisme mathmatique de haut niveau. Ainsi, une spcification B comporte des donnes (qui peuvent tre exprimes entre autres par des entiers, des boolens, des ensembles, des relations, des fonctions ou des suites), des proprits invariantes portant sur ces donnes (exprimes laide de la logique des prdicats du premier ordre), et enfin des services permettant dinitialiser puis de faire voluer ces donnes (les transformations de ces donnes sont exprimes laide de substitutions). Lactivit de preuve dune spcification B consiste alors raliser un certain nombre de dmonstrations afin de prouver ltablissement et la conservation des proprits invariantes en question (par exemple il faut prouver que lappel dun service conserve bien les proprits invariantes). La gnration des assertions dmontrer est compltement systmatique. Elle sappuie notamment sur la transformation de prdicats par des substitutions. Le dveloppement dune machine abstraite se poursuit par une extension de lactivit dcriture lors dtapes successives de raffinement. Raffiner une spcification consiste la reformuler en une expression de plus en plus concrte, mais aussi lenrichir. Lactivit de preuve concernant les raffinements consiste galement raliser un certain nombre de vrifications statiques et prouver que le raffinement constitue bien une reformulation valide de la spcification. Le dernier niveau de raffinement dune machine abstraite se nomme limplantation. Il est assujetti quelques contraintes

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Manuel de rfrence du langage B - Version 1.8.6 supplmentaires : par exemple il ne peut plus manipuler que des donnes ou des substitutions ayant un quivalent informatique. Les donnes et les substitutions de limplantation constituent un langage informatique similaire un langage impratif. ce titre, il peut donc sexcuter sur un systme informatique aprs fabrication dun excutable, soit laide dun compilateur ddi soit en passant par une tape intermdiaire de traduction automatique vers Ada, Ada scuritaire, C++ ou C.

Guide de lecture Nous procdons maintenant un rapide tour d'horizon de notre document. Le chapitre 2, Concepts de base, prsente les principes de lanalyse formelle dun texte rdig en langage B : analyse lexicale, analyse syntaxique et analyse smantique. Il donne les conventions lexicales et dcrit les diffrentes sortes dunits lexicales. Enfin, il prsente les conventions syntaxiques utilises dans le reste du document afin de dcrire la grammaire du langage B. Le chapitre 3, Typage, prsente les diffrentes formes de donnes que lon peut dcrire en B. Aprs avoir introduit les types de B, il dcrit la faon dont sexprime le typage des donnes au moyen de prdicats de typage. Enfin, il prsente le cas particulier du contrle de type des tableaux. Le chapitre 4, Prdicats, prsente le langage des prdicats. Le chapitre 5, Expressions, prsente le langage des expressions. Le chapitre 6, Substitutions, prsente le langage des substitutions. Le chapitre 7, Composants, dcrit clause par clause le corps des composants B, cest-dire, les machines abstraites, les raffinements et les implantations. Il prsente galement les rgles danticollision des identificateurs au sein des composants. Le chapitre 8, Architecture B, prsente larchitecture gnrale dun projet B. Il dcrit les modules, leurs composants (les machines abstraites, les raffinements et les implantations), les liens qui existent entre les composants. Enfin, il prsente les bibliothques. Lannexe A, Mots rservs et oprateurs, prsente la table des mots cls et la table des oprateurs avec leurs priorits. Lannexe B rcapitule lensemble de la grammaire du langage B. Lannexe C, Tables de visibilit, regroupe les rgles de visibilit des constituants dun composant par rapport aux composants auxquels il est reli. Lannexe D prsente les Restrictions de lAtelier B version 3.7 par rapport au langage dcrit dans ce document. Lannexe E constitue le Glossaire. Lannexe F constitue lIndex.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Conventions

2 CONCEPTS DE BASE
Ce chapitre prsente les principes gnraux de lanalyse formelle du langage B, ainsi que les conventions lexicales et syntaxiques adoptes dans le reste du document. Un projet B est constitu dun certain nombre de composants (cf. chapitre 7 Composants). Chaque composant est stock dans un fichier spar. Lanalyse dun composant se scinde en trois parties successives : lanalyse lexicale, lanalyse syntaxique et lanalyse smantique. Analyse lexicale Lanalyse lexicale consiste vrifier que le composant est constitu dune suite de lexmes valides et effectuer lanalyse et le remplacement des dfinitions textuelles (cf. 2.3 La clause DEFINITIONS). cette occasion sont dfinis les lments du vocabulaire terminal du Langage B, comme par exemple les identificateurs. Analyse syntaxique Lanalyse syntaxique permet de vrifier que la suite de lexmes qui constitue un composant respecte les rgles de production de la grammaire du langage B. Ces rgles sont rassembles dans lannexe B.1 Grammaire du langage B. Analyse smantique Enfin, lanalyse smantique permet de vrifier que le composant possde un sens conforme la Mthode B. En B, lanalyse smantique se dcompose en deux phases, une phase de vrification statique et une phase de preuve. La phase de vrification statique ralise les contrles automatiques dcrits ci-dessous : le contrle de typage des expressions permet de vrifier que les donnes sont correctement types et que les expressions utilises au sein de prdicats, dexpressions ou de substitutions possdent des types compatibles (cf. 3.1 Fondements du typage). Ces contrles sont spcifis dans la rubrique Rgles de typage de chaque prdicat, expression ou substitution, la rsolution de porte permet de dterminer, lors de lutilisation dune donne, quelle dclaration elle se rattache. La rsolution de porte seffectue laide des Rgles de porte spcifies dans une rubrique spciale pour chaque prdicat, expression ou substitution, le contrle de visibilit permet de vrifier que les donnes dun composant sont utilises au sein des clauses de ce composant selon un mode daccs correct (accs en lecture ou en criture). Les modes daccs autoriss sont spcifis dans les tables de visibilit (cf. Annexe C), les contrles danticollision didentificateurs permettent dviter toute ambigut lors de lutilisation dune donne (cf. 7.26 Rgles danticollision didentificateurs), les restrictions smantiques dcrites dans les rubriques Restrictions des chapitres Prdicats, Expressions, Substitutions et Composants donnent la liste des contrles statiques qui ne sont pas pris en compte par les contrles dcrits ci-dessus. La phase de preuve permet de dmontrer certaines proprits pour lesquelles on na pas de procdure de dcision. Ces proprits sont appeles Obligations de Preuves. Elles sont gnres de manire systmatique partir de composants B dj vrifis statiquement. Pour quun composant B soit dclar correct, il faut que toutes ses

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Manuel de rfrence du langage B - Version 1.8.6 Obligations de Preuves aient t prouves par une dmonstration mathmatique. Dans ce document, les vrifications smantiques statiques sont dcrites prcisment. Quant aux Obligations de Preuve, elles sont voques mais ne sont pas dtailles (cf. Manuel de Rfrence des Obligations de Preuve).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Conventions 1.12.1 Conventions lexicales En B, il existe quatre sortes dunits lexicales : les mots rservs et les oprateurs, les identificateurs, les entiers littraux,

les chanes de caractres littrales. Lanalyse lexicale dun composant consiste dcomposer son texte en une suite de lexmes du dbut du texte jusqu la fin, tout en liminant les caractres despacement inutiles et les commentaires.
LEX,

Le formalisme retenu pour dcrire les units lexicales est celui de lanalyseur lexical dont nous rappelons les conventions :
Expression rgulire Chane de caractres x [x] [xy] [x-y] [^x] x? x x .
* +

Exemple b [-] [bB] [a-z] [^\] [0-9] [0-9]


* +

le caractre x le caractre x le caractre x ou le caractre y un caractre de lintervalle x..y, selon lordre ASCII tout caractre sauf x x facultatif le caractre x rpt de 0 n fois le caractre x rpt de 1 n fois nimporte quel caractre sauf le caractre saut de ligne

: la lettre b : le signe moins : lettre b ou la lettre B : une lettre minuscule : pas de guillemet : un entier positif ou rien : un entier positif

[\-]? 0 : 0 ou -0

Voici la description des units lexicales ainsi que des caractres despacement et des commentaires. Les mots rservs et les oprateurs Les mots rservs et les oprateurs sont forms d'une suite non vide de caractres imprimables. Leur liste est donne en Annexe A. Les symboles mathmatiques employs dans le Langage B possdent tous un quivalent en caractres ASCII. Pour faciliter la lecture de ce document, seuls les symboles mathmatiques seront utiliss. La correspondance entre les deux notations est donne en Annexe A. Afin de simplifier la syntaxe du langage, on associe tous les oprateurs un ordre de priorit ainsi quune associativit ( gauche ou droite). Ces deux proprits permettent de lever toute ambigut lors de lanalyse syntaxique dune expression ou dun prdicat compos de plusieurs oprateurs. Les identificateurs
Ident : [a-zA-Z][a-zA-Z0-9_]
*

Un identificateur est une squence de lettres, de chiffres ou du caractre soulign "_". Le premier caractre doit tre une lettre. Les lettres minuscules et majuscules sont distingues. Un identificateur peut tre de taille quelconque.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Manuel de rfrence du langage B - Version 1.8.6 Le caractre point "." nest pas autoris pour les identificateurs. En B, le point spare les diffrents prfixes de renommage dun constituant renomm (cf. 8.3 Instanciation et renommage).

Les entiers littraux


Entier_littral : [\-]? [0-9]
+

Les entiers littraux sont des suites de chiffres, ventuellement prcds du signe moins "-" pour dsigner les entiers ngatifs. Les entiers littraux doivent tre compris entre MININT et MAXINT (cf. 5.4 Expressions arithmtiques (suite)). Les chanes de caractres littrales
Chane_de_caractres : [][.] []
*

Les chanes de caractres littrales sont des suites de caractres compris entre deux caractres guillemets ". Tous les caractres ASCII imprimables sont accepts lexception du caractre guillemet " qui dlimite les chanes de caractres littrales et du caractre saut de ligne. Les commentaires Les commentaires sont dlimits par les deux caractres de dbut de commentaire "/*" et par les deux caractres de fin de commentaires "*/". Lintrieur du commentaire doit tre constitue dune suite de 0 N caractres ASCII imprimables quelconques lexception des deux caractres conscutifs de fin de commentaire "*/". Ainsi, les commentaires ne doivent pas simbriquer. Les caractres despacement Les caractres despacement sont le caractre espace , les caractres de tabulations horizontales et verticales (HT et VT), les caractres de saut de ligne (CR et FF). Les caractres despacement servent sparer les lexmes. Lorsque plusieurs caractres despacement se suivent, ils sont considrs comme un seul espace. Les caractres despacement sont obligatoires pour sparer un mot rserv dun identificateur. Ils permettent de laisser lutilisateur une entire libert quant au choix de la mise en page du texte source B.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Conventions 1.22.2 Conventions syntaxiques

Le formalisme retenu pour la reprsentation de la syntaxe du langage B est une variante des formalismes BNF et EBNF dont voici les conventions : les mots rservs et les oprateurs sont reprsents entre guillemets. les autres lments du vocabulaire terminal (les identificateurs, les entiers littraux et les chanes de caractres littrales) sont reprsents laide dune police de caractres de style normal (ni en italique, ni en gras), les lments du vocabulaire non terminal sont reprsents laide dune police de caractres italique, a ::= b dsigne une production de la grammaire. a est un lment de vocabulaire non terminal et b est une suite dlments de vocabulaire concatns, ( a ) dsigne llment a, a | b dsigne llment a ou llment b, [ a ] dsigne un lment optionnel a, * a dsigne llment a concatn n fois, o n 0, + a dsigne llment a concatn n fois, o n > 1, *b a dsigne llment a concatn n fois, o n 0, avec pour sparateur llment b, +b a dsigne llment a concatn n fois, o n > 1, avec pour sparateur llment b. Attention Les caractres " ( ) [ ] | + * font partie du mtalangage de description de grammaires. Ils ne doivent pas tre confondus avec les oprateurs du langage B. Ces derniers sont reprsents entre guillemets, comme les autres mots rservs et oprateurs du langage B.

Exemple
Clause_abstract_variables ::= ABSTRACT_VARIABLES Ident_ren
+","

Cette production de la grammaire permet de dcrire le texte suivant :


ABSTRACT_VARIABLES Var1, instB1.instC2.Var2, instD3.abstr_var

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Manuel de rfrence du langage B - Version 1.8.6

1.32.3 La clause DEFINITIONS


Syntaxe

La description syntaxique de la clause DEFINITIONS utilise la notation BNF dcrite au 2.2 Conventions syntaxiques, et non pas la notation de LEX donne prcdemment.
Clause_definitions Dfinition ::= "DEFINITIONS" Dfinition
+"," +";" *

::= Ident [ "(" Ident ")" ] "==" Lexme | "<" Nom_de_fichier ">" | " " " Nom_de_fichier " " " ::= Ident [ "(" ( Lexme )
+ +","

Appel_dfinition

")" ]

Le terminal Lexme dsigne n'importe quel lexme parmi les units lexicales suivantes : les mots rservs et les oprateurs, les identificateurs, les entiers littraux et les chanes de caractres littrales (cf. 2.1 Conventions lexicales). Le terminal Nom_de_fichier dsigne un nom de fichier comprenant ventuellement un chemin relatif ou absolu, qui respecte les rgles du systme d'exploitation sur lequel est utilis l'Atelier B. Description La clause DEFINITIONS contient des fichiers de dfinitions inclure et des dclarations explicites de dfinitions textuelles dun composant. Les dfinitions explicites peuvent tre ventuellement paramtres. Les appels de dfinitions situs dans le texte du composant sont remplacs lors de la phase danalyse lexicale, avant l'analyse syntaxique. Cest pourquoi nous prsentons la clause DEFINITIONS dans ce chapitre. La porte dune dfinition situe dans un composant est lensemble du composant, y compris le texte situ avant la dclaration de la dfinition. Restrictions 1. Les diffrentes dfinitions dun composant doivent avoir des noms deux deux distincts. 2. Une dfinition ne doit pas utiliser les mots rservs den-tte de composant ni des noms de clauses. Il sagit des mots rservs suivants : MACHINE, REFINEMENT, IMPLEMENTATION, REFINES, DEFINITIONS, IMPORTS, SEES, INCLUDES, USES, EXTENDS, PROMOTES, SETS, ABSTRACT_CONSTANTS, CONCRETE_CONSTANTS, CONSTANTS, VALUES, ABSTRACT_VARIABLES, VARIABLES, CONCRETE_VARIABLES, INVARIANT, ASSERTIONS, INITIALISATION, OPERATIONS. 3. Les ventuels paramtres formels dune dfinition doivent tre deux deux distincts. 4. Loprateur "==" est interdit dans le corps en partie droite dune dfinition, cest-dire la partie situe aprs loprateur "==". 5. Les dfinitions peuvent dpendre dautres dfinitions, mais elles ne doivent pas conduire des dpendances cycliques. 6. Lors dun appel de dfinition, cest--dire lorsquun identificateur porte le nom dune dfinition en dehors dune partie gauche de dfinition, le nom de la dfinition doit tre suivi dautant de paramtres effectifs que la dfinition possde de paramtres formels.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Conventions

7. Dans le cas de l'inclusion d'un fichier de dfinitions entre guillemets, le nom utilis doit dsigner un fichier partir du rpertoire courant, contenant le fichier source B. 8. Dans le cas de l'inclusion d'un fichier de dfinitions entre chevrons, le nom utilis doit dsigner un fichier situ partir de l'un des rpertoires de fichiers inclus. 9. Un fichier de dfinitions doit seulement contenir, hors commentaires, une clause DEFINITIONS respectant les rgles dcrites dans ce paragraphe. 10. Un fichier de dfinitions peut inclure d'autres fichiers de dfinitions, mais ces inclusions ne doivent pas conduire des cycles. Utilisation Une dfinition est soit une rfrence un fichier de dfinitions, soit une dfinition textuelle explicite. Les dfinitions contenues dans les fichiers de dfinitions sont incluses dans la liste des dfinitions du composant comme s'il s'agissait de dfinitions explicites. Ceci permet de partager des dfinitions entre plusieurs composants. Il suffit en effet ces composants d'inclure le mme fichier de dfinitions. Si le nom d'un fichier de dfinitions est entour de guillemets, le fichier est cherch partir du rpertoire local, o se situe le composant analys. Si le nom d'un fichier de dfinitions est entour de chevrons, le fichier est cherch dans l'ordre partir de chaque rpertoire de dfinitions. Cette liste ordonne de rpertoires est fournie par l'utilisateur l'Atelier B. Le nom dune dfinition textuelle est un identificateur. Une dfinition est paramtre si son nom est suivi par une liste didentificateurs. Ce sont ses paramtres formels. La partie dune dfinition situe aprs loprateur "==" constitue le texte de remplacement de la dfinition. On lappelle le corps de la dfinition. Le corps dune dfinition se termine lorsque lon rencontre lun des lments suivants : le nom dune clause (dont la liste est donne dans la restriction 2), la fin dun composant, cest--dire le mot rserv END ou un caractre ; suivi dune autre dfinition. Exemples
...
DEFINITIONS

Composition (f, g) == f ; g ; AffectSeq (x, v) == x := 2 v + 1 ;


CONCRETE_CONSTANTS

...

Le corps de la dfinition Composition est "f ; g". Le dernier ";" spare cette dfinition de la suivante. Le corps de la dfinition AffectSeq est "x := 2 v + 1 ;". Le dernier ";" fait partie de AffectSeq puisque la clause DEFINITIONS sachve lors de la rencontre du mot rserv CONCRETE_CONSTANTS.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

10

Manuel de rfrence du langage B - Version 1.8.6


MACHINE MA DEFINITIONS

commun1.def
DEFINITIONS

commun2.def
DEFINITIONS T == TRUE ; F == FALSE

"commun1.def" ; <commun2.def> ; debut == -2 * UNIT ; fin == 10 * UNIT


SEES

UNIT == 16

...
END

La liste des dfinitions du composant MA comprend les dfinitions explicites debut et fin ainsi que les dfinitions des fichiers commun1.def et commun2.def. Le fichier commun1.def est cherch partir du rpertoire local, alors que commun2.def est cherch partir des rpertoires d'inclusion de fichiers de dfinitions. Appel dune dfinition Lappel dune dfinition consiste utiliser le nom dune dfinition et fournir le mme nombre de paramtres effectifs que la dfinition compte de paramtres formels. Les rgles de syntaxe des composants sappliquent aprs lexpansion des appels de dfinitions textuelles. Visibilit Les dfinitions dun composant sont locales ce composant. Elles ne sont donc pas accessibles par les composants qui dpendent de celui-ci. Pour partager des dfinitions, on peut les dclarer dans un fichier de dfinitions et inclure plusieurs fois ce fichier. Exemples
...
DEFINITIONS

VAL_INIT == -1 ; Somme (x1, x2) == ((x1) + (x2)) ; BLOC_INIT ==


BEGIN

Var1 := VAL_INIT ; Var2 := Var1 + 1 END ;


CONCRETE_CONSTANTS

Les parenthses autour des paramtres formels x1 et x2 dans la dfinition de Somme assurent que lon calculera effectivement la somme de x1 et x2 mme si cette dfinition est appele au sein dune expression avec des oprateurs plus prioritaires que loprateur +.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Conventions 1.42.4 Rgles de syntaxe utiles

11

Les rgles de syntaxe suivantes sont utilises dans le reste du document pour simplifier la syntaxe du langage B. Syntaxe
Liste_ident ::= | Ident_ren ::= Ident +"," "(" Ident ")" Ident
+.

Restrictions 1. Dans le cas dune liste didentificateurs plusieurs lments, les identificateurs doivent tre deux deux distincts. 2. Lorsquun identificateur renomm est constitu de plusieurs identificateurs, ceux-ci doivent tre uniquement spars par des caractres ., les espaces et les commentaires sont interdits. Description Le non terminal Liste_ident reprsente une liste de 1 n identificateurs. Si la liste comporte plusieurs identificateurs, alors elle doit tre parenthse. Une telle liste est utilise pour dclarer des donnes au sein de prdicats ou ou dexpressions , , , ou { | }. Le non terminal Ident_ren reprsente un identificateur ventuellement renomm. Un identificateur renomm possde un prfixe constitu de 1 n identificateurs spars par le caractre point. Les identificateurs renommes dsignent des donnes provenant de machines renommes (cf. 5.1 Expressions primaires). Exemples est la liste des trois donnes : x, y et z. new.var dsigne la donne var provenant dune machine renomme avec le prfixe new.
(x, y, z)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Typage

13

3 TYPAGE
3.1 Fondements du typage Le typage en B est un mcanisme de vrification statique des donnes et des expressions du langage B. La vrification de type dun composant B est un pr-requis la preuve du composant. La notion de type B repose sur la notion densemble et la proprit de monotonie de linclusion. Soient E une expression, S et T des ensembles tels que S T. Si E S alors E T. Le plus grand ensemble dans lequel E est contenu sappelle le type de E. Dans le langage B, le typage se prsente sous trois aspects : les types du langage B, le typage des donnes et la vrification de type. Les types du langage B Les types possibles dans le langage B sont les types de base et les types construits laide du produit cartsien, de lensemble des parties et des ensembles de records. Ce mcanisme est dtaill au 3.2. Le typage des donnes Dans le langage B, toute donne qui est utilise dans un prdicat ou une substitution doit tre type. Ce typage est ralis lors de la premire utilisation de la donne, en parcourant le texte du prdicat ou de la substitution depuis son dbut. Le typage seffectue au moyen de prdicats ou de substitutions particulires appels prdicats de typage et substitutions de typage. On utilise un mcanisme dinfrence de type. Le type de la donne est dduit du type des autres donnes intervenant dans le prdicat ou la substitution selon des rgles particulires, lies au prdicat ou la substitution. Les paragraphes suivants prsentent les prdicats de typage, qui dpendent de la nature de la donne, et les substitutions de typage. Le tableau ci-dessous prsente pour chaque nature de donne du langage B la clause dans laquelle elle est type et la manire de la typer.
Nature des donnes Paramtre de machine (scalaire : identificateur avec minuscules) Paramtre de machine (ensemble : identificateur sans minuscule) Ensemble abstrait ou numr lment densemble numr Constante concrte Constante abstraite Variable concrte Variable abstraite Paramtre dentre dopration clause SETS clause SETS clause PROPERTIES clause PROPERTIES clause INVARIANT clause INVARIANT clause OPERATIONS de Clause de typage clause CONSTRAINTS Manire de typer prdicat de typage

constitue un type de base

constitue un type de base typs implicitement par lensemble numr prdicat de typage de constante concrte prdicat de typage de donne abstraite prdicat de typage de variable concrte prdicat de typage de donne abstraite prdicat de typage de

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

14

Manuel de rfrence du langage B - Version 1.8.6


Nature des donnes Clause de typage Manire de typer machine abstraite, dans une paramtre dentre prcondition dopration clause OPERATIONS de machine abstraite substitution de typage

Paramtre de sortie dopration Paramtre dentre dopration locale Paramtre de sortie dopration locale

clause LOCAL_OPERATIONS prdicat de typage de de machine abstraite, dans paramtre dentre une prcondition dopration clause LOCAL_OPERATIONS substitution de typage de machine abstraite prdicat de typage de donne abstraite substitution de typage

toute clause qui utilise un Variable de prdicat ou , dexpression , , U, I, { | } ou prdicat, une expression ou % ou de substitution ANY ou LET une substitution

Variable locale (substitution VAR)

clause INITIALISATION ou OPERATIONS

La vrification de type Enfin, lors de lutilisation de donnes dj types au sein dexpressions, de prdicats ou de substitutions, les rgles de typage relatives ces expressions, prdicats ou substitutions doivent tre vrifies. Ces rgles sont fournies dans une rubrique spciale Rgles de typage lors de la description de chaque prdicat, expression ou substitution dans les chapitres 4, 5 et 6. 1.23.2 Les types B Syntaxe
Type ::= | | | | Type_de_base "P" "(" Type ")" Type "" Type +"," "struct" "(" (Ident ":" Type) ")" "(" Type ")"

Type_de_base ::= "Z" | "BOOL" | "STRING" | Ident

Description Un type B est soit un type de base, soit construit laide dun constructeur de type. Les types de base sont : lensemble des entiers relatifs Z, lensemble des boolens BOOL, dfini par BOOL = {TRUE, FALSE}, avec TRUE FALSE, lensemble des chanes de caractres STRING, les ensembles abstraits et les ensembles numrs introduits dans la clause SETS ainsi que les paramtres ensembles de machine qui sont considrs comme des ensembles abstraits.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage

15

Il existe trois constructeurs de types : lensemble des parties not P, le produit cartsien not et la collection d'articles (ou records en anglais) not struct. Soient T, T1, T2, T3, T4 des types, P(T) dsigne lensemble des parties de T, cest--dire lensemble dont les lments sont des ensembles dlments de T, T1 T2 dsigne le produit cartsien des ensembles T1 et T2, cest--dire lensemble des paires ordonnes dont le premier lment est de type T1 et le second est de type T2. Loprateur tant associatif gauche, le type T1 T2 T3 T4 dsigne en fait le type ((T1 T2) T3) T4, Soient n un entier suprieur ou gal 1, T1, , Tn des types et Ident1, , Identn des identificateurs deux deux distincts. Alors le type record struct (Ident1 : T1, , Identn : Tn) dsigne l'ensemble form par une collection ordonne de n types Ti appels champs du record. Chaque champ possde un nom Identi appel label. Les labels d'un type record doivent tre deux deux distincts. Exemples Le type de lexpression 3 est Z. Le type de lexpression {-5, 3, -1, 8} est P(Z). Le type de lexpression (0 .. 10) BOOL ABS1 est P(P(Z BOOL ABS1)). Le type de l'expression rec (a : 5, b : TRUE) est struct (a : Z, , b : BOOL) . 1.33.3 Typage des donnes abstraites Syntaxe
Typage_donne_abstraite ::= Ident+"," "" Expression+"" | Ident "" Expression | Ident "" Expression | Ident+"," "=" Expression+","

Description On appelle donne abstraite une constante abstraite, une variable abstraite ou une donne introduite par une substitution ANY, LET, par un prdicat ! ou , ou par une expression %, , , U, { | } ou I (cf. 3.1 Fondements du typage). Les prdicats de typage des donnes abstraites sont des prdicats lmentaires particuliers. Chaque prdicat de typage permet de typer une ou plusieurs donnes abstraites. Il est spar des prdicats prcdents et suivants par une conjonction. Les prdicats lmentaires de typage sont lappartenance, linclusion et lgalit. Les donnes abstraites typer doivent se trouver en partie gauche de loprateur dappartenance, dinclusion ou dgalit. La partie droite est constitue par une expression dont tous les constituants sont des donnes accessibles et dj types (cf. Ordre du typage, ci-dessous). Le type de la donne abstraite en partie gauche est alors dtermin en appliquant les rgles de typage du prdicat utilis.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

16

Manuel de rfrence du langage B - Version 1.8.6 Ordre du typage Le mcanisme du typage des donnes au sein dun prdicat consiste parcourir lensemble du texte du prdicat du dbut jusqu la fin. Lorsquune donne qui nest pas encore type apparat en partie gauche dun prdicat de typage, la donne devient type et le reste dans la suite du texte du prdicat.

Exemples
VarRaf1 VarRaf2 VarRaf3 VarRaf4 VarRaf5 VarRaf6 VarRaf7 VarRaf8 = =
INT NAT TRUE

(0 .. 5) (0 .. 10) Z NAT NAT1 (-5 .. -1) (0 .. 4) {FALSE}

Comme le type de INT est P(Z) et que VarRaf1 est typ laide de loprateur , le type de VarRaf1 est Z. Comme le type de NAT est P(Z) et que VarRaf2 est typ laide de loprateur , le type de VarRaf2 est P(Z). Comme le type de TRUE est BOOL et que VarRaf3 est typ laide de loprateur =, le type de VarRaf3 est BOOL. De mme, le type de VarRaf4 est P(Z Z), le type de VarRaf5 est Z, le type de VarRaf6 est P(Z), le type de VarRaf7 est P(Z) et le type de VarRaf8 est P(Z BOOL). 1.43.4 Types et contraintes des donnes concrtes Les donnes concrtes dun module B sont les donnes qui feront partie du programme associ au module (cf. 8.2 Implantation). Comme les donnes concrtes doivent pouvoir tre implmentes par un programme, certaines contraintes ont t fixes pour diffrencier les donnes concrtes de celles qui ne le sont pas. Ces contraintes sont forcment arbitraires, mais elles ont t tablies en considrant ce que savent implmenter facilement les langages de programmation comme Ada ou C++ et en essayant de donner un maximum de souplesse aux utilisateurs du Langage B. Ainsi, les entiers les boolens ou les tableaux, pourront tre implments (ventuellement sous certaines contraintes), mais pas la donne de valeur {-1, 5, 8} car elle nest pas implmentable directement et simplement dans les langages de programmation classiques. La plus importante de ces contraintes est le type des donnes. Par exemple, une donne de type P(Z P(Z)) qui reprsente un ensemble de couples dont les premiers lments sont des entiers et dont les seconds lments sont des ensembles d'entiers nest pas retenue comme concrte car elle sloigne trop de ce quun langage de programmation peut implmenter directement. Il existe d'autres contraintes que le type. Par exemple les seules donnes entires concrtes sont celles qui sont comprises entre le plus petit entier implmentable et le plus grand entier implmentable pour une machine cible donne. Enfin les contraintes sur les donnes concrtes dpendent de la nature de la donne. Par exemple les constantes concrtes peuvent tre des intervalles dentiers mais pas les

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage

17

variables concrtes. Nous allons, dans un premier temps, dcrire toutes les catgories possibles de donnes concrtes, puis nous donnerons sous la forme dun tableau les catgories autorises, pour chaque nature de donne concrte.

Les ensembles abstraits ou numrs Type Un ensemble abstrait ou numr Ens est de type P(Ens). Contraintes Aucune contrainte pour les ensembles numrs. Les entiers Type Les entiers concrets sont de type Z. Contraintes Les entiers concrets doivent appartenir l'intervalle INT dont les bornes infrieures et suprieures sont les constantes prdfinies MININT et MAXINT. La valeur de ces constantes est paramtrable, elle dpend de la machine cible, sur lequel le programme associ un projet B doit fonctionner. Ces valeurs doivent tre telles que tout entier compris entre MININT et MAXINT soit reprsentable directement et sans dbordement sur la machine cible en question. Les boolens Type Les boolens sont de type BOOL. Contraintes aucune contrainte Les lments densembles abstraits ou numrs Type Les lments appartenant un ensemble abstrait ou numr Ens sont du type Ens. Contraintes aucune contrainte Les sous-ensembles dentiers ou dlments densembles abstraits Type Les sous-ensembles concrets d'entiers sont de type P(Z). Les sous-ensembles concrets d'lments d'ensemble abstrait Ens sont de type P(Ens). Contraintes Les sous-ensembles concrets d'entiers doivent tre des intervalles d'entiers concrets. Les

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

18

Manuel de rfrence du langage B - Version 1.8.6 sous-ensembles concrets d'lments d'ensemble abstrait doivent tre des intervalles d'entiers concrets, lorsque l'ensemble abstrait est valu par un intervalle d'entiers (cf. 7.17 La clause VALUES).

Les tableaux Type Les tableaux concrets sont de type P(T1 Tn T0), o n 1 et chaque type Ti est un type de base autre que le type STRING. Contraintes Avant de dfinir la notion de tableau concret, nous introduisons la notion d'ensemble simple concret. Un ensemble simple concret est un ensemble abstrait ou numr, l'ensemble des boolens ou un intervalle d'entiers concrets ou un sous-ensemble concret dun ensemble abstrait. Un tableau concret est une fonction totale dont l'ensemble de dpart est le produit cartsien de n ensembles simples concrets (avec n 1) et dont l'ensemble d'arrive est un ensemble simple concret. Les n-1 ensembles simples qui constituent le domaine de dfinition du tableau s'appellent aussi les ensembles indices du tableau. Exemple
Tab1 Tab2 Tab3 Tab4 Tab5 (0 .. 4) 3 INT EnsAbstrait1 EnsEnum1 BOOL 7 BOOL (-1 .. 1) CteInterv1 5 (0 .. 100) EnsEnum1 9 NAT (0 .. 8) 3 INT

Le tableau concret Tab1 est une fonction totale de l'intervalle (0 .. 4) dans l'ensemble INT. Le tableau concret Tab2 est une surjection totale du produit cartsien des ensembles simples EnsAbstrait1, EnsEnum1 et BOOL dans l'ensemble BOOL. Les records Type Le type des records concrets se dfinit par induction. Un type de records concret est un type record dont chaque champ est de l'un des types suivants : Z, BOOL, un ensemble abstrait, un ensemble numr, un type de tableau concret ou un type de record concret. Contraintes Les contraintes sur les donnes records concrtes se dfinissent par induction. Chaque champ d'un record concret doit tre une donne concrte. En particulier, si l'un des champs d'un record concret est lui-mme un record, alors chaque champ de ce dernier doit nouveau tre une donne concrte.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage Exemple
Annee struct ( An : INT, Bissextile : BOOL, NbrJours : (1 .. 12) 3 (28 .. 31), Meteo : struct ( TempMoy : (1 .. 12) 3 INT, PrecipMoy : (1 .. 12) 3 INT ) )

19

Le record concret Annee contient quatre champs : le champ An est un entier concret, le champ Bissextile est un boolen, le champ NbrJours est un tableau concret et le champ Meteo est un record concret possdant deux champs tableaux concrets, TempMoy et PrecipMoy. Les chanes de caractres Type Les chanes de caractres sont de type STRING. Contraintes aucune contrainte

Tableau rcapitulatif Le tableau suivant rcapitule pour chaque nature de donne concrte, quelles sont les types de donnes concrtes autorises.
Type concret Nature Paramtre de machine (ensemble) Ensemble abstrait ou numr Paramtre de machine (scalaire) numr littral Constante concrte Variable concrte Paramtre dentre dopration (non locale ou locale) Paramtre de sortie dopration (non locale ou locale) Variable locale Ens. abstrait ou numr Entier Boolen lment dens. abstrait ou numr Intervalle dentiers ou sous ensemble d'ens. abstrait Tableau Record Chane de caractres

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

20

Manuel de rfrence du langage B - Version 1.8.6

1.53.5 Typage des constantes concrtes Syntaxe


Typage_cte_concrte ::= +"," +"" Ident "" Typage_appartenance_donne_concrte | Ident "=" Typage_galit_cte_concrte | Ident "" Ensemble_simple | Ident "" Ensemble_simple Typage_appartenance_donne_concrte ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple 3 +"" | Ensemble_simple "5" Ensemble_simple +"" | Ensemble_simple "7" Ensemble_simple +"" "9" Ensemble_simple | Ensemble_simple +"," | "{" Terme_simple "}" +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")" Typage_galit_cte_concrte ::= | Terme | Expr_tableau | Intervalle_B0 | Ensemble_entier_B0 +"," ")" | "rec" "(" ( [ Ident ":" ] ( Terme | Expr_tableau ) ) Ensemble_simple ::= Ensemble_entier_B0 | "BOOL" | Intervalle_B0 | Ident Ensemble_entier_B0 ::= "NAT" | "NAT1" | "INT" Expr_tableau ::= Ident +"m" +"," | "{" ( Terme_simple "m" Terme ) "}" +"" | Ensemble_simple "" "{" Terme "}" Intervalle_B0 ::= Expression_arithmtique ".." Expression_arithmtique | Ensemble_entier_B0

Description Les constantes concrtes sont types laide de prdicats de typage utiliss dans les clauses PROPERTIES. Les prdicats de typage des constantes concrtes suivent les mmes principes que les prdicats de typage des donnes abstraites (cf. 3.3 Typage des donnes abstraites), auxquels ils apportent un certain nombre de restrictions : la partie droite du prdicat doit permettre de donner chaque constante un type de constante concrte (cf. 3.4 Types et contraintes des donnes concrtes). Seules les expressions lmentaires dont la syntaxe est donne ci-dessus sont autorises. Il sagit de :

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage lappartenance un ensemble simple, qui est un ensemble de scalaires. Exemple


Cte1 Cte2 Cte3 Cte4 Cte5 Cte6
INT BOOL

21

0 .. 5 CteInterv1 EnsAbstrait1 EnsEnum1

Ces prdicats de typage peuvent galement scrire sous la forme :


Cte1, Cte2, Cte3, Cte4, Cte5, Cte6 INT BOOL (0 .. 5) CteInterv1 EnsAbstrait1 EnsEnum1

lappartenance un ensemble de fonctions totales. Les ensembles index et lensemble darriv de la fonction doivent tre des ensembles simples. Exemple
Tab1 Tab2 Tab3 Tab4 (0 .. 4) 3 INT EnsAbstrait1 EnsEnum1 BOOL 7 BOOL (-1 .. 1) CteInterv1 5 (0 .. 100) EnsEnum1 9 NAT

lappartenance un ensemble en extension de scalaires. Exemple


Cte7 { 0, 3, 7, -8 } Cte8 { bleu, blanc, rouge }

lgalit avec un identificateur qui dsigne une donne scalaire. Exemple


Cte10 = rouge Cte11 = Cte10

lgalit avec une expression arithmtique ou boolenne. Exemple


Cte12 Cte13 Cte14 Cte15 = = = = CteInt1 + 2 ( CteInt2 - 1 ) 0 FALSE bool ( Cte12 < 10 Cte12 > 20 )

lgalit avec une expression tableau. Exemple


Tab5 = (0 .. 4) { 0 } Tab6 = (0 .. 2) { TRUE }

linclusion dans un ensemble simple. Exemple


CteInterv16 CteInterv17 CteInterv18 CteInterv19
INT

EnsAbstrait1 -100 .. 100 CteInterv16

de lappartenance un ensemble de records.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

22

Manuel de rfrence du langage B - Version 1.8.6 Exemple


CteRec struct (masc : BOOL, age : 0 .. 255)

1.63.6 Typage des variables concrtes Syntaxe


Typage_var_concrte ::= +"," +"" Ident "" Typage_appartenance_donne_concrte | Ident "=" Terme Typage_appartenance_donne_concrte ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple +"" "5" Ensemble_simple | Ensemble_simple +"" | Ensemble_simple "7" Ensemble_simple +"" | Ensemble_simple "9" Ensemble_simple +"," | "{" Terme_simple "}" +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")"

Description Les variables concrtes sont types laide de prdicats de typage utiliss dans les clauses INVARIANT. Les prdicats de typage des variables concrtes suivent les mmes principes que les prdicats de typage des donnes abstraites (cf. 3.3 Typage des donnes abstraites) auxquels ils apportent un certain nombre de restrictions : seuls les prdicats dappartenance et dgalit sont autoriss pour typer les variables concrtes. Linclusion est interdite car une variable concrte ne peut pas tre un ensemble. De plus, la partie droite du prdicat de typage doit permettre de donner la donne un type de variable concrte (cf. 3.4 Types et contraintes des donnes concrtes). Seules les expressions lmentaires dont la syntaxe est donne ci-dessus sont autorises. Il sagit : de lappartenance un ensemble simple (qui est un ensemble de scalaires). Exemple
Var1 Var2 Var3 Var4 Var5 Var6
INT BOOL 0 .. 5 CteInterv1 EnsAbstrait1 EnsEnum1

Ces prdicats de typage peuvent galement scrire sous la forme :


Var1, Var2, Var3, Var4, Var5, Var6 INT BOOL (0 .. 5) CteInterv1 EnsAbstrait1 EnsEnum1

de lappartenance un ensemble de fonctions totales. Les ensembles indices et lensemble darrive de la fonction doivent tre des ensembles simples. Exemple
Tab1 Tab2 Tab3 Tab4 (0 .. 4) 3 INT EnsAbstrait1 EnsEnum1 BOOL 7 BOOL (-1 .. 1) CteInterv1 5 (0 .. 100) EnsEnum1 9 NAT

de lappartenance un ensemble en extension de scalaires.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage Exemple
Var7 {0, 3, 7, -8} Var8 {bleu, blanc, rouge}

23

de lgalit avec un identificateur qui dsigne une donne scalaire. Exemple


Var10 = rouge Var11 = Var10

de lgalit avec une expression arithmtique ou boolenne. Exemple


Var12 Var13 Var14 Var15 = = = = CteInt1 + 2 (CteInt2 - 1) 0 FALSE bool (Var12 < 10 Var12 > 20)

de lappartenance un ensemble de records. Exemple


Var16 struct (val : INT, ok : BOOL)

1.73.7 Typage des paramtres dentre dopration Syntaxe


Typage_param_entre ::= +"," +"" Ident "" Typage_appartenance_param_entre | Ident "=" Terme Typage_appartenance_param_entre ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple 3 +"" | Ensemble_simple "5" Ensemble_simple +"" | Ensemble_simple "7" Ensemble_simple +"" | Ensemble_simple "9" Ensemble_simple +"," | "{" Terme_simple "}" +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")" | "STRING"

Description Les paramtres dentre dopration (non locale ou locale) sont typs laide de prdicats de typage utiliss dans une prcondition (cf. 7.23 La clause OPERATIONS). On distingue deux cas selon que lopration appartienne un module avec un code associ (module dvelopp ou module de base) ou un module abstrait (cf. 8.2 Module B). Dans le premier cas, les prdicats de typage des paramtres dentre dopration reprennent les mmes principes que les prdicats de typage des variables concrtes et ajoutent une nouvelle possibilit. Il sagit de lappartenance lensemble des chanes de caractres STRING. Un paramtre dentre dopration peut donc tre une chane de caractres.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

24

Manuel de rfrence du langage B - Version 1.8.6 Exemple


Var17 STRING

Dans le cas dune opration dun module abstrait, les paramtres dentre dopration sont des donnes abstraites (cf. 3.3 Typage des donnes abstraites). En effet, un module abstrait nayant pas de code associ, ses oprations ne peuvent pas tre appeles par une implantation et donc il nest pas ncessaire que ses paramtres dentre dopration soient concrets. 1.83.8 Typage des paramtres de machines Syntaxe
Typage_param_mch ::= +"," +"" | Ident "" Typage_appartient_param_mch +"," +"," | Ident "=" Terme Typage_appartient_param_mch ::= Ensemble_entier | "BOOL" | Intervalle | Ident Ensemble_entier ::= "Z" | "N" | "N1" | "NAT" | "NAT1" | "INT"

Description Les paramtres scalaires dune machine abstraite sont typs laide de prdicats de typage dans la clause CONSTRAINTS (cf. 7.5 La clause CONSTRAINTS). Les prdicats de typage des paramtres scalaires dune machine suivent les mmes principes que les prdicats de typage des donnes abstraites (cf. 3.3 Typage des donnes abstraites), auxquels ils apportent un certain nombre de restrictions. Les seuls types autoriss pour typer explicitement les paramtres scalaires dune machine sont Z, BOOL et les paramtres ensembles de la machine abstraite. Les paramtres ensemble sont exactement les paramtres reprsents par des identificateurs sans caractres minuscules. Les paramtres formels scalaires dj typs dans un prdicat de typage, peuvent servir typer un autre paramtre formel scalaire. 1.93.9 Typage des variables locales et des paramtres de sortie dopration Description Les variables locales dclares dans une substitution VAR et les paramtres formels de sortie dopration (non locale ou locale) sont typs au moyen de substitutions de typage (cf. chapitre 6 Substitutions). Les substitutions de typage sont les substitutions devient

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Typage

25

gal (cf. 6.3), devient lment de (cf. 6.12), devient tel que (cf. 6.13) et appel dopration (cf. 6.16). En ce qui concerne les paramtres de sortie dopration, on distingue deux cas selon que lopration appartienne un module avec un code associ (module dvelopp ou module de base) ou un module abstrait (cf. 8.2 Module B). Dans le cas dune opration dun module abstrait, les paramtres de sortie dopration sont des donnes abstraites. En effet, un module abstrait nayant pas de code associ, ses oprations ne peuvent pas tre appeles par une implantation et donc il nest pas ncessaire que ses paramtres de sortie dopration soient concrets. Les paramtres de sortie des modules avec code associ ainsi que les variables locales dimplantations doivent tre des donnes concrtes. Soit v1 une donne dsignant une variable locale ou un paramtre de sortie dopration non encore type (cf. 3.3 Ordre du typage). Voici comment v1 peut tre type laide des diffrentes substitutions de typage. Substitution devient gal Soit E une expression de type T, alors la substitution devient gal : v1 := E, donne v1 le type T. Pour que E puisse servir typer v1, il faut que la variable v1 napparaisse pas dans E. Il est galement possible de typer v1 dans une substitution devient gal portant sur plusieurs donnes en parallle. Exemple v1 := TRUE v1 est de type BOOL v1, v2 := 0, 0 v1 et v2 sont de type Z Substitution devient lment Soit E une expression de type P(T), alors la substitution devient lment de : v1 : E, donne v1 le type T. Exemple
v1 : AbsSet v1

est de type AbsSet

Substitution devient tel que Soit P un prdicat, alors la substitution devient tel que : v1 :( P ), doit typer la donne v1 laide dun prdicat de typage de donne abstraite, selon les principes dcrits au 3.3. Exemple
v1 :( v1 INT v1 < 10 ) v1

est de type Z

Substitution appel dopration Enfin, v1 peut tre typ comme paramtre de sortie effectif dun appel dopration (non locale ou locale). Le type de v1 est alors donn par le type du paramtre de sortie de lopration appele. Exemple v1 c op1 v1 est du type du paramtre de sortie de op1

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Prdicats

27

4 PREDICATS
Syntaxe
Prdicat ::= Prdicat_parenths | Prdicat_conjonction | Prdicat_ngation | Prdicat_disjonction | Prdicat_implication | Prdicat_quivalence | | | | | | | | | | | | | | Prdicat_universel Prdicat_existentiel Prdicat_galit Prdicat_ingalit Prdicat_appartenance Prdicat_non_appartenance Prdicat_inclusion Prdicat_inclusion_stricte Prdicat_non_inclusion Prdicat_non_inclusion_stricte Prdicat_infrieur_ou_gal Prdicat_strictement_infrieur Prdicat_suprieur_ou_gal Prdicat_strictement_suprieur Propositions

Prdicats quantifis

Prdicats dgalit

Prdicats dappartenance

Prdicats dinclusion

Prdicat de comparaison dentiers

Description Un prdicat est une formule qui peut tre prouve ou rfute, ou qui peut faire partie des hypothses sous lesquelles on fait une preuve. Les prdicats sont utiliss dans le langage B pour : exprimer les proprits de donnes (au sein des clauses CONSTRAINTS, PROPERTIES, INVARIANT, ASSERTIONS, des prdicats ! ou , des expressions , { | }, , , ou et des substitutions devient tel que ANY, LET, PRE, ASSERT ou WHILE), exprimer des conditions lors de lapplication de substitutions (substitutions SELECT, IF, WHILE). Les sections suivantes dcrivent les prdicats regroups par familles. Pour une famille de prdicats, on prsente successivement loprateur du prdicat, sa syntaxe dans une notation mathmatique, ses rgles de typage, les ventuelles rgles de porte des donnes qui y sont dclares, ses restrictions smantiques, sa description, certaines lois ou proprits mathmatiques et enfin des exemples.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

28

Manuel de rfrence du langage B - Version 1.8.6

1.14.1 Propositions Oprateur ( ) Syntaxe


Prdicat_parenths Prdicat_conjonction Prdicat_ngation Prdicat_disjonction Prdicat_implication Prdicat_quivalence ::= ::= ::= ::= ::= ::= "(" Prdicat ")" Prdicat "" Prdicat "" "(" Prdicat ")" Prdicat "" Prdicat Prdicat "" Prdicat Prdicat "" Prdicat

Parenthses Conjonction Ngation Disjonction Implication quivalence

Dfinition
P Q = (P) Q PQ = (PQ)(QP)

Description Les oprateurs prsents permettent la construction de prdicats complexes partir de prdicats plus simples. On donne ci dessous, pour chaque prdicat complexe, la liste complte des cas pour lesquels le prdicat est vrai : Soient P et Q des prdicats, (P) est vrai si et seulement si P est vrai. Cette construction permet de parenthser les prdicats, ce qui peut se rvler ncessaire selon la priorit des oprateurs utiliss. Par exemple, le prdicat P Q R sera analys comme (P Q) R et non pas comme P (Q R), car loprateur est plus prioritaire que loprateur . Pour exprimer le prdicat P (Q R) les parenthses sont donc obligatoires. P Q est vrai si et seulement si P et Q sont vrais, (P) est vrai si et seulement si P nest pas vrai, P Q est vrai si et seulement si P ou Q sont vrais, P Q est vrai si et seulement si Q est vrai ou P nest pas vrai, P Q est vrai si et seulement si P Q et Q P sont vrais.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Prdicats 1.24.2 Prdicats quantifis Oprateur Syntaxe


Prdicat_universel ::= Prdicat_existentiel ::= "" Liste_ident "." "(" Prdicat "" Prdicat ")" "" Liste_ident "." "(" Prdicat ")"

29

Quantificateur universel Quantificateur existentiel

Dfinition
X . (P) = ( X . ( (P) ))

Rgle de porte Les prdicats X . (P) et X . (P) introduisent la dclaration dune liste de donnes X dont la porte est le prdicat P. Restrictions 1. Les variables introduites par un prdicat universel de la forme X . ( P Q ) doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), dans une liste de conjonctions situes au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. 2. Les variables introduites par un prdicat existentiel de la forme X . (P) doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), dans une liste de conjonctions situes au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description Soit X une liste didentificateurs deux deux distincts et P et Q des prdicats. Le prdicat X . ( P Q ) est vrai si le prdicat P Q est vrai quelles que soient les valeurs de X. Le prdicat X . (P) est vrai sil existe un ensemble non vide de valeur pour X pour lesquelles le prdicat P est vrai. Exemples Soit lensemble dentiers : A = { 0, 1, 2 }. Le prdicat x . ( x A x 2 ) est vrai puisque tout lment de A est infrieur ou gal 2. Le prdicat x . ( x A x < 1 ) est vrai puisquil existe un lment de A infrieur ou gal 1.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

30

Manuel de rfrence du langage B - Version 1.8.6

1.34.3 Prdicats dgalit Oprateur = Syntaxe


Prdicat_galit Prdicat_ingalit ::= ::= Expression "=" Expression Expression "" Expression

galit Ingalit

Rgle de typage Dans les prdicats x = y et x y, les expressions x et y doivent avoir le mme type. Dfinition
x y = (x = y)

Description Le prdicat x = y est vrai si et seulement si les expressions x et y ont la mme valeur. Le prdicat x y est vrai si et seulement si les expressions x et y nont pas la mme valeur.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Prdicats 1.44.4 Prdicats dappartenance Oprateur Syntaxe


Prdicat_appartenance Prdicat_non_appartenance ::= ::= Expression "" Expression Expression "" Expression

31

Appartenance Non appartenance

Rgle de typage Dans les prdicats x E et x E, si le type de lexpression x est T alors le type de E doit tre P(T). Dfinition
x E = (x E)

Description Soient x et E des expressions. Le prdicat x E est vrai si et seulement si la valeur de lexpression x appartient lensemble E. Le prdicat x E est vrai si et seulement si la valeur de lexpression x nappartient pas lensemble E.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

32

Manuel de rfrence du langage B - Version 1.8.6

1.54.5 Prdicats dinclusion Oprateur Syntaxe


Prdicat_inclusion Prdicat_inclusion_stricte Prdicat_non_inclusion Prdicat_non_inclusion_stricte ::= ::= ::= ::= Expression "" Expression Expression "" Expression Expression "" Expression Expression "" Expression

Inclusion Inclusion stricte Non inclusion Non inclusion stricte

Dfinitions
s T = s P(T) sT = sT sT s - T = n (s P(T)) s _ T = n (s T s T)

Rgle de typage Dans les prdicats X Y, X Y, X Y, X Y, les expressions X et Y sont du mme type, et leur type est de la forme P(T). Description Soient X et Y des expressions reprsentant des ensembles. X Y est vrai si tout lment de X appartient Y. X Y est vrai si tout lment de X appartient Y et si X est diffrent de Y. X Y est vrai sil existe un lment de X qui nappartient pas Y. X Y est vrai si X est gal Y ou sil existe un lment de X qui nappartient pas Y.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Prdicats 1.64.6 Prdicats de comparaison dentiers Oprateur < > Syntaxe


Prdicat_infrieur_ou_gal Prdicat_strictement_infrieur Prdicat_suprieur_ou_gal Prdicat_strictement_suprieur ::= ::= ::= ::= Expression "" Expression Expression "<" Expression Expression "" Expression Expression ">" Expression

33

Infrieur ou gal Strictement infrieur Suprieur ou gal Strictement suprieur

Rgle de typage Dans les prdicats x y, x < y, x y, x > y, les expressions x et y doivent tre de type Z. Description Soient x et y des expressions reprsentant des entiers : x y est vrai si x est infrieur ou gal y, x < y est vrai si x est strictement infrieur y, x y est vrai si x est suprieur ou gal y, x > y est vrai si x est strictement suprieur y.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Expressions

35

5 EXPRESSIONS
Syntaxe
Expression ::= Expression_primaire | Expression_boolenne | Expression_arithmtique | Expression_de_couples | Expression_d_ensembles | Construction_d_ensembles | Expression_de_records | Expression_de_relations | Expression_de_fonctions | Construction_de_fonctions | Expression_de_suites | Construction_de_suites | Expression_d_arbres

Description Une expression est une formule qui dsigne une donne. Une expression possde une valeur qui appartient un type du langage B. Les sections suivantes dcrivent les expressions regroupes par familles. Pour une famille dexpressions, on donne le nom des expressions, leur syntaxe dans une notation mathmatique, leur rgles de typage, les ventuelles rgles de porte des donnes qui y sont dclares, leur dfinition, leurs ventuelles conditions de bonne dfinition mathmatique, leur description et des exemples.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

36

Manuel de rfrence du langage B - Version 1.8.6

1.15.1 Expressions primaires Oprateur . $0 ( ) " " Syntaxe


Donne Expr_parenthse Chane_lit ::= | ::= ::= Ident_ren Ident_ren"$0" "(" Expression ")" Chane_de_caractres

Renommage dune donne Valeur prcdente (dollar 0) Expression parenthse Chane de caractres

Rgles de typage Soit d le nom dune donne, de type T et r un prfixe de renommage. Alors, le type de r.d, d$0 et r.d$0 est T. Soit E une expression de type T, le type de ( E ) est T. Une chane de caractre littrale est de type STRING. Restrictions 1. Lexpression d dsigne une donne dfinie dans un composant B. Il peut sagir dun paramtre formel du composant, dun ensemble abstrait ou numr, dun lment dun ensemble numr, dune variable, dune constante, dun paramtre formel dopration, dune donne abstraite (introduite par un prdicat de quantification ou par une substitution ANY ou LET) ou dune variable locale (introduite par une substitution VAR). 2. L'expression r.d, o r est une suite didentificateurs spars par des points, dsigne une donne qui l'origine est dclare dans un autre composant sous le nom d. Le prfixe r, dnote les renommages successifs que d subit lors de l'inclusion ou de l'importation d'instances de machines renommes (cf. 8.3 Instanciation et renommage). 3. Lexpression d$0 ou dans le cas gnral r.d$0 ne peut se rencontrer que dans l'un de ces deux cas : dans le prdicat d'une substitution devient tel que (cf. 6.13 Substitution devient tel que) : alors d doit faire partie de la liste des variables de la substitution devient tel que ,

dans l'invariant d'une substitution boucle tant que (cf. 6.17 Substitution boucle tant que) : alors d doit dsigner une variable de l'abstraction du composant, implante par homonymie avec une variable concrte de limplantation ou bien implante par homonymie avec une variable dune machine importe. 4. Une chane de caractres littrale ne peut se rencontrer quen tant que paramtre effectif dentr dun appel dopration dune machine de base.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions Description

37

Lexpression Ident_ren dsigne une donne d dfinie dans un composant B. Il peut sagir dun paramtre formel du composant, dun ensemble abstrait ou numr, dun lment dun ensemble numr, dune variable, dune constante, dun paramtre formel dopration, dune donne abstraite (introduite par un prdicat de quantification ou par une substitution ANY ou LET) ou dune variable locale (introduite par une substitution VAR). Lorsque le nom de la donne d comporte des prfixes, ceux-ci dnotent les renommages successifs de d (cf. 8.3 Instanciation et renommage). Soit une donne d. Lexpression d$0 ne peut se rencontrer que dans deux cas suivants : dans le prdicat dune substitution devient tel que portant sur la donne d, d$0 dsigne la valeur de d avant lapplication de la substitution (cf. 6.13 Substitution devient tel que), dans l'invariant dune substitution tant que , si d est une variable de l'abstraction de l'implantation, d$0 dsigne la valeur de la variable d de l'abstraction avant l'appel de l'opration dans laquelle se situe la substitution tant que (cf. 6.17 Substitution boucle tant que). Une expression entre parenthses est gale lexpression situe lintrieur de ces parenthses. Lemploi des parenthses est parfois rendu obligatoire pour reprsenter certaines expressions, car lanalyse syntaxique dune expression dpend de la priorit et de lassociativit des oprateurs concerns. Une chane de caractres littrale est une suite de caractres dlimite par des guillemets ' " ' (cf. 2.1 Conventions lexicales). Lutilisation des chanes de caractres littrales est trs restreinte dans le Langage B. La seule utilisation permise consiste passer une chane de caractres littrale en paramtre d'entre d'une opration de machine de base, afin de communiquer des messages textuels au code associ la machine de base, qui lui est capable de manipuler les chanes de caractres.

Exemples Noms de donnes : x1, Lundi, nbr_de_jours, a1.b1.CTE_DEBUT Noms de donnes avant substitutions, ou bien donnes de labstraction : x1$0, cc_02.var$0 Expressions parenthses : ( x + y ) z, lexpression x + y doit tre parenthse car loprateur est plus prioritaire que loprateur +. Chane de caractres littrale : "Hello world!"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

38

Manuel de rfrence du langage B - Version 1.8.6

1.25.2 Expressions boolennes Oprateur


TRUE FALSE

bool

valeur vraie valeur fausse conversion dun prdicat en expression boolenne

Syntaxe
Boolen_lit ::= | "FALSE" "TRUE" "bool" "(" Prdicat ")"

Conversion_bool ::=

Rgle de typage Le type des expressions boolennes est BOOL. Dfinition


BOOL = { FALSE, TRUE }

Description TRUE et FALSE sont les constantes littrales de lensemble prdfinis BOOL (cf. 3.2 Les types B). Loprateur bool permet de convertir un prdicat en une expression boolenne. Soit P un prdicat, lexpression bool (P) prend la valeur TRUE si P est vrai et FALSE sinon. Exemples Lexpression : bool ( x . ( x N1 x = x2 ) a pour valeur TRUE. Lexpression : bool ( b = TRUE ) a pour valeur b.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.35.3 Expressions arithmtiques Oprateur


MAXINT MININT

39

+ /
mod

Plus grand entier implmentable Plus petit entier implmentable Addition Diffrence, et aussi moins unaire Produit Division entire Modulo Puissance Successeur Prdcesseur

xy
succ pred

Syntaxe
Entier_lit ::= | | ::= ::= ::= ::= ::= ::= ::= ::= ::= Entier_littral "MAXINT" "MININT" Expression "+" Expression Expression "-" Expression "-" Expression Expression "" Expression Expression "/" Expression Expression "mod" Expression Expression
Expression

Addition Diffrence Moins_unaire Produit Division Modulo Puissance Successeur Prdcesseur

"succ" ["(" Expression ")"] "pred" ["(" Expression ")"]

Rgle de typage Les entiers littraux ainsi que les constantes prdfinies MAXINT et MININT sont de type Z. Dans les expressions : x + y, x - y, - x, x y, x / y, x mod y, xy, succ (x) et pred (x), les expressions x et y doivent tre de type Z. Le type de ces expressions est Z. Le type des fonctions successeur et prdcesseur est P(Z Z). Bonne dfinition
Expression a/b a mod b a
b

Condition de bonne dfinition b Z - {0} a N b N1 aZ bN

Restriction 1. Un entier littral doit tre compris entre MININT et MAXINT.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

40

Manuel de rfrence du langage B - Version 1.8.6

Description Soient x et y des expressions de type Z, alors : Les constantes prdfinies MAXINT et MININT reprsentent respectivement le plus grand et le plus petit entier concret utilisable en B. Les entiers littraux dans le langage B doivent tre compris entre MAXINT et MININT. Les valeurs de MAXINT et MININT sont fixes pour un projet donn en fonction de la machine cible sur laquelle sexcutera le programme. Si les entiers sont stocks sur une certaine machine sur quatre octets, alors les valeurs de MAXINT et MININT pourront tre -231 et 231-1. x + y reprsente la somme de x et y. x - y reprsente la diffrence de x et y. - x reprsente loppos de x. x y reprsente la multiplication de x par y. x / y reprsente la division entire de x par y. Pour que la division entire ait un sens, il faut que y soit diffrent de 0. La division entire est dfinie de la manire suivante : soient x N et y N1, alors, x / y = max({q | q N y * q x}). On peut de faon quivalente donner les contraintes suivantes : si q = x / y alors,
q * y x x < (q + 1) * y q 0

Puis cette dfinition est tendue aux entiers relatifs, grce la rgle des signes (cf. lois). x mod y reprsente le reste de la division entire de x par y. Loprateur modulo nest dfini que pour les valeurs de x appartenant N et pour des valeurs de y appartenant N1. Si x Z et y N, alors xy reprsente x lev la puissance entire y. succ reprsente la fonction successeur, dfinie de Z dans Z. succ (x) reprsente le successeur de x, cest--dire x + 1. pred reprsente la fonction prdcesseur, dfinie de Z dans Z. pred (x) reprsente le prdcesseur de x, cest--dire x - 1.

Lois Soient x N alors x0 = 1 Soient x N et y N-{0}, alors :


( -x ) / y = - ( x / y ) x / ( -y ) = - ( x / y ) x mod y = x - y * ( x / y )

Exemples
b2 - 4 a c x - x3 / 6 + x5 / 120 x * a + y2 + z mod 9 - 7

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.45.4 Expressions arithmtiques (suite) Oprateur max min card Syntaxe
Maximum Minimum Cardinal Somme_gnralise Produit_gnralis ::= ::= ::= ::= ::= "max" "(" Expression ")" "min" "(" Expression ")" "card" "(" Expression ")" "" Liste_ident "." "(" Prdicat "|" Expression ")" "" Liste_ident "." "(" Prdicat "|" Expression ")"

41

Maximum Minimum Cardinal Somme dexpressions arithmtiques Produit dexpressions arithmtiques

Rgle de typage Le type des expressions arithmtiques prsentes ci-dessus est Z. Dans les expressions : max (E), min (E), E doit tre un ensemble dentiers, de type P(Z).Dans lexpression : card (E), E doit tre un ensemble, de type P(T).Dans les expressions : X . ( P | E ), X . ( P | E ), les expressions E doivent tre de type entier Z. Bonne dfinition
Expression
max (E) min (E) card (E)

Condition de bonne dfinition E E E

doit tre non vide et doit possder un majorant doit tre non vide et doit possder un minorant doit tre fini

x.(P|E) x.(P|E)

lensemble { x | P } doit tre fini lensemble { x | P } doit tre fini

Rgle de porte Dans les expressions : X . ( P | E ), X . ( P | E ), la porte de la liste didentificateurs X est le prdicat P et lexpression E. Restriction 1. Les variables introduites par les expressions de la forme X . ( P | E ) ou X . ( P | E ) doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), situ dans une liste de conjonctions au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description Soit E une expression reprsentant un ensemble non vide dentiers relatifs.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

42

Manuel de rfrence du langage B - Version 1.8.6


max ( E ) reprsente le plus grand lment de E et min ( E ) reprsente le plus petit lment de E. Soit F une expression qui reprsente un ensemble fini. card ( F ) reprsente le nombre dlments de F. Soit X une liste de noms de variables deux deux distincts. Soit P un prdicat qui type les variables de la liste X et E une expression de type entier. ( X ) . ( P | E ) reprsente la somme des expressions de E correspondant aux valeurs des variables X qui tablissent P. Si {X | P} = 0 alors la somme vaut 0. (X).(P|E) reprsente le produit des expressions de E correspondant aux valeurs des variables X qui tablissent P. Si {X | P} = 0 alors le produit vaut 1.

Exemples Soit E = {-1, 2, 9, -6}, max (E) = 9 et min (E) = -6 Soit FRUITS = { Fraise, Cassis, Framboise },
card ( FRUITS ) = 3

x . ( x { 1, 2, 3 } | x + 1 ) = ( 1 + 1 ) + ( 2 + 1 ) + ( 3 + 1 ) = 9 x . ( x N1 x 3 | x ) = 1 2 3 = 6

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.55.5 Expressions de couples Oprateur m Correspondance binaire Syntaxe


Couple ::= | Expression "m" Expression Expression "," Expression

43

Rgle de typage Si x et y sont respectivement de type T et U, alors x m y est de type T U. Description Un couple est une paire ordonne dlments, il se note x m y. Une relation R dun ensemble E dans un ensemble F est un ensemble de couples (x m y) o x appartient E et y appartient F. Si (i m j) est un lment dune relation R, on dit que j est associ i par R. Comme les relations sont des ensembles, tous les oprateurs sur les ensembles peuvent tre appliqus des relations. Exemples
rel1 = {(0 m FALSE), (1 m TRUE), (2 m FALSE), (3 m TRUE), (4 m FALSE), (5 m TRUE)} rel2 = {((0 m FALSE) m 7), ((0 m TRUE) m 9), ((1 m FALSE) m 6), ((1 m TRUE) m 8)} rel1

est une relation de 0 .. 5 vers BOOL et rel2 est une relation de {0, 1} * BOOL vers 6 .. 9.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

44

Manuel de rfrence du langage B - Version 1.8.6

1.65.6 Ensembles prdfinis Oprateur


Z N N1 NAT NAT1 INT BOOL STRING

Ensemble vide Ensemble des entiers relatifs Ensemble des entiers Ensemble des entiers non nuls Ensemble des entiers concrets Ensemble des entiers concrets non nuls Ensemble des entiers relatifs concrets Ensemble des boolens Ensemble des chanes de caractres

Syntaxe
Ensemble_vide Ensemble_entier ::= ::= | | | | | ::= ::= "" "Z" "N" "N1" "NAT" "NAT1" "INT" "BOOL" "STRING"

Ensemble_boolen Ensemble_chanes

Rgle de typage Lensemble vide na pas de type fixe tabli. Il peut prendre le type de nimporte quel ensemble suivant le contexte o il se trouve. Son type est de la forme P(T). Le type des ensembles Z, N, N1, NAT, NAT1 et INT est P(Z). Le type de lensemble BOOL est P(BOOL). Le type de lensemble STRING est P(STRING). Restriction Lors de chaque utilisation de lensemble vide (dans un prdicat, une expression ou une substitution), le type de lensemble vide doit tre instanci par le contexte. Par exemple, le prdicat = est interdit. La substitution x := est valide si la variable x est de type P(T), alors quelle est invalide si x na pas encore t type. Dfinitions
NAT = 0 .. MAXINT NAT1 = NAT - {0} INT = MININT .. MAXINT BOOL = {FALSE, TRUE}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

45

Description Lensemble vide est un ensemble qui ne possde pas dlment. Il peut se dfinir comme la diffrence entre tout ensemble et lui-mme, ce qui explique quil peut prendre le type de nimporte quel type ensemble. Lensemble Z dsigne lensemble des entiers relatifs. Lensemble N dsigne lensemble des entiers naturels. Lensemble N1 dsigne lensemble des entiers naturels strictement positifs. Lensemble INT dsigne lensemble des entiers relatifs concrets. Lensemble NAT dsigne lensemble des entiers naturels concrets. Lensemble NAT1 dsigne lensemble des entiers naturels positifs concrets. Lensemble BOOL dsigne lensemble des boolens. Lensemble STRING dsigne lensemble des chanes de caractres.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

46

Manuel de rfrence du langage B - Version 1.8.6

1.75.7 Expressions ensemblistes Oprateur P P1 F F1 {|} {} .. Syntaxe


Produit Ens_comprhension Sous_ensembles Sous_ensembles_finis Ens_extension Intervalle ::= ::= ::= | ::= | ::= ::= Expression "" Expression "{" Ident
+","

Produit cartsien Ensemble des parties Ensemble des parties non vides Ensemble des parties finies Ensemble des parties finies non vides Ensemble dfini en comprhension Ensemble dfini en extension Intervalle

"|" Prdicat "}"

"P" "(" Expression ")" "P1" "(" Expression ")" "F" "(" Expression ")" "F1" "(" Expression ")" "{" Expression
+","

"}"

Expression ".." Expression

Dfinitions
P1( E ) = { F | F P( E ) F } F1( E ) = { F | F F( E ) F }

Rgles de typage Soient X une expression de type ensemble P ( T1 ) et Y une expression de type P ( T2 ). Le type de X Y est P ( T1 T2 ).Le type de P ( X ), P1 ( X ), F ( X ) et F1 ( X ) est P ( P ( T1 ) ).Soient E1, ..., En des expressions de mme type T, alors le type de { E1, .., En } est P ( T ).Soient X une liste didentificateurs deux deux distincts x1, ..., xn typs dans le prdicat P et dont les types sont T1, .., Tn. Alors, le type de lensemble en comprhension { X | P } est P ( T1 .. Tn ). Dans le cas o X comporte un seul identificateur, le type de { X | P } est P ( T1 ).Soient X et Y des expressions de type entier Z, alors le type de X .. Y est
P ( Z ).

Rgle de porte Soient X une liste didentificateurs et P un prdicat, alors dans lensemble en comprhension { X | P }, la porte des identificateurs de la liste X est le prdicat P. Restrictions 1. Les variables X introduites par les expressions de la forme { X | P } doivent tre deux deux distinctes.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

47

2. Les variables X introduites par les expressions de la forme { X | P } doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), situ dans une liste de conjonctions au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description Soient X et Y des ensembles, alors X Y dsigne le produit cartsien de X et Y, cest--dire lensemble des couples dont le premier lment appartient X et le second lment appartient Y. Si X, Y et Z sont des ensembles, X Y Z et ( X Y ) Z dsignent lensemble de couples de la forme ( (x m y ) m z ), alors que X ( Y Z ) dsigne lensemble de couples de la forme ( x m ( y m z ) ). Soient x1, ..., xn des expressions, alors lensemble en extension { x1, ..., xn} reprsente lensemble dont les lments sont x1, ..., xn. Soit E un ensemble, alors P(E) reprsente lensemble des parties de E. P1(E) reprsente lensemble des parties non vides de E. F(E) reprsente lensemble des parties finis de E. F1(E) reprsente lensemble des parties finis non vides de E. Soit X une liste didentificateurs x1, ..., xn et P un prdicat qui type X et exprime des proprits sur X. Alors, lensemble en comprhension { X | P } reprsente lensemble des maplets (...( x1 m ...) m xn ) qui vrifient P. Dans le cas o X comporte un seul identificateur, { X | P } reprsente lensemble des lments x1 qui vrifient P. Soient x et y des entiers, alors lintervalle x .. y reprsente lensemble des entiers suprieurs ou gaux x et infrieurs ou gaux y. Ainsi dans le cas o x > y , x .. y reprsente lensemble vide entier. Exemples Soient X et Y des ensembles dfinis en extension par : X = { 1, 2, 3 } et Y = { 4, 5 }
X Y = { ( 1 m 4 ), ( 1 m 5 ), ( 2 m 4 ), ( 2 m 5 ), ( 3 m 4 ), ( 3 m 5 ) } { x | x X x mod 2 = 1 } = { 1, 3 } { x, y | x N y N x < y y < 3} = {(0 m 1), (0 m 2), (1 m 2)} P(X) = {, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}} P1(X) = {{1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}} F(X) = P(X) F1(X) = P1(X) -1..5 = {-1, 0, 1, 2, 3, 4, 5} 6..4 =

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

48

Manuel de rfrence du langage B - Version 1.8.6

1.85.8 Expressions ensemblistes (suite) Oprateur


union inter

Diffrence Union Intersection Union gnralise Intersection gnralise Union quantifie Intersection quantifie

U I Syntaxe
Diffrence Union Intersection

::= ::= ::= ::=

Expression "-" Expression Expression "" Expression Expression "" Expression "union" "(" Expression ")" "inter" "(" Expression ")" "U" Liste_ident "." "(" Prdicat "|" Expression ")" I" Liste_ident "." "(" Prdicat "|" Expression ")"

Union_gnralise

Intersection_gnralise ::= Union_quantifie Intersection_quantife ::= ::=

Dfinitions Si X T et Y T,
X - Y = { x | x T (x X x Y) } X Y = { x | x T (x X x Y) } X Y = { x | x T (x X x Y) }

Si Z P(P(T)),
union (Z) = { x | x T y . ( y Z x y ) }

Si Z P1(P(T)),
inter (Z) = { x | x T ! y . ( y Z y x y ) }

Si x . ( P y S T )),
U x . (P | S) = { y | y T z . ( z T P y S ) }

Si x . ( P y S T )) et x . (P),
I x . (P | S) = { y | y T z . ( z T P y y S ) }

Rgles de typage Dans les expressions X - Y, X Y et X Y, les ensembles X et Y doivent tre du mme type de la forme P(T). Le type de ces expressions est P(T). Dans les expressions union (X) et inter (X), X doit tre un ensemble densembles, dont le type est P(P(T)). Le type de ces expressions est P(T). Dans les expressions U X . ( P | S ) et I X . (P | S), X dsigne une liste didentificateurs, P est un prdicat qui doit typer X et S est un ensemble de type P(T). Le type de ces expressions est P(T).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions Bonne dfinition


Expression inter(E) IX.(P | E ) Condition de bonne dfinition E

49

doit tre non vide doit tre non vide

{X | P }

Rgle de porte Dans les expressions U X.(P | S) et I X .(P | S), la porte de la liste didentificateurs X est le prdicat P et lexpression S. Restriction 1. Les variables X introduites par les expressions de la forme UX . (P | S) et IX . (P | S) doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), situ dans une liste de conjonctions au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description Soient E et F des ensembles. E - F, reprsente la diffrence des ensembles E et F, cest--dire lensemble des lments qui appartiennent E mais pas F. E F reprsente lunion des ensembles E et F, cest--dire lensemble des lments qui appartiennent E ou F. E F reprsente lintersection des ensembles E et F cest--dire lensemble des lments qui appartiennent E et F. Soit ENS un ensemble densembles. union (ENS) reprsente lunion gnralise des lments de ENS, cest--dire lensemble obtenu par union des ensembles constituant les lments de ENS. inter (ENS) reprsente lintersection gnralise des lments de ENS, cest--dire lensemble obtenu par intersection des ensembles constituant les lments de ENS. Soient X une liste de variables, P un prdicat qui type la liste de variables X puis qui exprime une proprit sur X. Soit E un ensemble dfini en fonction de X. U X . ( P | E ) reprsente lunion des ensembles E indexs laide dune liste de variables X vrifiant le prdicat P. Si P est faux, alors lunion quantifie reprsente lensemble vide. I X . ( P | E ) reprsente lintersection des ensembles E indexs laide dune liste de variables X vrifiant le prdicat P. Si P est faux, alors lintersection quantifie est dpourvue de sens. Exemples Soient E = {-1, 0, 3, 7, 8} et F = {-3, -1, 4, 7, 9},
E F = {0, 3, 8} E F = {-3, -1, 0, 3, 4, 7, 8, 9} E F = {-1, 7}

Soit S = {{1}, {1, 2}, {1, 3}},

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

50

Manuel de rfrence du langage B - Version 1.8.6


union (S) = {1, 2, 3} inter (S) = {1}

Soit G = {2, 4},


U y. (y G | {z | z N z y}) = {0, 1, 2} {0, 1, 2, 3, 4} = {0, 1, 2, 3, 4} I y. (y G | {z | z N z y}) = {0, 1, 2} {0, 1, 2, 3, 4} = {0, 1, 2}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.95.9 Expressions de records Oprateur struct rec Syntaxe


Ensemble_records Record_en_extension Champ_de_record ::= ::= ::= "struct" "(" ( Ident ":" Expression )
+"," +","

51

Ensemble de records Record en extension Accs un champ de record (oprateur quote)

")" ")"

"rec" "(" ( [ Ident ":" ] Expression ) Expression "" Ident

Rgles de typage Soit n est un entier suprieur ou gal 1 et i un entier compris entre 1 et n. Dans lexpression struct ( Ident1 : E1, ..., Identn : En ), Ei doit tre de type P(Ti). Alors, le type de lexpression est P( struct ( Ident1 : T1, ..., Identn : Tn ) ).Dans lexpression rec ( Ident1 : x1, ..., Identn : xn ), soit Ti le type de xi. Alors, le type de lexpression est struct ( Ident1 : T1, ..., Identn : Tn ).Dans lexpression rec ( x1, ..., xn ), soit Ti le type de chaque expression xi. Alors, le type de lexpression est de la forme struct ( Ident1 : T1, ..., Identn : Tn ), o les Identi sont des identificateurs deux deux distincts.Dans lexpression Record Identi, Record doit tre de type me struct ( Ident1 : T1, ..., Identn : Tn ), o Identi est le i label du type record. Alors, le type de lexpression est Ti. Restrictions 1. Dans lexpression struct ( Ident1 : E1, ..., Identn : En ), les noms de champs Identi doivent tre deux deux distincts. 2. Dans lexpression rec ( Ident1 : x1, ..., Identn : xn ), les noms de champs Identi doivent tre deux deux distincts 3. Un record en extension sans label, de la forme rec ( x1, ..., xn ), ne peut pas tre utilis pour typer une donne. Description Soit n est un entier suprieur ou gal 1 et i un entier compris entre 1 et n. Soient E1, ..., En des ensembles et Ident1, ..., Identn des identificateurs deux deux distincts, alors struct ( Ident1 : E1, ..., Identn : En ) dsigne un ensemble de donnes records. Cet ensemble est une collection ordonne et non-vide des n ensembles E1, ..., En appels champs de lensemble de records. Chaque champ possde un nom Identi appel label. Soient x1, ..., xn des expressions et Ident1, ..., Identn des identificateurs deux deux distincts, alors rec ( Ident1 : x1, ..., Identn : xn ) dsigne une donne record, dont la valeur de chaque champ Identi est xi. Dans le cas o cette donne record nest pas utilise pour typer une autre donne (cf. Typage des donnes abstraites), alors les labels sont facultatifs. Lcriture simplifie rec ( x1, ..., xn ) peut tre utilise la place de la prcdente.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

52

Manuel de rfrence du langage B - Version 1.8.6 Soit rc une donne record dont lun des label est identi, alors lexpression rc identi construite laide de loprateur quote dsigne la valeur du champ identi de la donne record rc.

Exemples
ENS_RES = struct ( Note : 0 .. 20, Suffisant : BOOL ) ENS_RES reprsente un ensemble de records deux champs. Le premier champ sappelle Note et dsigne lensemble 0 .. 20. Le deuxime champ sappelle Suffisant et dsigne lensemble BOOL. resultat = rec ( Note : 12, Suffisant : TRUE ) reprsente une donne appartenant lensemble ENS_RES. La valeur du champ Note est 12 et celle du champ Suffisant est TRUE. Si la donne resultat a dj t type, alors lcriture prcdente peut tre simplifie en resultat = rec ( 12, TRUE ). resultat Note

reprsente la valeur du champ Note, cest--dire 12.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.105.10 Oprateur Syntaxe


Ensemble_relations ::= Expression "" Expression

53

Ensembles de relations

Ensemble des relations

Dfinition
X Y = P(X Y)

Rgle de typage Dans lexpression X Y, X doit tre de type P(T1) et Y doit tre de type P(T2). Le type de X Y est P(P(T1T2)). Description Soient E et F des ensembles. Une relation de E dans F est un ensemble de couples (x m y), o x est un lment de E et o y est un lment de F. E F dsigne lensemble des relations de lensemble E dans lensemble F. Cest une autre criture pour P(EF). Exemples reprsente lensemble des relations de lintervalle 0..5 dans lensemble BOOL. Les relations suivantes appartiennent cet ensemble :
0..5 BOOL rel1 = {(0 m FALSE), (1 m TRUE), (2 m FALSE), (3 m TRUE), (4 m FALSE), (5 m TRUE)} rel2 = {(0 m FALSE), (0 m TRUE), (3 m TRUE)} rel3 =

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

54 1.115.11 Oprateur id r-1 prj1 prj2 ; || Syntaxe


Identit Inverse

Manuel de rfrence du langage B - Version 1.8.6 Expressions de relations

Identit Inverse Premire projection Deuxime projection Composition Produit direct Produit parallle

::= ::= ::= ::= ::= ::= ::=

"id" "(" Expression ")" Expression


-1"

Premire_projection Deuxime_projection Composition Produit_direct Produit_parallle

"prj1" "(" Expression "," Expression ")" "prj2" "(" Expression "," Expression ")" Expression ";" Expression Expression "" Expression Expression "||" Expression

Dfinitions
id (E) = { x, y | x E y = x }

Si R X Y,
R-1 = { y, x | (y m x) Y X (x m y) R }
prj1 (E, F) = { x, y, z | x, y, z E F E z = x } prj2 (E, F) = { x, y, z | x, y, z E F F z = y }

Si R1 T U et R2 U V,
R1 ; R2 = { x, z | x, z T V y . ( y U (x m y) R1 (y m z) R2 ) }

Si R1 T U et R2 T V,
R1 R2 = { x, (y, z) | x, (y, z) T (U V) (x m y) R1 (x m z) R2 }

Si R1 T U et R2 V W,
R1 || R2 = { (x, y), (z, a) | (x, y), (z, a) (T V) (U W) (x m z) R1 (y m a) R2 }

Rgles de typage Dans lexpression id (E), E doit tre de type P(T). Alors id (E) est de type P(TT). Dans lexpression R-1, R doit tre de type P(TU). Alors R-1 est une relation de type P(UT). Dans les expressions prj1 (E, F) et prj2 (E, F), E et F doivent tre de type P(T) et P(U). Alors prj1 (E, F) est une relation de type P(TUT) et prj2 (E, F) est une relation de type P(TUU).Dans lexpression ( E ; F ), E doit tre de type P(TU) et F doit tre de type P(UV). Alors E ; F est une relation de type P(TV).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

55

Dans lexpression E F, E doit tre de type P(TU) et F doit tre de type P(TV). Alors E F est une relation de type P(T(UV)). Dans lexpression E || F , E doit tre de type P(TU) et F doit tre de type P(VW). Alors, E || F est une relation de type P((TV)(UW)). Restriction Les oprateurs ; et || lorsquils reprsentent la composition de deux relations et le produit parallle de deux relations ne doivent pas apparatre sil peut y avoir ambigut avec les oprateurs dsignant des substitutions en squence ou simultane. Pour lever lambigut, il est toujours possible de parenthser lexpression. Par exemple, R3 := R1 ; R2 est interdit car ambigu. la place, il faut crire R3 := (R1 ; R2). Description Soit E un ensemble, id (E) reprsente la relation identit construite sur E, cest-dire la relation qui a tout lment de E associe ce mme lment. Soit R une relation, R-1 reprsente la relation inverse de R. Cest--dire la relation compose des couples inverses de ceux de R. Si (x m y) R alors (y m x) R-1. Soit X et Y des ensembles, prj1(X, Y) reprsente la relation premire projection de X Y dans X, qui a tout couple (x m y) de X Y associe le premier composant x du couple. prj2(X, Y) reprsente la relation deuxime projection de X Y dans Y, qui a tout couple (x m y) de X Y associe le deuxime composant y du couple. Soient R1 une relation de lensemble A vers lensemble B et R2 une relation de lensemble B vers lensemble C. Alors ( R1 ; R2 ) reprsente la composition de R1 et R2. Elle contient lensemble des couples (a m c) tels quil existe un lment b de B tel que (a m b) R1 et (b m c) R2. Soient R1 une relation de lensemble A vers lensemble B et R2 une relation de lensemble A vers lensemble C. Alors R1 R2 reprsente le produit direct de R1 et R2. Cette relation contient lensemble des couples a m (b m c) tels quil existe un couple (a m b) de R1 et un couple (a m c) de R2. Soient R1 une relation de lensemble A vers lensemble B et R2 une relation de lensemble C vers lensemble D. Alors ( R1 || R2 ) reprsente le produit parallle de R1 et R2. Cette relation contient lensemble des couples de la forme ((a m c) m (b m d)) tels quil existe un couple (a m b) de R1 et un couple (c m d) de R2. Exemples Soit E = {3, 5},
id (E) = {(3 m 3), (5 m 5)}

Soit R1 = {(0 m 4), (2 m 4), (2 m 7), (3 m 3)},


R1-1 = {(4 m 0), (4 m 2), (7 m 2), (3 m 3)}

Soient E = {0, 1} et F = {-1, 2},


prj1 (E, F) = {((0 m -1) m 0), ((0 m 2) m 0), ((1 m -1) m 1), ((1 m 2) m 1)} prj2 (E, F) = {((0 m -1) m -1), ((0 m 2) m 2), ((1 m -1) m -1), ((1 m 2) m 2)}

Soient R1 = {(0 m 2), (1 m 5), (2 m 5), (3 m 7)} et R2 = {(0 m 0), (2 m -1), (5 m 8), (6 m 9)},

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

56

Manuel de rfrence du langage B - Version 1.8.6


( R1 ; R2 ) = {(0 m -1), (1 m 8), (2 m 8)}

Soient R1 = {(0 m 0), (1 m 10), (2 m 20)} et R2 = {(0 m 0), (1 m 20), (2 m 40), (3 m 60)},
R1 R2 = { (0 m (0 m 0)), (1 m (10 m 20)), (2 m (20 m 40))}

Soient R1 = {(0 m 7), (1 m 6)} et R2 = {(10 m 11), (12 m 12)},


( R1 || R2 ) = { ((0 m 10) m (7 m 11)), ((0 m 12) m (7 m 12)), ((1 m 10) m (6 m 11)), ((1 m 12) m (6 m 12))}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.125.12 Oprateur Rn R* R+ Syntaxe


Itration Fermeture_rflexive Fermeture ::= ::= ::= Expression Expression Expression
* +

57

Expressions de relations (suite)

Itration Fermeture transitive et rflexive Fermeture transitive

Expression

Dfinitions Soit R une relation dun ensemble E dans lui-mme et soit n un entier naturel.
R R R R
0

= id (E) = R; R
n n

n+1 * +

= =

n . (n N | R ) n . (n N1 | Rn)

Rgle de typage Dans lexpression Rn, R est de type P(TT) et n est de type Z. Le type de lexpression est P(TT). Dans les expressions R1* et R1+, R1 doit tre de type P(TT). Le type des expressions est P(TT). Bonne dfinition Expression
R
n

Condition de bonne dfinition n doit appartenir N

Description Soit R une relation dun ensemble E dans lui-mme et soit n un entier naturel. Rn reprsente la relation R itre n fois par rapport loprateur de composition. R0 reprsente la relation identit sur E. * R reprsente la fermeture transitive et rflexive de R. Cest la plus petite relation contenant R qui soit transitive et rflexive. + R reprsente la fermeture transitive de R. Cest la plus petite relation contenant R qui soit transitive. Exemples Soit E = {1, 2, 3}, R = {(1 m 3), (2 m 1), (2 m 2), (3 m 3)},
R0 = id (E) R1 = R R = {(1 m 3), (2 m 1), (2 m 2), (2 m 3), (3 m 3)}
2

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

58
+ *

Manuel de rfrence du langage B - Version 1.8.6


R = R
2

R = {(1 m 1), (1 m 3), (2 m 1), (2 m 2), (2 m 3), (3 m 3)}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 1.135.13 Oprateur


dom ran

59

Expressions de relations (suite)

[] Syntaxe
Domaine Codomaine Image

Domaine Codomaine Image

::= ::= ::=

"dom" "(" Expression ")" "ran" "(" Expression ")" Expression "[" Expression "]"

Dfinitions Si R X Y,
dom (R) = { x | x X y . ( y Y (x m y) R ) } ran (R) = { y | y Y x . ( x X (x m y) R ) }

Si R X Y et F X,
R [F] = { y | y Y x . ( x F (x m y) R ) }

Rgle de typage Dans les expressions dom (R) et ran (R), R doit tre une relation de type P(TV). Alors le type de dom (R) est P(T) et le type de ran (R) est P(V). Dans lexpression R [E], R doit tre une relation de type P(TV) et E doit tre un ensemble de type P(T). Alors lexpression est de type P(V). Description Soit R une relation dun ensemble A vers un ensemble B. dom (R) dsigne le domaine de R, cest--dire lensemble des lments a de A pour lesquels il existe un lment b de B tel que (a m b) R. ran (R) dsigne le codomaine de R (range en anglais), cest--dire lensemble des lments b de B pour lesquels il existe un lment a de A tel que (a m b) R. Soit E une partie de A, R [E] dsigne limage de E par R. Cest lensemble des lments de B qui sont associs un lment de E par la relation R. Exemples Soit R = {(0 m 4), (2 m 4), (2 m 7), (3 m 3)},
dom (R) = {0, 2, 3} ran (R) = {4, 7, 3}

Soit E = {-1, 0, 1, 2},


R [E] = {4, 7}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

60 1.145.14 Oprateur r a R A + Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 Expressions de relations (suite)

Restriction sur le domaine Soustraction sur le domaine Restriction sur le codomaine Soustraction sur le codomaine Surcharge

Restriction_domaine

::=

Expression "r" Expression Expression "a" Expression Expression "R" Expression Expression "A" Expression Expression "+" Expression

Soustractions_domaine ::= Restriction_codomaine ::=

Soustraction_codomaine ::= Surcharge ::=

Dfinitions Si R X Y et F X,
F r R = { x, y | (x m y) R x F } F a R = { x, y | (x m y) R x F }

Si R X Y et F Y,
R R F = { x, y | (x m y) R y F } R A F = { x, y | (x m y) R y F }

Si R X Y et Q X Y,
Q + R = { x, y | (x, y) X Y (((x m y) Q x dom (R)) (x m y) R ) }

Rgle de typage Dans les expressions X r R et X a R, R doit tre une relation de type P(TV) et X doit tre un ensemble de type P(T). Le type des expressions est P(TV). Dans les expressions R R Y et R A Y, R doit tre une relation de type P(TV) et Y doit tre un ensemble de type P(V). Le type des expressions est P(TV). Dans lexpression R1 + R2, R1 et R2 doivent tre des relations de type P(TV). Le type de lexpression est P(TV). Description Soient R, R1 et R2 des relations, E et F des ensembles. E r R dsigne la restriction sur le domaine de R lensemble E. Cest lensemble des couples (x m y) de R pour lesquels x appartient E. E a R dsigne la soustraction sur le domaine de R lensemble E. Cest lensemble des couples (x m y) de R pour lesquels x nappartient pas E. R R F dsigne la restriction sur le codomaine de R lensemble F. Cest lensemble des couples (x m y) de R pour lesquels y appartient F.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

61

R A F dsigne la soustraction sur le codomaine de R lensemble F. Cest lensemble des couples (x m y) de R pour lesquels y nappartient pas F. R1 + R2 dsigne la surcharge de R1 par R2. Cest la relation constitue des lments de R2 et des lments de R1 dont le premier lment nappartient pas au domaine de R2. Ainsi dans la relation obtenue, les lments de R2 nots (x m z) surchargent les ventuels lments (x m y) de R1.

Exemples Soit la relation R = {(2 m 1), (2 m 8), (3 m 9), (4 m 7), (4 m 9)}, soient les ensembles E = {1, 2, 3} et F = {5, 7, 9},
E r R = {(2 m 1), (2 m 8), (3 m 9)} E a R = {(4 m 7), (4 m 9)} R R F ={(3 m 9), (4 m 7), (4 m 9)}

E 1* 2*

*1 F *5 *7

E 1* 2*

*1 F *5 *7

3* *8 4* *9 ErR

3* *8 4* *9 EaR

E 1* 2*

*1 *5 *7 F

E 1* 2*

*1 *5 *7 F

3* *8 4* *9 RRF

3* *8 4* *9 RAF

R A F = {(2 m 1), (2 m 8)}

Soient les relations R1 = {(2 m 1), (2 m 8), (3 m 9), (4 m 7), (4 m 9)} et R2 = {(0 m -1), (1 m 7), (2 m 9)},
R1 + R2 = {(0 m -1), (1 m 7), (2 m 9), (3 m 9), (4 m 7), (4 m 9)}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

62 1.155.15 Oprateur 2 3 4 5 6 7 9 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 Ensembles de fonctions

Fonctions partielles Fonctions totales Injections partielles Injections totales Surjections partielles Surjections totales Bijections totales

Fonction_partielle Fonction_totale Injection_partielle Injection_totale Surjection_partielle Surjection_totale Bijection_totale

::= ::= ::= ::= ::= ::= ::=

Expression "2" Expression Expression "3" Expression Expression "4" Expression Expression "5" Expression Expression "6" Expression Expression "7" Expression Expression "9" Expression

Dfinitions
X 2 Y = { r | r X Y (r -1 ; r) id (Y) } X 3 Y = { f | f X 2 Y dom (f) = X } X 4 Y = { f | f X 2 Y f -1 Y 2 X } X5Y = X4YX3Y X 6 Y = { f | f X 2 Y ran (f) = Y } X7Y = X6Y X3Y X9Y = X5Y X7Y

Rgle de typage Dans les expressions X 2 Y, X 3 Y, X 4 Y, X 5 Y, X 6 Y, X 7 Y, X 9 Y, les expressions X et Y sont de types P(T1) et P(T2). Le type des expressions est P(P(T1T2)). Description Soient X et Y des ensembles. X 2 Y dsigne lensemble des fonctions partielles de X dans Y. Une fonction partielle de X dans Y est une relation qui ne contient pas deux couples distincts ayant le mme premier lment. X 3 Y dsigne lensemble des fonctions totales de X dans Y. Une fonction totale de X dans Y est une fonction partielle dont le domaine est exactement X (et nest pas seulement inclus dans X comme cest le cas pour une fonction partielle). X 4 Y dsigne lensemble des injections partielles de X dans Y. Une injection partielle de X dans Y est une fonction partielle qui deux lments distincts de X

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

63

associe deux lments distincts de Y. Linverse dune injection partielle de X dans Y est donc une fonction partielle de Y dans X. Le concept dinjection totale, dont le symbole est '5', se dfinit de manire similaire. X 6 Y dsigne lensemble des surjections partielles de X dans Y. Une surjection partielle de X dans Y est une fonction partielle qui est telle que chaque lment de Y est en correspondance avec un lment de X au moins. Le concept de surjection totale, dont le symbole est '7', se dfinit de manire similaire.

Exemples Si r1 = {(0 m 1), (1 m 2), (2 m 2)}, alors r1 {0, 1, 2, 3} 2 {0, 1, 2} et r1 {0, 1, 2} 3 {0, 1, 2} Si r2 = {(0 m 1), (1 m 2), (2 m 3)}, alors r2 {0, 1, 2, 3} 4 {0, 1, 2, 3} et r2 {0, 1, 2} 5 {0, 1, 2, 3} Si r3 = {(0 m 1), (1 m 2), (2 m 2)}, alors r3 {0, 1, 2, 3} 6 {1, 2} et r3 {0, 1, 2} 7 {1, 2} Si r4 = {(0 m 1), (1 m 2), (2 m 3)}, alors r4 {0, 1, 2} 9 {1, 2, 3}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

64 1.165.16 Oprateur f()


fnc rel

Manuel de rfrence du langage B - Version 1.8.6 Expressions de fonctions

Lambda expression valuation de fonction Transforme en fonction Transforme en relation

Syntaxe
Lambda_expression valuation_fonction Transforme_fonction Transforme_relation ::= ::= ::= ::= "" Liste_ident "." "(" Prdicat "|" Expression ")" Expression "(" Expression ")" "fnc" "(" Expression ")" "rel" "(" Expression ")"

Dfinitions Si !x . (x T E U),
x . (x T P | E) = { x, y | x, y T U P y = E } P et E

o y nest pas libre dans x, T,

Si f T 2 U et E dom (f),
f(E) = choice ( f [{E}] )

On rappelle que loprateur choice (cf. [B-Book] 2.1.2) appliqu un ensemble non vide, dsigne un lment privilgi de cet ensemble. Dans le cas qui nous occupe ici, lensemble en question, f [{E}], na quun seul lment. Llment privilgi de cet ensemble ne peut donc tre que cet lment l. Attention, cet oprateur choice ne doit pas tre confondu avec la substitution choix born (cf. 6.6) qui utilise le mot-cl CHOICE. Soit R une relation de X vers Y,
fnc (R) = x . (x dom (R) | R [{x}])

Soit F une fonction de X vers P(Y),


rel (F) = { x, y | x, y dom (F) * Y y : F(x))

Rgles de typage Dans lexpression X.(P | E), X dsigne une liste didentificateurs deux deux distincts, P est un prdicat qui doit commencer par typer tous les lments de X et E est une expression de type T. Alors lexpression est de type P(T1..TnT). Dans lexpression f (y), f est une fonction de type P(T1T2) et y doit tre de type T1. Le type de lexpression est T2. Dans lexpression fnc (R), R doit tre une relation de type P(T1T2). Le type de lexpression est P(T1P(T2)). Dans lexpression rel (R), R reprsente une relation dont le type doit tre de la forme P(T1*P(T2)). Le type de lexpression est P(T1T2).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions Bonne dfinition


Expression f (x) Condition de bonne dfinition x dom(f) f dom (f) ran (f)

65

Rgle de porte Dans lexpression X . (P | E), la porte des identificateurs X est le prdicat P et lexpression E. Restriction 1. Les variables X introduites par les expressions de la forme X . (P | E) doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), situ dans une liste de conjonctions au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description Une lambda expression permet de dfinir une fonction par la valeur quelle prend en chaque point de son domaine. Soient x un identificateur, P un prdicat qui commence par typer x et E une expression qui dpend de x. Alors x . (P | E) dsigne une lambda expression. Cest la fonction constitue des couples (x m E) pour chaque lment x vrifiant P. Soit f une fonction de X dans Y et soit x un lment de X. Alors f(x) dsigne lunique lment y de f tel que le couple (x m y) appartienne f. Pour que lexpression ait un sens, il faut que x appartienne au domaine de f. Soit R une relation de X dans Y. Alors fnc (R) dsigne la transforme en fonction de relation R. Cest la fonction de X dans P(Y) qui chaque lment x du domaine de R associe lensemble des lments de Y lis x par la relation R. Soit Fct une fonction de X dans P(Y). Alors rel (Fct) dsigne la transforme en relation de Fct. Cest la relation de X dans Y constitue des couples (x m y) tels que x appartienne au domaine de Fct et que y appartienne llment associ x par la fonction Fct. Exemples La lambda expression : x . ( x Z | x 2 ) dfinie la fonction multiplication par 2 sur Z. Soit la fonction f = {(0 m 6), (1 m 2), (3 m 6), (4 m -5)},
f(3) = 6

Soit la relation R = {(0 m 1), (0 m 2), (1 m 1), (1 m 7), (2 m 3)},


fnc (R) = {(0 m {1, 2}), (1 m {1, 7}), (2 m {3})}

Soit la fonction f = {(-1 m {0, 2}), (1 m {6, 8}), (3 m {3})},


rel (f) = {(-1 m 0), (-1 m 2), (1 m 6), (1 m 8), (3 m 3)}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

66 1.175.17 Oprateur seq seq1 iseq iseq1 perm [] [ ] Syntaxe


Suites

Manuel de rfrence du langage B - Version 1.8.6 Ensembles de suites

Suites Suites non vides Suites injectives Suites injectives non vides Permutations Suite vide Suite en extension

::= ::= ::= ::= ::= ::= ::=

"seq" "(" Expression ")" "seq1" "(" Expression ")" "iseq" "(" Expression ")" "iseq1" "(" Expression ")" "perm" "(" Expression ")" "[]" "[" Expression
+","

Suites_non_vide Suites_injectives Suites_inj_non_vide Permutations Suite_vide Suite_extension

"]"

Rgles de typage Dans les expressions seq (E), seq1 (E), iseq (E), iseq1 (E), perm (E), E doit dsigner un ensemble de type P(T). Alors les expressions sont de type P(P(ZT)). La suite vide [] na pas de type fixe tablit. Elle peut prendre le type de nimporte quelle suite. Son type doit tre de la forme P(ZT). Dans la suite en extension [E1, ..., En], les lments E1, ..., En de la suite doivent tous tre du mme type T. Le type de la suite est alors P(ZT). Bonne dfinition
Expression
perm (E)

Condition de bonne dfinition E

doit tre un ensemble fini

Dfinitions
seq (E) = n . (n N | 1..n 3 E) seq1 (E) = seq (E) - {} iseq (E) = {s | s seq (E) s N1 4 E} iseq1 (E) = iseq (E) - {} perm (E) = {s | s iseq (E) s N1 6 E}

[] = [E1, ..., En] = {(1 m E1), ..., (n m En)}

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

67

Description Les suites manipules dans le langage B sont des suites finies. Les suites sont des fonctions totales dun intervalle entier de la forme 1 .. n, o n N, vers un ensemble quelconque E. Comme les suites sont des fonctions, tous les oprateurs de manipulation des fonctions et donc des relations et des ensembles, sont applicables aux suites. On dit que le nime lment dune suite est la valeur en telle que (n m en) appartienne la suite. seq (E) dsigne lensemble des suites (sequence en anglais) dont les lments appartiennent lensemble E. seq1 (E) dsigne lensemble des suites dans lensemble E et qui ne sont pas la suite vide. iseq (E) dsigne lensemble des suites injectives dans lensemble E. iseq1 (E) dsigne lensemble des suites injectives dans lensemble E et qui ne sont pas la suite vide. perm (E) dsigne lensemble des suites bijectives dans lensemble E. Ces suites sont appeles permutations. noter que lensemble E doit tre fini. [] dsigne la suite vide. Cest une fonction qui ne possde pas dlment. La suite vide nest autre que lensemble vide . [e1, ..., en] dsigne la suite en extension dont les n lments sont, dans lordre
e1, ..., en

Exemples Soit lensemble E = {0, 1, 2},


[] seq (E), [0] seq (E), [1, 2, 0] seq (E), [0, 2, 2, 0, 1, 0, 0] seq (E) [0] seq1 (E), [1, 2, 0] seq1 (E), [0, 2, 2, 0, 1, 0, 0] seq1 (E) [] iseq (E), [1] iseq (E), [1, 2, 0] iseq (E), [0, 2] iseq (E), [1] iseq1 (E), [1, 2, 0] iseq1 (E), [0, 2] iseq1 (E),

mais [0, 1, 0] iseq (E)

mais [0, 1, 0] iseq1 (E) [0, 1, 2] perm (E), [1, 0, 2] perm (E), [2, 1, 0] perm (E), mais [0, 1] perm (E)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

68 1.185.18 Oprateur size first last front tail rev Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 Expressions de suites

Taille Premier lment Dernier lment Tte Queue Inverse

Taille_suite Premier_lment_suite Dernier_lment_suite Tte_suite Queue_suite Inverse_suite

::= ::= ::= ::= ::= ::=

"size" "(" Expression ")" "first" "(" Expression ")" "last" "(" Expression ")" "front" "(" Expression ")" "tail" "(" Expression ")" "rev" "(" Expression ")"

Rgles de typage Dans les expressions size (S), first (S), last (S), front (S), tail (S) et rev (S), S doit dsigner une suite de type P(ZT). Le type de size (S) est le type entier. Le type des expressions first (S) et last (S) est T. Le type des suites front (S), tail (S) et rev (S) est P(ZT). Bonne dfinition
Expression
size (S) first (S) last (S) front (S) tail (S) rev (S)

Condition de bonne dfinition S seq (ran (S)) S seq1 (ran (S)) S seq1 (ran (S)) S seq1 (ran (S)) S seq1 (ran (S)) S seq (ran (S))

Dfinitions
size ([]) = 0 size (S j x) = size (S) + 1 first (S) = S (1) last (S) = S (size (S)) front (S) = S q (size (S) - 1) tail (S) = S w 1 rev (S) = % i . ( i 1..size (S) | S( size (S) - i + 1) )

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

69

Description Soit S1 une suite, soit S2 une suite non vide, size (S1) reprsente le nombre dlments de la suite, first (S2) reprsente le premier lment de S2, last (S2) reprsente le dernier lment de S2, front (S2) reprsente la suite S2, prive de son dernier lment, tail (S2) reprsente la suite S2, prive de son premier lment, rev (S1) reprsente la suite comportant les mmes lments que S1, mais dans un ordre inverse. Exemples Soit la suite S = [5, 7, -2, 1],
size (S) = 4 first (S) = 5 last (S) = 1 front (S) = [5, 7, -2] tail (S) = [7, -2, 1] rev (S) = [1, -2, 7, 5]

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

70 1.195.19 Oprateur
)

Manuel de rfrence du langage B - Version 1.8.6 Expressions de suites (suite)

k j q w conc Syntaxe

Concatnation Insertion en tte Insertion en queue Restriction la tte Restriction la queue Concatnation gnralise

Concatnation Insertion_tte Insertion_queue Restriction_tte Restriction_queue Concat_gnralise

::= ::= ::= ::= ::= ::=

Expression ")" Expression Expression "k" Expression Expression "j" Expression Expression "q" Expression Expression "w" Expression "conc" "(" Expression ")"

Rgles de typage Dans les expressions S1 ) S2, S1 et S2 dsignent des suites de type P(ZT). Dans les expressions X k S et S j X, S dsigne une suite de type P(ZT) et X dsigne un lment de la suite, de type T. Dans les expressions S q n et S w n, S dsigne une suite de type P(ZT) et n doit tre de type Z. Dans lexpression conc (S), S dsigne une suite dont les lments sont des suites de mme type. S doit donc tre de type P(ZP(ZT)). Bonne dfinition
Expression Sqn Swn Condition de bonne dfinition n n

doit appartenir lintervalle 0 .. size (S) doit appartenir lintervalle 0 .. size (S)

Dfinitions
S q n = (1 .. n) r S S w n = i. (i 1 .. size (S) - n | S (n+i)) S1 ) S2 = S1 u % i . ( i size(S1)+1 .. size(S1)+size(S2) | S2(i - size(S1)) ) x k S = {1 m x} u % i . ( i 2 .. size(S)+1 | S(i - 1)) S j x = S u {size (S) + 1 m x}
conc ([]) = [] conc (x k S) = x ) conc (S)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

71

Description Soient S1 et S2 des suites, S1 ) S2 reprsente la suite obtenue en concatnant dans lordre, les suites S1 et S2. Soit S une suite, X un nouvel lment et n un entier relatif, X k S reprsente la suite obtenue en insrant en tte de la suite S le nouvel lment X. S j X reprsente la suite obtenue en insrant en queue de la suite S le nouvel lment X. S q n reprsente la suite obtenue partir de S en ne conservant que ses n premiers lments. S w n reprsente la suite obtenue partir de S en liminant ses n premiers lments. Soit S une suite dont les lments sont des suites, conc (S) reprsente la suite obtenue en concatnant dans lordre toutes les suites qui sont les lments de S. Exemples Soient les suites S1 = [3, 1] et S2 = [0, -2, 4],
S1 ) S2 = [3, 1, 0, -2, 4] 2 k S1 = [2, 3, 1] S1 j 2 = [3, 1, 2] S2 q 2 = [0, -2], S2 q 4 = [0, -2, 4] S2 w 2 = [4], S2 w 3 = [], S2 w 0 = [0, -2, 4]

Soit la suite S = [ [2, 5], [-1, -2, 9], [], [5] ],


conc (S) = [2, 5, -1, -2, 9, 5]

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

72 1.205.20

Manuel de rfrence du langage B - Version 1.8.6 Ensembles darbres

Oprateur tree binbtree Syntaxe


Arbres

Arbres Arbres binaires

::= "tree" "(" Expression ")"

Arbres_binaires ::= "binbtree" "(" Expression ")"

Rgles de typage Dans les expressions tree (S) et binbtree (S), S doit dsigner un ensemble de type P(T). Le type de tree (S) et de binbtree (S) est P(P(P(Z Z) T)). Dfinitions
ins cns T tree (S) btree (S)

= % i . ( i : N | % i . ( i : seq (N) | i k S ) ) = % t . ( t : seq (F(seq (N1))) | {[]} u U i . (i : dom (t) | ins (i)[t(i)] ) ) = cns [seq (T)] = Ut.(t:T | t3S) = { t | t : tree (S) ! n . ( n : dom (t) y arity (t, n) : {0, 2} ) }

Description Les arbres modliss dans le langage B sont des arbres finis non vides dcors et possdant des branches ordonnes. Un arbre est compos dun ensemble fini de nuds. Les nuds sont relis par des liens orients appels branches. Si une branche relie le nud A au nud B, alors on dit que A est le pre de B et que B est le fils de A. Un nud dun arbre peut avoir au plus un pre. Le seul nud qui na pas de pre sappelle la racine de larbre. Un arbre ntant jamais vide, il possde toujours une racine. Un nud peut avoir de 0 n fils. On appelle ce nombre larit du nud. Un nud darit nulle sappelle une feuille. Si un nud possde un ou plusieurs fils alors leur ordre est significatif, les branches vers les fils sont numrotes de 1 n. Un nud est reprsent mathmatiquement par la suite des numros de branches reliant la racine de larbre au nud. La racine de larbre est reprsente par la suite vide. Larbre est dit dcor car un lment dun ensemble donn S est associ chacun de ses nuds. est lensemble des arbres dcors laide dlments de lensemble S. Un lment de cet ensemble est une fonction totale dun ensemble fini de nuds vers un ensemble S. Chaque nud est reprsent par la suite des branches conduisant au nud partir de la racine de larbre. Une branche dun nud est identifie par un lment de N1.
tree (S)

est lensemble des arbres binaires dcors laide dlments de lensemble S. Un arbre binaire est un arbre pour lequel larit de chaque nud est gale 0 ou 2. Un nud dun arbre binaire est donc soit une feuille, soit un nud deux branches quon appelle branche gauche et branche droite.
binbtree (S)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions

73

Exemples Les reprsentations graphiques des arbres donns ci-dessous suivent les conventions suivantes. Un nud est reprsent par un cercle qui contient la valeur associe au nud. Les branches sont reprsentes par des flches du pre vers le fils, numrotes de 1 n. Soit lensemble numr : S = {a, b, c, d, e}, larbre A est un lment de tree (S) :
A = { [] m c, [1] m d, [1, 1] m e, [1, 2] m a, [2] m a, [3] m c, [3, 1] m d, [3, 1, 1] m e, [3, 1, 2] m d, [3, 1, 3] m c}
1

c
2

c d
1 2 1

a a
1

d
3 2

larbre B est un lment de binbtree (S) :


B = { [] m a, [1] m b, [1, 1] m c, [1, 2] m d, [2] m a, [2, 1] m d, [2, 2] m e, [2, 2, 1] m b, [2, 2, 2] m a}
1

a b
1 2 1 2

d d
1

e
2

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

74 1.215.21

Manuel de rfrence du langage B - Version 1.8.6 Expressions darbres

Oprateur consconst Construction top Racine sons Fils preprefix Aplatissement prfix postpostfix Aplatissement postfix sizet Taille mirror Symtrie Syntaxe
Construction_arbre SommetRacine_arbre Fils_arbre Aplatissement_prfix Aplatissement_postfix Taille_arbre Symtrie_arbre ::= ::= ::= ::= ::= ::= "consconst" "(" Expression "," Expression ")" ::= "top" "(" Expression ")"

"sons" "(" Expression ")" "preprefix" "(" Expression ")" "postpostfix" "(" Expression ")" "sizet" "(" Expression ")" "mirror" "(" Expression ")"

Rgles de typage Dans les expressions const (x, q), top (t), sons (t), prefix (t), postfix (t), sizet (t) , mirror (t), t doit tre un arbre de type P(P(Z Z) T), x doit tre de type T et q doit tre une suite darbres de type P(Z P(P(Z Z) T)). Le type des expressions const (x, q) et mirror (t) est P(P(Z Z) T). Le type de top (t) est T. Le type de sons (t) est P(Z P(P(Z Z) T)). Le type des expressions prefix (t, n) et postfix (t, n, i) est P(Z T).Le type de lexpression sizet (t) est Z. Dans les expressions size (S), first (S), last (S), front (S), tail (S) et rev (S), S doit dsigner une suite de type P(ZT). Le type de size (S) est le type entier. Le type des expressions first (S) et last (S) est T. Le type des suites front (S), tail (S) et rev (S) est P(ZT). Bonne dfinition
Expression Condition de bonne dfinition seq ( trees (S) ) consconst (x, x S T q

, Tq)
top (t) sons (t) preprefix (t)

t tree (S) t tree (S) t tree (S)

postpostfix (t) t tree (S)

sizet (t) mirror (t)

t tree (S) t tree (S)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions Dfinitions
size const (x, q)([]) top sons

75

= 0{ [] m x } u U i . (i : dom (q) | ins (i)


-1 -1

-1

; q(i) )

= const = const

; prj1 (S, seq (tree (S))) ; prj2 (S, seq (tree (S)))

size (S j x) = size (S) + 1 prefix (t) postfix (t) first (S) = prefix (t) k conc ( sons (t) ; prefix )S (1)

conc ( sons (t) ; postfix ) j top (t)

last (S) = S (size (S)) sizet (t) mirror (t) front (S) = succ ( sum ( sons (t) ; sizet ))S q (size (S) - 1)

= const ( top (t), rev (sons (t) ; mirror ))

tail (S) = S w 1 rev (S) = % i . ( i 1..size (S) | size (S) - i + 1)

Description Soit S un ensemble, soit t un arbre dcor par des lments de S, soit x un lment de S et soit T un lment de seq ( seq (N1) 2 S ) ), consconst (x, Tq) reprsente larbre dont la racine est associe x et dont les fils sont les lments de la suite Tq, top (t) reprsente la valeur associe la racine de larbre t, sons (t) reprsente la suite des fils de la racine de larbre t, preprefix (t) reprsente laplatissement prfix des lments de S ports par larbre t , dans une suite. Cette suite se dfinit de manire rcursive. Si t est une feuille, preprefix (t) est la suite contenant la valeur associe au nud feuille. Sinon preprefix (t) sobtient en concatnant la suite contenant la valeur associe la racine de t et les suites prfixes de chacun des fils de la racine de t pris dans lordre, postpostfix (t) reprsente laplatissement postfix des lments de S ports par larbre t , dans une suite. Cette suite se dfinit de manire rcursive. Si t est une feuille, postpostfix (t) est la suite contenant la valeur associe au nud feuille. Sinon postpostfix (t) sobtient en concatnant les suites postfixes de chacun des fils de la racine de t pris dans lordre et la suite contenant la valeur associe la racine de t, sizet (t) reprsente la taille de larbre t. Cest le nombre de nuds de t. Cette expression se dfinit de manire rcursive, mirror (t) reprsente larbre symtrique de larbre t. Cest larbre construit partir de t en inversant pour chaque nud lordre des fils du nud. Exemples Soit lensemble numr : S = {a, b, c, d, e}, Soient A1, A2 et A3 des arbres portant des lments de S :
A1 = { [] m d, [1] m e, [2] m a } A2 = { [] m a } A3 = { { [] m c, [1] m d, [1, 1] m e, [1, 2] m d, [1, 3] m c } A = const (c, [A1, A2, A3]) e
1

c
2

c d
1 2 1

a a
1

d
3 2

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

76 Alors,

Manuel de rfrence du langage B - Version 1.8.6

cons (c, [A1, A2, A3]) =

[] m c, [1] m d, [1, 1] m e, [1, 2] m a, [2] m a, [3] m c, [3, 1] m d, [3, 1, 1] m e, [3, 1, 2] m d, [3, 1, 3] m c }

Soit A = cons (c, [A1, A2, A3]),


top (A) = c sons (A) = [A1, A2, A3] preprefix (A) = [c, d, e, a, a, c, d, e, d, c] postpostfix (A) = [e, a, d, a, e, d, c, d, c, c] sizet (A) = 10 mirror (A) =

[] m c, [1] m c, [1, 1] m d, [1, 1, 1] m c, [1, 1, 2] m d, [1, 1, 3] m e, [2] m a, [3] m d, [3, 1] m a, [3, 2] m e, }

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 5.22 Expressions de nuds darbres Oprateur rank father son subtree arity Syntaxe
Rang_noeud Pre_noeud Fils_noeud Sous_arbre_noeud Arit_noeud ::= ::= ::= ::= ::= "rank" "(" Expression "," Expression ")" "father" "(" Expression "," Expression ")" "son" "(" Expression "," Expression "," Expression ")" "subtree" (" Expression "," Expression ")" "arity" "(" Expression "," Expression ")"

77

Rang dun nud Pre dun nud Fils dun nud Sous arbre Arit

Rgles de typage Dans les expressions rank (t, n), father (t, n), son (t, n, i), subtree (t, n), arity (t, n), t doit tre un arbre de type P(P(Z Z) T), n doit tre une suite de type P(Z Z) et i doit tre de type Z. Le type des expressions rank (t, n) et arity (t, n) est le type entier Z. Le type des expressions father (t, n), son (t, n, i) est P(Z Z). Le type de subtree (t, n) est P(P(Z Z) T). Bonne dfinition
Expression rank (t, n) father (t, n) son (t, n, i) subtree (t, n) arity (t, n) Condition de bonne dfinition

t tree (S) n dom (t) {[]} t tree (S) n dom (t) {[]} t tree (S) n j i dom (t) t tree (S) n dom (t) t tree (S) n dom (t)

Dfinitions
rank (t, n) father (t, n) son (t, n, i)

= last (n) = front (n) = nji = size (sons (subtree (t, n)))

subtree (t, n) = %u . (u : seq (S) | n ) u ) ; t arity (t, n)

Description Soit S un ensemble, soit t un arbre dcor par des lments de S, soient n et m des nuds de t, (sous la forme dune suite de numros de branches dcrivant le chemin vers le nud partir de la racine). Le nud m ne doit pas tre la racine de larbre. Enfin, soit i lune des branches partant de n. rank (t, m) reprsente le rang de la branche reliant le pre de m m,

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

78

Manuel de rfrence du langage B - Version 1.8.6 reprsente le pre du nud n dans larbre t, son (t, n, i) reprsente le fils de rang i du nud n de larbre t, subtree (t, n) reprsente le sous arbre de larbre t dont la racine est le nud n, arity (t, n) reprsente larit du nud n dans larbre t, cest dire le nombre de fils de n.
father (t, n)
1

Exemples Soit lensemble numr : S = {a, b, c, d, e}, Soit larbre A portant des lments de S :
A = { [] m c, [1] m d, [1, 1] m e, [1, 2] m a, [2] m a, [3] m c, [3, 1] m d, [3, 1, 1] m e, [3, 1, 2] m d, [3, 1, 3] m c } e

c
2

c d
1 2 1

a a
1

d
3 2

Alors,
rank (A, [3, 1, 2]) = 2 father (A [3, 1, 2]) = [3, 1] son (A, [3, 1], 2) = [3, 1, 2] subtree (A, [3, 1]) = { [] m d, [1] m e, [2] m d, [3] m c } arity (A, [1]) = 2

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Expressions 5.23 Expressions darbres binaires Oprateur bin left right infix Syntaxe
Arbre_binaire_en_extension ::= "bin" "(" Expression [ , Expression , Expression ] ")" Sous_arbre_gauche Sous_arbre_droit Aplatissement_infix ::= ::= ::= "left" "(" Expression ")" "right" "(" Expression ")" "infix" "(" Expression ")"

79

Arbre binaire en extension Sous arbre gauche Sous arbre droit Aplatissement infix

Rgles de typage Dans les expressions bin (x), bin (g, x, d), left (t), right (t), infix (t), x est de type T, g et d doivent tre des arbres de type P(P(Z Z) T), t doit tre un arbre de type P(P(Z Z) T). Le type des expressions bin (x), bin (g, x, d), left (t), right (t) est le type P(P(Z Z) T). Le type de infix (t) est P(Z T). Bonne dfinition
Expression bin (x) bin (g, x, d) left (t) right (t) infixt (t) Condition de bonne dfinition

xS x S g btree (S) d btree (S) t btree (S) sons (t) d [] t btree (S) sons (t) d [] t btree (S)

Dfinitions
bin (x) bin (g, x, d) left (t) right (t) infix (bin (x)) infix (bin (g, x, d))

= const (x, []) = const (x, [g, d]) = first (sons (t)) = last (sons (t)) = [x] = infix (g) ) [x] ) infix (d)

Description Les arbres binaires tant des arbres (cf. 5.20 Ensembles darbres), toutes les expressions darbres et les expressions de nuds darbres des sections prcdentes peuvent sappliquer aux arbres binaires. Les expressions dcrites ci-dessous sont spcifiques aux arbres binaires. Soit S un ensemble, soit x un lment de S, g, d, t et u des arbres binaires dcors par des lments de S, o t nest pas une feuille.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

80

Manuel de rfrence du langage B - Version 1.8.6 reprsente larbre binaire compos dun seul nud portant la valeur x, bin (g, x, d) reprsente larbre binaire dont la racine porte la valeur x, et dont les fils gauche et droit de la racine sont les arbres g et d, left (t) reprsente le sous arbre gauche de larbre t, right (t) reprsente le sous arbre droit de larbre t, infix (u) reprsente laplatissement infix des lments de S ports par larbre t, dans une suite. Cette suite se dfinit de manire rcursive. Si t est une feuille, prefix (t) est la suite contenant la valeur associe au nud feuille. Sinon prefix (t) sobtient en concatnant la suite infixe du sous arbre gauche de t, de la suite contenant la valeur associe la racine de t et de la suite infixe du sous arbre droit de t.
bin (x)

Exemples Soit lensemble numr : S = {a, b, c, d, e}, Soit larbre B portant des lments de S :
B = { [] m a, [1] m b, [1, 1] m c, [1, 2] m d, [2] m a, [2, 1] m d, [2, 2] m e, [2, 2, 1] m b, [2, 2, 2] m a}
1

a b
1 2 1 2

d d
1

e
2

B = bin ( bin (bin (c), b, bin (d)), a, bin (bin (d), a, bin (bin (b), e, bin (a))))
left (B) = { [] m b, [1] m c, [2] m d } right (B) = { [] m a, [1] m d, [2] m e, [2, 1] m b, [2, 2] m a } infix (B) = [c, b, d, a, d, a, b, e, a]

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions

81

6 SUBSTITUTIONS
Syntaxe
Substitution ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_choix_non_born | Substitution_dfinition_locale | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_squence | Substitution_appel_opration | Substitution_simultane | Substitution_tant_que

Description Les substitutions sont des notations mathmatiques permettant de modliser la transformation de prdicats, dfinis dans les chapitres prcdents. Soient S une substitution et P un prdicat. Alors, la notation : [S]P (lire la substitution S tablit le prdicat P ) reprsente le prdicat obtenu aprs transformation de P par la substitution S. Le vocabulaire suivant est galement employ pour dsigner cette transformation : on parle de ltablissement par la substitution S de la postcondition P. On parle aussi de lapplication de la substitution S P. Les substitutions modlisent laspect dynamique des modules B : linitialisation et les oprations, puisquelles permettent dtablir comment les proprits portant sur les donnes du module sont transformes par ses oprations. Exemple Voici une forme simple de la substitution devient gal . Soient x et y des variables entires, alors :
[ x := 3 ] ( y + x < 0 )

dsigne le prdicat obtenue aprs le remplacement dans le prdicat y + x < 0 de toutes les occurrences libres de la variable x par lexpression 3. On obtient alors le prdicat :
y+3<0

Ainsi lapplication de cette substitution devient gal correspond bien lapplication dune substitution en ce sens que la valeur de x dans le prdicat y + x < 0 est remplace par 3.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

82

Manuel de rfrence du langage B - Version 1.8.6

Substitutions gnralises Lensemble des substitutions utilisables dans le langage B est dcrit par le langage des substitutions gnralises. Chaque substitution gnralise se dfinit en prcisant quel est le prdicat obtenu aprs application de la substitution un prdicat quelconque. Dans les chapitres suivants, on donne la description dtaille des substitutions gnralises. En voici la liste :
Oprateur ou mot rserv BEGIN skip

Nom de la production grammaticale Substitution bloc Substitution identit Substitution devient gal Substitution devient tel que Substitution devient lment de Substitution prcondition Substitution assertion Substitution choix born Substitution conditionnelle Substitution slection Substitution cas Substitution choix non born Substitution dfinition locale Substitution variable locale Substitution squence Substitution tant que Substitution appel dopration Substitution simultane

:= :( ) :
PRE ASSERT CHOICE IF SELECT CASE ANY LET VAR

;
WHILE

c ||

Utilisation des substitutions Les substitutions gnralises sont utilises dans le Langage B afin de dcrire le corps de linitialisation et des oprations dun composant (cf. 7.22 La clause INITIALISATION et 7.23 La clause OPERATIONS). Le mcanisme de transformation dun prdicat par une substitution permet de gnrer de manire systmatique les obligations de preuves concernant linitialisation et les oprations. Par exemple, pour quune machine abstraite soit smantiquement correcte, il faut dmontrer que chaque opration de la machine prserve linvariant. Pour ce faire, on gnre une obligation de preuve avec comme hypothse (parmi dautres) linvariant de la machine et comme but le prdicat obtenu aprs transformation de linvariant par la substitution dfinissant lopration. De mme on engendre des obligations de preuves qui permettent de dmontrer ltablissement par linitialisation de linvariant et la conservation de la spcification dune opration lors de son raffinement.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions

83

Non dterminisme Une substitution possde un comportement non dterministe si elle dcrit plusieurs comportements possibles sans prciser lequel sera effectivement choisi. En B, les substitutions des machines et des raffinements peuvent tre non dterministes. Le non dterminisme dcrot lors du raffinement. Les substitutions des implantations doivent tre dterministes. Dans les sections suivantes, les substitutions gnralises sont prsentes les unes aprs les autres. Pour chaque substitution, on donne son nom, sa syntaxe, ventuellement ses rgles de typage, ses rgles de porte, ses restrictions smantiques, ses conditions de bonne dfinition, sa description et un exemple.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

84 6.1

Manuel de rfrence du langage B - Version 1.8.6 Substitution bloc

Syntaxe
Substitution_bloc ::= "BEGIN" Substitution "END"

Dfinition Soient S une substitution et P un prdicat, alors :


BEGIN S END = S

Description La substitution bloc parenthse une substitution. On peut ainsi grouper dans un seul bloc plusieurs substitutions ralises en squence ou en parallle. Exemples
BEGIN

x := x + 1 ; y := x2
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.2 Substitution identit

85

Syntaxe
Substitution_identit ::= "skip"

Dfinition Soit P un prdicat, alors :


[ skip ] P P

Description La substitution identit ne modifie pas le prdicat sur lequel elle est applique. Elle est notamment utilise pour dcrire que certaines branches dune substitution IF, CASE ou SELECT ne modifient pas les variables.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

86 6.3

Manuel de rfrence du langage B - Version 1.8.6 Substitution devient gal

Syntaxe
Substitution_devient_gal ::= +"," +"," ":=" Expression Ident_ren +"," | Ident_ren "(" Expression ")" ":=" Expression + | Ident_ren ("" Ident ) ":=" Expression

Dfinitions 1. Soit x une variable, e une expression et P un prdicat, alors :


[ x := e ] P

2.

est le prdicat obtenu en remplaant toutes les occurrences libres de x dans P par e. La notion doccurrence libre ou lie est dfinie dans [B-Book] 1.3.3. Soient x et y des variables modifiables, E et F des expressions de mme type que x et y et P un prdicat. Enfin, soit z une variable intermdiaire diffrente de x et de y et non libre dans E, F et P. Alors :
[x, y := E, F] P [z := F][x := E][y := z] P

3. 4.

La construction dune substitution devient gal multiple pour une liste de plus de deux variables se dfinit alors de manire itrative. Soit f une fonction, x et y des expressions et P un prdicat. Alors :
[f (x) := y] P [f := f + {x m y}] P

Soit n un entier suprieur ou gal 1 et i un entier compris entre 1 et n. Soient rc une donne record de type struct (Ident1 : T1, , Identn : Tn), y une expression et P un prdicat. Alors :
[rcIdenti := y]P [rc := rec (Ident1 : rcIdent1, , Identi : y, ..., Identn : rcIdentn)]P

Cette dfinition s'tend aux accs imbriqus des champs de records. Nous donnons la dfinition pour deux niveaux d'accs. Soient rc une donne record de type struct (c11 : T11, , ci1 : struct (c12 : T12, , cj2 : Tj2, cm2 : Tm2), ..., cn1 : Tn1), y une expression et P un prdicat. Alors :
[rcci1cj2 := y]P [rc := rec ( c11 : rcc11, , ci1 : rec (c12 : rcci1c12, , cj2 : y, ..., cm2 : rcci1cm2), ..., cn1 : rccn1)]P

Rgles de typage Dans la substitution x := e, x et e doivent tre du mme type T. Dans la substitution x1,.., xn := e1, ..., en, alors chaque xi doit tre du mme type que ei. Dans la substitution f (x1, , xn) := e, f doit tre de type P(T1 * * Tn * T0). Alors, chaque xi doit tre de type Ti et e doit tre de type T0. Dans la substitution rcIdenti := y, rc doit tre de type struct (Ident1 : T1, , Identn : Tn). Alors, y doit tre de type Ti. Cette rgle s'tend aux accs imbriqus de champs de records. Dans le cas de deux accs, la rgle devient : dans la substitution rcci1cj2 := y, rc doit tre de type struct (c11 : T11, , ci1 : struct (c12 : T12, , cj2 : Tj2, cm2 : Tm2), ..., cn1 : Tn1). Alors, y doit tre de type Tj2.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions

87

Restrictions 1. Dans le cas d'une substitution devient gal d'une liste de variables, les variables doivent tre deux deux distinctes. 2. Dans le cas d'une substitution devient gal d'une liste de variables par une liste d'expressions, le nombre des variables doit tre identique au nombre des expressions. 3. Chaque variable dbutant une substitution devient gal doit tre une donne modifiable, cest--dire accessible en criture selon les rgles de visibilit donnes en Annexe C Tables de visibilit. Description La substitution devient gal remplace une variable par une expression. Elle est dfinie sous plusieurs formes : 1. substitution devient gal pour une variable La substitution x := E remplace les occurrences de la variable x par lexpression E. 2. substitution devient gal pour une liste de variables La substitution devient gal multiple, pour une liste de variables. Une telle substitution multiple correspond une liste de substitutions devient gal pour une variable simples effectues simultanment. 3. substitution devient gal pour un lment de fonction La substitution devient gal pour un lment de fonction est une abrviation pour remplacer un lment dune fonction par une expression. La notation, f (x) := y, dsigne en fait la substitution devient gal de f avec elle-mme, surcharge pour llment dindice x par la valeur de lexpression y. 4. substitution devient gal pour un record La substitution devient gal pour un champ d'un record est une abrviation pour le remplacement d'un champ d'une variable record par une expression. La notation rcIdenti dsigne en fait la substitution devient gal de rc avec une expression donne record en extension de mme type que rc dont la valeur du champ Identi vaut y et dont la valeur des autres champs reste inchange. Dans le cas o une variable record contient un champ record, on tend cette dfinition rcursivement, l'accs imbriqu de plusieurs champs de la variables records. Exemples
x := y + 1 ; tab := {(0 m 3), (1 m 1), (2 m -7)} ; tab (1) := 12 ; tab2 := tab3 ; u, v, w := 0, 0, 0 ; p, q := q, p ; tab4 (x + 2) := 1 ; rcc2 := FALSE ; rdvDateJour := 13

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

88 6.4

Manuel de rfrence du langage B - Version 1.8.6 Substitution prcondition

Syntaxe
Substitution_prcondition ::= "PRE" Prdicat "THEN" Substitution "END"

Dfinition Soient P et R des prdicats et S une substitution.


[PRE P THEN S END] R P [S] R

Restriction 1. La substitution prcondition n'est pas une substitution d'implantation. Description La substitution prcondition fixe les prconditions sous lesquelles une opration est appele. Lobligation de preuve de conservation de linvariant I dune opration dfinie par une substitution prcondition PRE P THEN S END est la suivante : I [PRE P THEN S END] I On peut cependant ajouter lhypothse P I puisque, par dfinition, une telle opration ne peut tre appele que sous sa prcondition (cf. paragraphe suivant). Lobligation de preuve devient ds lors : (I P) [PRE P THEN S END] I cest dire en dfinitive : (I P) [S] I Lors de lappel dune opration possdant une prcondition PRE P THEN S END, lapplication de la substitution prcondition correspond la preuve de la prcondition P et lapplication de la substitution S. Si la prcondition nest pas prouve, alors la substitution ne se termine pas. Autrement dit, le comportement dcrit par une substitution avec prcondition nest garanti que si, dans son contexte dutilisation, la prcondition est vraie. Il faut bien distinguer la substitution prcondition de la substitution conditionnelle IF. La premire nest utilisable que si le prdicat est valide, alors que la seconde est toujours ralise, mais son rsultat dpend de la validit dun prdicat. Exemple
PRE

x NAT1
THEN

x := x - 1
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.5 Substitution assertion

89

Syntaxe
Substitution_assertion ::= "ASSERT" Prdicat "THEN" Substitution "END"

Dfinition Soient P et R des prdicats et S une substitution.


[ASSERT P THEN S END] R P ( P y [S] R)

Description La substitution assertion ASSERT P THEN S END permet dappliquer la substitution S sous lassertion que le prdicat P est vrai. Cette substitution est trs proche de la substitution prcondition. Comme dans le cas de la prcondition, si le prdicat P nest pas tabli, alors la substitution choue. Cependant elle prsente lintrt de mettre en hypothse P pour lapplication de la substitution S, ainsi que pour les substitutions qui suivent S jusqu la fin du corps de lopration ou de linitialisation dans laquelle elle est employe. Le rle des substitutions prcondition et assertion diffre. Lutilisation principale dune prcondition est de typer et dexprimer des proprits concernant les paramtres dentre dune opration alors que lutilisation dune substitution assertion est de fournir au sein dune opration des hypothses qui pourront faciliter la preuve de lopration. La substitution assertion peut savrer utile lors de la preuve du raffinement dune opration contenant des structures conditionnelles. Si lopration et lopration raffine contiennent toutes les deux des substitutions IF ayant des conditions quivalentes, alors indiquer cette quivalence dans une substitution assertion permet de montrer immdiatement que les obligations de preuve portant sur des cas de raffinement croiss (cas o on a en hypothse la condition dun des IF et la ngation de la condition de lautre IF) sont trivialement fausses. En contrepartie, il faut tablir lassertion. Exemple
ASSERT

x<5 y=0
THEN

x := x - 5
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

90 6.6

Manuel de rfrence du langage B - Version 1.8.6 Substitution choix born

Syntaxe
Substitution_choix_born ::= "CHOICE" Substitution ( "OR" Substitution ) "END"
*

Dfinition Soient S1, ..., Sn des substitutions (avec n 2) et P un prdicat. Alors la substitution CHOICE se dfinit par :
[CHOICE S1 OR ... OR Sn END] P [S1] P ... [Sn] P

Restriction 1. La substitution choix born n'est pas une substitution d'implantation. Description La substitution choix born permet de dfinir un nombre fini de comportements possibles sans prciser lequel sera effectivement implant. Elle dfinit donc un comportement non dterministe. Exemple
CHOICE

x1 := x1 + 1
OR

x1 := x1 - 1
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.7 Substitution conditionnelle IF

91

Syntaxe
Substitution_conditionnelle ::= "IF" Prdicat "THEN" Substitution * ( "ELSIF" Prdicat "THEN" Substitution ) [ "ELSE" Substitution ] "END"

Dfinition Soient P1, P2, ..., Pn et R des prdicats (avec n 1) et soient S1, S2, ..., Sn et T des substitutions, alors : 1. [IF P1 THEN S1 ELSE T END]R (P1 y [S1]R) (P1 y [T]R) 2. IF P1 THEN S1 END = IF P1 THEN S1 ELSE skip END 3. [IF P1 THEN S1 ELSIF P2 THEN S2 ... ELSIF Pn THEN Sn ELSE T END]R
(P1 y [S1]R) ((P1 P2) y [S2]R) ... ((P1 ... Pn-1 Pn) y [Sn]R) ((P1 ... Pn) y [T]R)

4.

IF P1 THEN S1 ELSIF P2 THEN S2 ... ELSIF Pn THEN Sn END = IF P1 THEN S1 ELSIF P2 THEN S2 ... ELSIF Pn THEN Sn ELSE skip END

Description La substitution conditionnelle IF dfinit plusieurs comportements en fonction de la validit dun ou de plusieurs prdicats. Le comportement dfini par la substitution conditionnelle IF est dterministe. La substitution conditionnelle IF est dfinie selon plusieurs formes : 1. IF P1 THEN S1 ELSE T END Si le prdicat P1 est vrai alors la substitution S1 sapplique, sinon la substitution T sapplique. IF P1 THEN S1 END 2. La branche ELSE dune substitution IF est facultative. Si elle est absente, elle reprsente par dfaut la substitution identit. 3. IF P1 THEN S1 ELSIF P2 THEN S2 ... ELSIF Pn THEN Sn ELSE T END La prsence dune branche ELSIF dans une substitution IF quivaut imbriquer une autre substitution IF dans la branche ELSE du premier IF. Il est possible davoir un nombre quelconque de branches ELSIF dans une mme substitution IF. 4. IF P1 THEN S1 ELSIF P2 THEN S2 ... ELSIF Pn THEN Sn END Lorsquune substitution IF possde un nombre quelconque de branches ELSIF et pas de branche ELSE explicite, cette substitution est dfinit par dfaut avec une branche ELSE contenant la substitution identit. Exemples
IF x { 2, 4, 8 } THEN

x := x / 2
END ;

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

92

Manuel de rfrence du langage B - Version 1.8.6

IF y + z < 0 THEN

y := - z
ELSE

y := 0
END ; IF v = 0 THEN

signe := 0
ELSIF v > 0 THEN

signe := 1
ELSE

signe := -1
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.8 Substitution slection

93

Syntaxe
Substitution_slection ::= "SELECT" Prdicat "THEN" Substitution * ( "WHEN" Prdicat "THEN" Substitution ) [ "ELSE" Substitution ] "END"

Dfinition Soient P1, P2, ..., Pn et R des prdicats, avec n > 1. Soient S1, S2, ..., Sn et T des substitutions, alors :
1. 2. 3. 4. [SELECT P1 THEN S1 WHEN P2 THEN S2 ... WHEN Pn THEN Sn END] R ( P1 y [S1] R ) ( P2 y [S2] R ) ... ( Pn y [ Sn ] R) [SELECT P1 THEN S1 WHEN P2 THEN S2 ... WHEN Pn THEN Sn ELSE T END] R ( P1 y [S1] R) ( P2 y [S2] R) ... ( Pn y [Sn] R) (( P1 P2 ... Pn ) y [T] R ) [SELECT P1 THEN S1 END] R P1 y [S1] R P1 y [S1] R ( P1 y [T] R )

[SELECT P1 THEN S1 ELSE T END] R

Restriction 1. La substitution SELECT n'est pas une substitution d'implantation. Description La substitution SELECT dfinit pour un programme diffrents comportements possibles en fonction de la validit de prdicats. Chaque branche de la substitution SELECT dcrit lun de ces cas. La branche comporte un prdicat et une substitution. Si le prdicat de cette branche est vrai, alors la substitution peut sappliquer. Si tous les prdicats sont faux et que la substitution SELECT se termine par une branche ELSE, alors la substitution de la branche ELSE sapplique. Si les prdicats des diffrentes branches ne sexcluent pas mutuellement, plusieurs comportements sont possibles et il nest pas prcis lequel sera effectivement implant. Dans ce cas le comportement de la substitution SELECT est non dterministe. Dautre part, si aucun des prdicats nest valide et si la branche ELSE nexiste pas, alors la substitution est non implmentable. Exemple
SELECT x 0 THEN

y := x2 WHEN x 0 THEN y := - x2
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

94 6.9

Manuel de rfrence du langage B - Version 1.8.6 Substitution condition par cas

Syntaxe
Substitution_cas ::= "CASE" Expression "OF" +"," "EITHER" Terme_simple "THEN" Substitution +"," * "THEN" Substitution ) ( "OR" Terme_simple [ "ELSE" Substitution ] "END" "END"

Dfinitions Soient E une expression, L1, L2, ..., Ln des listes de constantes littrales distinctes, avec n 1. Soient S1, S2, ..., Sn et T des substitutions, alors :
1. CASE E OF EITHER L1 THEN S1 OR L2 THEN S2 ... OR Ln THEN Sn END END = SELECT E {L1} THEN S1 WHEN E {L2} THEN S2 WHEN ... WHEN E {Ln} THEN Sn
ELSE skip END

2. CASE E OF EITHER L1 THEN S1 OR L2 THEN S2 ... OR Ln THEN Sn ELSE T END END = SELECT E {L1} THEN S1 WHEN E {L2} THEN S2 WHEN ... WHEN E {Ln} THEN Sn ELSE T END

Rgle de typage Dans une substitution CASE, lexpression ainsi que les listes de constantes des branches EITHER et OR doivent toutes tre du mme type. Ce type doit tre un type de base sauf le type STRING. Restriction 1. Les termes simples de chaque branche EITHER et OR doivent tre des constantes littrales (entiers littraux, numrs littraux ou boolens littraux) deux deux distinctes, telles que chaque branche soit incompatible avec les autres. Description La substitution CASE permet de dfinir pour un programme diffrents comportements possibles en fonction de la valeur dune expression. Chaque branche EITHER et OR est constitue dune liste non vide de constantes littrales. Si la valeur de lexpression appartient lune des branches, alors la substitution de cette branche est excute. Sinon la substitution de la branche ELSE est applique, si cette dernire branche est absente, elle ralise par dfaut la substitution identit. Le comportement de cette substitution est donc dterministe et toujours faisable.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions Exemple
CASE x / 10 OF EITHER 0 THEN

95

x := 0
OR 2, 4, 8 THEN

x := 1
OR 3, 9 THEN

x := 2
ELSE

x := -1
END END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

96

Manuel de rfrence du langage B - Version 1.8.6

6.10 Substitution choix non born Syntaxe


Substitution_choix_non_born ::= "ANY" Ident
+","

"WHERE" Prdicat "THEN" Substitution "END"

Dfinition Soient X une liste non vide de variables deux deux distinctes, S une substitution et P et R deux prdicats, alors :
[ANY X WHERE P THEN S END] R X . (P y [S] R)

Rgle de porte Dans une substitution ANY X WHERE P THEN S END, la porte de la liste didentificateurs X est le prdicat P et la substitution S. Restrictions 1. La substitution ANY n'est pas une substitution d'implantation. 2. Les identificateurs introduits dans une substitution ANY doivent tre deux deux distincts. 2.3.Les variables X introduites par la substitution ANY X WHERE P THEN S END doivent tre types par un prdicat de typage de donnes abstraites (cf. 3.3 Typage des donnes abstraites), situ dans une liste de conjonctions au plus haut niveau d'analyse syntaxique de P. Ces variables ne peuvent pas tre utilises dans P avant d'avoir t types. Description La substitution ANY X WHERE P THEN S END permet dutiliser dans la substitution S les donnes abstraites dclares dans la liste X et vrifiant le prdicat P. Si plusieurs valeurs satisfont le prdicat P la substitution dfinit alors un comportement non dterministe. Les donnes abstraites de la liste X sont accessibles en lecture, mais pas en criture dans S, car ce ne sont pas des variables locales mais des donnes abstraites dfinies par le prdicat P. Exemple
ANY r1, r2 WHERE r1 NAT r2 NAT

r12 + r22 = 25
THEN

SommeR := r1 + r2
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.11 Substitution dfinition locale Syntaxe


Substitution_dfinition_locale ::= +"," "BE" "LET" Ident +"" ( Ident "=" Expression ) "IN" Substitution "END"

97

Dfinition Soient x1, ..., xn une liste non vide didentificateurs deux deux distincts avec n > 1, E1, ..., En une liste dexpressions et S une substitution, alors :
LET x1, ..., xn BE x1 = E1 ... xn = En IN S END = ANY x1, ..., xn WHERE x1 = E1 ... xn = En THEN S END

Restrictions 1. La substitution LET n'est pas une substitution d'implantation. 2. Les identificateurs introduits dans une substitution LET doivent tre deux deux distincts. 3. Chaque identificateur xi introduit dans une substitution LET L BE P IN S END doit tre dfini une et une seule fois laide dun prdicat de typage de donne abstraite de la forme xi = Ei. 4. Seuls les identificateurs xi introduits aprs le mot rserv LET peuvent apparatre en partie gauche des prdicats introduits par le mot rserv BE. Rgle de porte Dans une substitution LET L BE P IN S END, les identificateurs de la liste L sont accessibles en partie gauche des prdicats de typage qui composent le prdicat P, mais pas dans les expressions en partie droite et ils sont accessibles en lecture seulement dans la substitution S. Description La substitution LET L BE P IN S END introduit une liste de donnes abstraites L dont la valeur est donne par le prdicat P et qui peuvent tre utiliss en lecture dans la substitution S. Le prdicat P est constitu dune liste de conjonctions de la forme xi = Ei o xi est un identificateur de la liste L et o Ei est une expression. Chaque identificateur xi doit tre dfinit une et une seule fois dans P, son expression associe Ei ne doit utiliser aucun des identificateurs de L. Pour dfinir des identificateurs qui dpendent dautres identificateurs, il suffit dutiliser deux substitutions LET imbriques. Les identificateurs introduits par la substitution LET peuvent tre utiliss en lecture seulement dans la substitution S.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

98 Exemples

Manuel de rfrence du langage B - Version 1.8.6

LET r1, r2 BE

r1 = (Var1 + Var2) / 2 r2 = (Var1 - Var2) / 2


IN

SommeR := r1 + r2 || DifferenceR := r1 - r2
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.12 Substitution devient lment de Oprateur


:

99

Devient lment de

Syntaxe
Substitution_devient_elt_de ::= Ident_ren
+","

":" Expression

Dfinition Soient E un ensemble, X une liste de variables modifiables non vide. Soit Y une liste de variables intermdiaires ayant autant dlments que X mais non libre dans X et E. Alors :
X : E = ANY Y WHERE Y E THEN X := Y END

Rgle de typage Dans la substitution X : E, si X est de type T alors E doit tre de type P(T). Restrictions 1. La substitution devient lment de n'est pas une substitution d'implantation. 2. Les identificateurs introduits dans une substitution devient lment de doivent tre deux deux distincts. 2.3.Les variables X dune substitution X :: E doivent tre des donnes modifiables. Description La substitution devient lment de permet de remplacer des variables par des valeurs appartenant un certain ensemble. Les variables doivent tre deux deux distinctes. Si lensemble a plusieurs valeurs, la substitution dfinit alors un comportement non dterministe. Exemples
i1 : INT ; b1 : BOOL ; x1 : -10 .. 10 ; y1, y2 : {1, 3, 5} NAT

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

100

Manuel de rfrence du langage B - Version 1.8.6

6.13 Substitution devient tel que Oprateur :( ) Syntaxe


Substitution_devient_tel_que ::= Ident_ren
+","

Devient tel que

":" "(" Prdicat ")"

Dfinition Soient P un prdicat et X une liste de variables modifiables deux deux distinctes. Soit Y une liste de variables intermdiaires ayant autant dlments que X, ne figurant pas dans X et non libre dans P, alors : 1. X : (P) = ANY Y WHERE [X := Y] P THEN X := Y END Soit une variable y de X. La notation y$0 est utilisable au sein de P. Elle reprsente la valeur de la variable y avant lapplication de la substitution devient tel que , alors : 2. X :(P) = ANY Y WHERE [X, y$0 := Y, y]P THEN X := Y END Restrictions 1. La substitution devient tel que n'est pas une substitution d'implantation. 2. Les variables X dune substitution X : (P) doivent tre accessibles en criture. 3. Dans lexpression X : (P), les variables de la liste X, doivent tre types dans le prdicat P laide de prdicats de typage de donnes abstraites situs dans une liste de conjonctions, au plus haut niveau danalyse syntaxique de P. Description La substitution devient tel que permet de remplacer des variables par des valeurs qui satisfont un prdicat donn. Les variables doivent tre deux deux distinctes. Si plusieurs valeurs satisfont le prdicat, la substitution ne prcise pas laquelle est effectivement choisie, son comportement est alors non dterministe. La valeur avant substitution dune variable y de X peut tre rfrence par y$0 dans le prdicat P. Cette possibilit est une facilit dcriture qui vite dintroduire une variable intermdiaire dans une substitution ANY. Exemples
x : (x : INTEGER x > -4 x < 4) ; a, b : (a : INT b : INT a2 + b2 = 25) ; y : (y : NAT y$0 > y)

Cette dernire substitution aurait pu scrire sans utiliser la notation $0, de la manire suivante :
ANY y2 WHERE

y2 Z y > y2
THEN

y := y2
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.14 Substitution variable locale Syntaxe


Substitution_variable_locale ::= "VAR" Ident
+","

101

"IN" Substitution "END"

Dfinition Soient X une liste de variables deux deux distinctes, S une substitution et P un prdicat, alors :
[VAR X IN S END] P X . [S] P

Rgle de porte Dans une substitution VAR X IN S END, les identificateurs de la liste X sont accessibles en lecture et en criture dans la substitution S. Restrictions 1. La substitution VAR n'est pas une substitution de machine abstraite. 2. Les variables introduites par une substitution VAR doivent tre deux deux distinctes. 3. En implantation, les variables locales doivent tre initialises avant dtre lues. Pour quune instruction conditionnelle ou une instruction cas initialise une variable locale, chaque branche de linstruction doit initialiser la variable locale. Description La substitution VAR L IN S END introduit une liste non vide de variables locales L deux deux distinctes. Ces variables locales sont utilisables dans la substitution S. Elles sont types lors de leur premire utilisation dans lordre dcriture des substitutions constituant S. Les mots rservs IN et END parenthsent la substitution S comme une substitution de bloc BEGIN END. Exemples
VAR varLoc1, varLoc2 IN

varLoc1 := x1 + 1 ; varLoc2 := 2 varLoc1 ; x1 := varLoc2


END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

102

Manuel de rfrence du langage B - Version 1.8.6

6.15 Substitution squencement Oprateur


;

Squencement

Syntaxe
Substitution_squence ::= Substitution ";" Substitution

Dfinition Soient S et T des substitutions et P un prdicat, alors :


[S ; T] P [S][T] P

Ce qui signifie que le prdicat obtenu par application de la substitution squence S ; T sur le prdicat P est le prdicat obtenu par application de S sur le rsultat de lapplication de T sur P. Restriction 1. La substitution squencement n'est pas une substitution de machine abstraite. Description La substitution squencement correspond lapplication en squence de deux substitutions. Lapplication un prdicat des substitutions regroupes dans un squencement de substitutions se droule dans lordre inverse du squencement. Ce rsultat se retrouve intuitivement en considrant lexemple suivant : [x := 0 ; x := 1] P. Daprs la dfinition de la substitution squencement, on commence par remplacer toutes les occurrences de x dans P par 1, puis on remplace les occurrences de x (qui ont disparues) dans le prdicat obtenu par 0, ce qui est sans effet. Considrons maintenant seulement la substitution de squencement, sa signification oprationnelle est que x devient dabord gal 0 puis ensuite 1, ainsi la valeur finale de x est bien 1, donc en appliquant la substitution squencement P, on obtient le mme rsultat que prcdemment. Exemples
z := x ; x := y ; y := z

Lexemple prcdent change les valeurs des variables x et y.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.16 Substitution appel dopration Oprateur c Syntaxe


Substitution_appel_opration ::= [ Ident_ren
+","

103

Appel dopration

"c" ] Ident_ren [ "(" Expression

+","

")" ]

Dfinitions 1. Soit op une opration (non locale ou locale) sans paramtre de sortie et sans paramtre dentre, dfinie par op = S, alors la signification dun appel de op est :
[op] P [S] P

2.

Soit op une opration (non locale ou locale) sans paramtre de sortie et avec des paramtres dentre, dfinie par op (X) = S o X est une liste didentificateurs dsignant les paramtres formels dentre de op, et soit E une liste dexpressions reprsentant les paramtres dentre effectifs de op, alors la signification dun appel de op (E) est :
[op (E)] P [X := E ; S] P

3.

Soit op une opration (non locale ou locale) avec paramtres de sortie et sans paramtre dentre, dfinie par Y c op = S, o Y est une liste didentificateurs dsignant les paramtres formels de sortie de op, et soit R une liste didentificateurs ventuellement renomms dsignant les paramtres effectifs de sortie de op, alors la signification dun appel de R c op est :
[R c op] P [S ; R := Y] P

4.

Si op est une opration (non locale ou locale) avec des paramtres de sortie et des paramtres dentre, dfinie par Y c op (X) = S, la signification dun appel de R c op (E) est :
[R c op (E)]P [X := E ; S ; R :=Y] P

Rgles de typage Dans les appels dopration op (E) et R c op (E), E est une liste dexpressions dont le type doit tre identique au type des paramtres dentre de lopration op, dfini dans la machine abstraite dans laquelle cette opration est dclare. Dans les appels dopration R c op et R c op (E), R est une liste de noms de donnes dont le type doit tre identique au type des paramtres de sortie de lopration op, dfini dans la spcification dans laquelle cette opration est dclare. Restriction 1. Une variable ne doit pas tre utilise plusieurs fois comme paramtre de retour effectif dun appel dopration. Par exemple, lappel dopration x, x c op est interdit. Description La substitution appel dopration permet dappliquer la substitution dune opration (non locale ou locale), en remplaant les paramtres formels par des paramtres

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

104

Manuel de rfrence du langage B - Version 1.8.6 effectifs. Les paramtres dentres ventuels sont des expressions et les paramtres de sortie ventuels sont des donnes accessibles en criture. Lappel dopration se dfinit sous quatre formes diffrentes, selon la prsence de paramtres dentre et de sortie.

Exemples
opa ; opb (x + 1, TRUE) ; res1, res2 c opc ; res, flag c opd (x)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.17 Substitution boucle tant que Syntaxe


Substitution_tant_que ::= "WHILE" Condition "DO" Instruction "INVARIANT" Prdicat "VARIANT" Expression "END"

105

Dfinition Soient P un prdicat, S une substitution, I et R des prdicats et V une expression. Si X reprsente la liste des variables libres apparaissant dans S et I et n une variable frache, cest--dire non libre dans V, I, P et S, alors :
[WHILE P DO S INVARIANT I VARIANT V END] R I X . (I P [S]I) X . (I V N) X . (I P [n := V ; S](V < n)) X . (I P R))

Rgle de typage Dans une substitution WHILE P DO S INVARIANT I VARIANT V END, le variant V doit tre de type Z. Restriction 1. La substitution tant que n'est pas une substitution de machine abstraite ni de raffinement. Description La substitution tant que ralise une boucle tant que . La substitution WHILE P DO S INVARIANT I VARIANT V END ralise la substitution S tant que le prdicat P reste vrai. Une boucle tant que doit se terminer au bout dun nombre fini ditrations. I est linvariant de la boucle. Cest un prdicat donnant des proprits sur les variables utilises dans la boucle. Linvariant de boucle permet de prouver qu chaque pas la boucle est possible et quelle donne bien le rsultat produit la sortie. Dans le cas o une variable y de labstraction de limplantation est colle par homonymie avec une variable concrte de limplantation ou bien avec une variable dune machine importe, alors il est possible dutiliser la notation y$0 dans linvariant de la boucle. La notation y$0 dsigne la valeur de y au dbut de lopration de limplantation, alors que y dsigne la valeur courante de la variable de limplantation ou de la machine importe. V est le variant de la boucle. Cest une expression entire qui permet de dmontrer que la boucle tant que se termine au bout dun nombre fini ditrations. Pour cela, il faut prouver que V est une expression entire, positive qui dcrot strictement chaque itration.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

106

Manuel de rfrence du langage B - Version 1.8.6 Dans le cas le plus gnral, la substitution WHILE peut tre prcde, en squence, dune substitution qui initialise les variables utilises dans la boucle. Elle prend alors la forme : T ; WHILE P DO S INVARIANT I VARIANT V END o T est la substitution dinitialisation.

Exemples
BEGIN

varLoc := var1 ; cpt := 0 END ; WHILE cpt < 5 DO varLoc := varLoc + 1 ; cpt := cpt + 1
INVARIANT

cpt NAT cpt 5 varLoc NAT varLoc = var1 + cpt


VARIANT

5 - cpt
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Substitutions 6.18 Substitution simultane Oprateur


||

107

Substitution simultane

Syntaxe
Substitution_simultane ::= Substitution "||" Substitution

Dfinition La substitution simultane se dfinit de manire inductive partir de certaines proprits et par rapport aux autres substitutions du langage. Soient S1, S2, S3, T et U des substitutions, x et y des variables distinctes, X une liste didentificateurs, E une expression, l1 et l2 des listes de constantes, P1, P2 et R des prdicats, alors : Proprits de la substitution simultane : 1. S1 || S2 = S2 || S1 2. S1 || (S2 || S3) = (S1 || S2) || S3 Dfinition de la substitution devient gal simultane : 3. x := E || y := F = x, y := E, F 4. [x := E || x := F] R e ! x' . ( (x' = E x' = F) y [x := x'] R) Dfinition de la substitution simultane par rapport aux autres substitutions : 5. skip || S = S 6. X :(P) || S = ANY Y WHERE [X := Y]P THEN X := Y || S END 7. X : E || S = ANY Y WHERE Y E THEN X := Y || S END 8. CHOICE S OR T END || U = CHOICE S || U OR T || U END 9. PRE P THEN S END || T = PRE P THEN S || T END 10. ASSERT P THEN S END || T = ASSERT P THEN S || T END 11. BEGIN S END || T = BEGIN S || T END 12. Si aucune variable lmentaire de X nest libre dans T, alors :
ANY X WHERE P THEN S END || T = ANY X WHERE P THEN S || T END

13. Si aucune variable lmentaire de X nest libre dans T, alors :


SELECT X THEN S1 WHEN P2 THEN S2 END || T = SELECT P1 THEN S1 || T WHEN P2 THEN S2 || T END

14. Si aucune variable lmentaire de X nest libre dans T, alors :


LET X BE P1 IN S1 END || T = LET X BE P1 IN S1 || T END

15. IF P1 THEN S1 ELSE S2 END || T = IF P1 THEN S1 || T ELSE S2 || T END 16. CASE E OF EITHER l1 THEN S1 OR l2 THEN S2 END =
CASE E OF EITHER l1 THEN S1 || T OR l2 THEN S2 || T END

17. Si aucune variable lmentaire de X nest libre dans T, alors :


VAR X THEN S END || T = VAR X THEN S || T END

Restriction 1. La substitution simultane n'est pas une substitution d'implantation. 2. Soient SX et TY des substitutions qui modifient les listes de variables X et Y (cette

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

108

Manuel de rfrence du langage B - Version 1.8.6 modification peut avoir lieu un niveau dimbrication quelconque dans les substitutions SX et TY, en particulier dans le corps dun appel dopration ; chaque variable de X et Y apparaissant finalement en partie gauche dune substitution devient gal , devient lment de , devient tel que ou comme paramtre de sortie dun appel dopration). Alors, il faut que les listes de variables X et Y soient disjointes. 3. Il est interdit dappeler simultanment deux oprations dcriture dune mme instance de machine incluse. En effet, mme si chaque appel d'opration prserve l'invariant de linstance de la machine incluse, il se peut que l'appel simultan de deux oprations brise cet invariant (cf. [B-Book] 7.2.3). 4. Dans une spcification dopration locale (cf. 7.24 La clause LOCAL_OPERATIONS), il est interdit dappeler simultanment deux oprations dune mme instance de machine importe.

Description La substitution simultane correspond lexcution simultane de deux substitutions. Le caractre de simultanit dnote le fait que les substitutions doivent pouvoir se raliser indpendamment lune de lautre. La substitution simultane est commutative et associative. La substitution simultane de deux substitutions S et T modifiants des variables diffrentes, se dfinit par la conjonction des prconditions et la conjonction des postconditions de S et T (cf. [B-Book] 7.1.1). Pour rester cohrent avec la prsentation des autres substitutions donne dans ce chapitre, nous donnons ici une dfinition par rapport aux autres substitutions du langage. Exemple
x := y || y := x

Dans lexemple ci-dessus, les valeurs des variables x et y sont changes.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

109

37 COMPOSANTS
7.1 Machine abstraite

Syntaxe
Machine_abstraite ::= "MACHINE" En-tte * Clause_machine_abstraite "END" Clause_machine_abstraite ::= Clause_constraints | Clause_sees | Clause_includes | Clause_promotes | Clause_extends | Clause_uses | Clause_sets | Clause_concrete_constants | Clause_abstract_constants | Clause_properties | Clause_concrete_variables | Clause_abstract_variables | Clause_invariant | Clause_assertions | Clause_initialisation | Clause_operations

Restriction 1. Une clause ne doit pas apparatre plus dune fois dans une machine abstraite. Description Une machine abstraite est un composant qui dfinit laide de diffrentes clauses, des donnes et leurs proprits ainsi que des oprations. Une machine abstraite constitue la spcification dun module B. Elle se compose dun en-tte et dun certain nombre de clauses. Lordre des clauses dans un composant nest pas impos. La description des clauses est donne par le tableau ci-dessous.
Clause
CONSTRAINTS SEES INCLUDES PROMOTES EXTENDS USES SETS CONCRETE_CONSTANTS ABSTRACT_CONSTANTS

Description dfinition du type et des proprits des paramtres scalaires formels liste des instances de machines vues liste des instances de machines incluses

Rf. 7.5 7.8 7.9

liste des oprations promues des instances de machines 7.10 incluses liste des instances de machines tendues liste des instances de machines utilises liste des ensembles abstraits et dfinition des ensemble numrs liste des constantes concrtes liste des constantes abstraites 7.11 7.12 7.13 7.14 7.15

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

110
Clause

Manuel de rfrence du langage B - Version 1.8.6


Description dfinition du type et des proprits des constantes de la machine liste des variables concrtes liste des variables abstraites dfinition du type et des proprits des variables dfinition de proprits dductibles de linvariant initialisation des variables liste et dfinition des oprations propres Rf. 7.16 7.18 7.19 7.20 7.21 7.22 7.23

PROPERTIES CONCRETE_VARIABLES ABSTRACT_VARIABLES INVARIANT ASSERTIONS INITIALISATION OPERATIONS

Utilisation Tables de visibilit Soit MA une machine abstraite. La table de visibilit suivante prcise le mode daccs de chaque constituant de MA (donne ou opration), dans les clauses de MA. Par exemple, nous voyons quune variable concrte peut tre lue dans les clauses INVARIANT et ASSERTIONS et peut tre lue et crite, cest--dire modifie, dans la clause INITIALISATION ou dans une opration. On appelle opration propre dun composant, une opration dont le corps est dfini dans le composant, au sein de la clause OPERATIONS. Les autres oprations du composant sont les oprations promues par le composant (cf. 7.10 La clause PROMOTES).
Clauses de MA CONSTRAINTS Constituants de MA Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites, non homonymes Variables concrtes, non homonymes Variables abstraites, non homonymes Oprations propres (non promues) visible Paramtres dINCLUDES / EXTENDS visible visible visible visible visible PROPERTIES INVARIANT / ASSERTIONS visible visible visible visible visible INITIALISATION / OPERATIONS visible visible visible visible - modifiable visible - modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 1.27.2 En-tte de composant Syntaxe


En-tte ::= Ident [ "(" Ident
+","

111

")" ]

Restrictions 1. Le nom dun composant doit tre unique dans le projet. 2. Les dclarations des paramtres formels dun raffinement ou dune implantation doivent tre syntaxiquement identiques aux dclarations que lon trouve dans la machine abstraite raffine par ces composants. 3. Le nom des paramtres ensembles ne doit pas comporter de caractre minuscule. 4. Le nom des paramtres scalaires doit comporter au moins un caractre minuscule. Description Len-tte dun composant dfinit le nom du composant et la liste de ses paramtres. Les paramtres formels dun composant sont recopis dans len-tte des diffrents raffinements du composant ainsi que dans son implantation. Ils paramtrent les instances de la machine abstraite. Il peut sagir soit densembles abstraits servant de base au typage (cf. 7.13 La clause SETS), soit de scalaires (cf. 7.5 La clause CONSTRAINTS). Utilisation Les paramtres formels sont visibles dans les clauses INVARIANT et ASSERTIONS, INCLUDES (comme paramtre effectif de machine abstraite incluse), ainsi que dans les clauses INITIALISATION et OPERATIONS. On notera que les paramtres formels ne sont pas visibles dans la clause PROPERTIES.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

112

Manuel de rfrence du langage B - Version 1.8.6

1.37.3 Raffinement Syntaxe


Raffinement ::= "REFINEMENT" En-tte Clause_refines * Clause_raffinement "END" Clause_raffinement ::= Clause_sees | Clause_includes | Clause_promotes | Clause_extends | Clause_sets | Clause_concrete_constants | Clause_abstract_constants | Clause_properties | Clause_concrete_variables | Clause_abstract_variables | Clause_invariant | Clause_assertions | Clause_initialisation | Clause_operations

Description Un raffinement est un composant qui raffine une machine abstraite ou un autre raffinement (cf. 8.2 Module B). Les clauses CONSTRAINTS et USES sont interdites dans un raffinement. Restriction 1. Une clause ne doit pas apparatre plus dune fois dans un raffinement. Utilisation Un raffinement peut tre rfrenc par son nom dans la clause raffinement, pour dclarer que ce dernier raffine le premier.

REFINES

dun autre

Tables de visibilit Soit Mn un raffinement. La table de visibilit suivante prcise le mode daccs de chaque constituant de Mn, dans les clauses de Mn.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants
Clauses de MN Constituants de MN Paramtres formels Ensembles, numrs littraux, constantes concrtes, non homonymes Constantes abstraites non homonymes Variables concrtes non homonymes Variables abstraites non homonymes Oprations propres (non promues) Paramtres dINCLUDES / EXTENDS visible visible visible PROPERTIES INVARIANT / ASSERTIONS visible visible

113
INITIALISATION / OPERATIONS visible visible

visible

visible

visible visible visible

visible visible - modifiable visible - modifiable

Soit MN-1 labstraction de MN, cest--dire le composant raffin par MN. La table de visibilit suivante prcise le mode daccs de chaque constituant de MN-1 disparaissant dans MN, dans les clauses de MN. On ne sintresse ici quaux donnes abstraites de MN-1 car les autres donnes sont conserves dans MN. Dans le cas de linitialisation et des oprations, on distingue la visibilit dans les prdicats des substitutions assertions (cf. 6.5 Substitution assertion) et dans le reste des substitutions.
Clauses de MN Constituants de MN-1 Constantes abstraites disparaissant dans MN Variables abstraites disparaissant dans MN Paramtres dINCLUDES / EXTENDS visible PROPERTIES INVARIANT / ASSERTIONS visible visible INITIALISATION / Substitutions OPERATIONS Prdicats dASSERT visible visible

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

114

Manuel de rfrence du langage B - Version 1.8.6

1.47.4 Implantation Syntaxe


Implantation ::= "IMPLEMENTATION" En-tte Clause_refines * Clause_implantation "END" Clause_implantation ::= Clause_sees | Clause_imports | Clause_promotes | Clause_extends_B0 | Clause_sets | Clause_concrete_constants | Clause_properties | Clause_values | Clause_concrete_variables | Clause_invariant | Clause_assertions | Clause_initialisation_B0 | Clause_operations_B0

Restriction 1. Une clause ne peut apparatre quune seule fois au plus dans une implantation. Description Une implantation est un composant qui constitue le dernier raffinement dune machine abstraite (cf. 8.2 Module B). Deux nouvelles clauses peuvent apparatre dans une implantation : la clause IMPORTS et la clause VALUES. La clause IMPORTS cre des instances concrtes de machines abstraites dans un projet. Les oprations de ces machines importes sont appeles dans les oprations de limplantation. La clause VALUES permet de donner une valeur aux ensembles abstraits et aux constantes concrtes de limplantation. La clause EXTENDS, correspond la clause IMPORTS dans une implantation alors quelle correspond la clause INCLUDES dans une machine abstraite ou un raffinement. Les clauses INITIALISATION et OPERATIONS diffrent dans une implantation et dans une machine abstraite ou un raffinement. Dans une implantation, ces clauses sont constitues dexpressions ou de substitutions concrtes (cf. 7.24 La clause LOCAL_OPERATIONS). Les clauses CONSTRAINTS, INCLUDES, USES, ABSTRACT_CONSTANTS et ABSTRACT_VARIABLES (ou VARIABLES) sont interdites dans une implantation.

Utilisation Tables de visibilit Soit Mn une implantation. La table de visibilit suivante prcise le mode daccs de chaque constituant de Mn, dans les clauses de Mn. Dans le cas de linitialisation et des oprations, on distingue lutilisation des constituants dans les parties non traduites (le

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

115

variant et linvariant de boucle tant que et le prdicat dune assertion), et dans les parties traduites (le reste des instructions). Cette table ne donne pas les rgles de visibilit des constantes concrtes de Mn homonymes avec des constantes concrtes de machines vues ou importes ni des variables concrtes de Mn homonymes avec des variables concrtes dinstances de machines importes. En effet, en cas dimplantation par homonymie de constantes ou de variables concrtes, celles-ci suivent les rgles de visibilit des machines vues (cf 7.8 La clause SEES)ou importes (cf 7.7 La clause IMPORTS). Erreur ! Source du renvoi introuvable. Soit MN-1 labstraction de MN. La table de visibilit suivante indique le mode daccs de chaque constituant de MN-1 disparaissant dans MN, dans les clauses de MN.
Clauses de MN
Paramtres dIMPORTS / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS Instructions Variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS Substitutions Prdicats d'ASSERT

Constituants de MN-1 Constantes abstraites Variables abstraites visible visible visible

visible visible

visible visible

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

116

Manuel de rfrence du langage B - Version 1.8.6

1.57.5 La clause CONSTRAINTS Syntaxe


Clause_constraints ::= "CONSTRAINTS" Prdicat

Restrictions 1. Chaque paramtre scalaire de la machine abstraite doit tre typ par un prdicat de typage des paramtres de machines (cf. 3.8 Typage des paramtres de machines) situ au premier niveau dune liste de conjonctions. Les paramtres scalaires ne peuvent pas tre utiliss dans la clause CONSTRAINTS avant davoir t typs. Description La clause CONSTRAINTS permet de typer les paramtres scalaires de la machine abstraite et dexprimer des proprits complmentaires, encore appeles contraintes, portant sur ces paramtres. Les paramtres de machine abstraite sont de deux sortes : les paramtres scalaires : le nom dun paramtre scalaire est un identificateur qui doit contenir au moins un caractre minuscule. Son type peut tre Z, BOOL ou un paramtre ensemble de la machine (voir ci-dessous), les paramtres ensembles : le nom dun paramtre ensemble est un identificateur qui ne doit pas contenir de caractre minuscule. Les paramtres ensembles sont des types de base (cf. 3.2 Les types B). Ils peuvent servir typer certains des paramtres scalaires de la machine. Utilisation Les paramtres formels ensembles dfinissent de nouveaux types, de manire similaire aux ensembles abstraits et aux ensembles numrs (cf. 7.13 La clause SETS). Le contrle de type interdit par consquent dexprimer dans la clause CONSTRAINTS quun paramtre ensemble est gal un intervalle dentiers, ou bien quun paramtre ensemble est contenu dans un autre, puisque les types en parties gauche et droite sont incompatibles. Exemple Dans lexemple ci-dessous, p1 est un paramtre entier, p2 est un paramtre boolen, p3 est un paramtre appartenant au paramtre ensemble ENS1. Par ailleurs ENS1 et ENS2 sont des paramtres ensembles.
MACHINE

MA ( p1, p2, p3, ENS1, ENS2 )


CONSTRAINTS p1 INT p2 BOOL

p3 ENS1 card (ENS1) = 10 ...


END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 1.67.6 La clause REFINES Syntaxe


Clause_refines ::= "REFINES" Ident

117

Restriction 1. La clause REFINES doit contenir le nom dune machine abstraite ou dun raffinement. Description La clause REFINES dun raffinement contient le nom du composant raffin par ce raffinement, cest--dire son abstraction.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

118

Manuel de rfrence du langage B - Version 1.8.6

1.77.7 La clause IMPORTS Syntaxe


Clause_IMPORTS ::= +"," +"," "IMPORTS" ( Ident_ren [ "(" Instanciation_B0 ")" ] ) Instanciation_B0 := Terme | Ensemble_entier_B0 | "BOOL" | Intervalle_B0

(cf. 3.5) (cf. 5.7)

Rgle de typage Dans le cas o une instance de machine importe possde des paramtres, les paramtres effectifs doivent respecter la rgle suivante. Les paramtres effectifs correspondant des donnes scalaires doivent tre de mme type que les paramtres formels de la machine importe tels quils sont stipuls dans la clause CONSTRAINTS de cette machine. Les paramtres effectifs correspondant des ensembles doivent tre de type P(T) o T est un type de base autre que STRING.

Restrictions 1. Les identificateurs dune clause IMPORTS doivent dsigner des machines abstraites. 2. Les identificateurs renomms ne peuvent avoir au plus quun prfixe de renommage. 3. Chaque nom de machine doit tre suivi dune liste de paramtres effectifs de mme nombre que les paramtres de la machine importe. 4. Si une constante concrte dune instance de machine importe par une implantation est homonyme une constante concrte de limplantation, alors les deux constantes homonymes dsignent la mme donne et elles doivent donc tre de mme type. 5. Si une variable concrte dune instance de machine importe par une implantation est homonyme une variable concrte de limplantation, alors les deux variables homonymes dsignent la mme donne et elles doivent tre de mme type. 6. Une instance de machine ne doit pas tre importe plusieurs fois dans un projet (cf. 8.3 Rgle n1 sur les liens IMPORTS). 7. Tout projet complet doit contenir un et un seul module qui nest jamais instanci par importation dans le projet (cf. 8.3 Rgle n2 sur les liens IMPORTS). 8. Un composant ne peut pas possder plusieurs liens sur une mme instance de machine. Par exemple, une implantation ne peut pas voir (cf. 7.8 Clause SEES) et importer une mme instance de machine (cf. 8.3 Rgle n6 sur les liens de dpendance). 9. Il ne doit pas exister de cycle dans le graphe de dpendance dun projet (cf. 8.3 Rgle n7 sur les liens de dpendance). Description Le lien dimportation entre une implantation et une instance de machine abstraite est un lien de composition. Il permet de raliser limplantation du module concern sur les instances de machines importes. Limplantation cre linstance de machine abstraite importe afin de se servir de ses donnes et de ses oprations pour implmenter ses propres donnes et oprations. Le module de limplantation est donc le pre de

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

119

IMPORTS).

linstance de module import dans le graphe dimportation du projet (cf. 8.3 lien Cette implantation est la seule implantation du projet qui possde le droit de modifier les variables de linstance de machine importe, par lintermdiaire des oprations adquates de la machine importe.

Utilisation La clause IMPORTS contient la dclaration de la liste des instances de machines importes. Il sagit soit du nom de la machine seul, qui rfrence linstance sans renommage de la machine (linstance de la machine est alors confondue avec celle-ci), soit du nom de la machine prcd dun renommage, qui dsigne linstance de la machine renomme (dans ce cas on peut avoir plusieurs instances de la machine, chaque instance correspondant un prfixe distinct). Si une instance de machine importe est paramtre, les paramtres effectifs de la machine doivent tre fournis, ce qui permet dinstancier les paramtres formels de la nouvelle instance de machine. Les paramtres dune machine abstraite sont dcrits dans la clause CONSTRAINTS (cf. 7.5 La clause CONSTRAINTS). Ce sont soit des scalaires, soit des ensembles de scalaires. Une Obligation de Preuve est gnre afin de prouver que les paramtres effectifs dune instance de machine importe respectent les contraintes de la machine. Instanciation des paramtres scalaires Un paramtre effectif scalaire dune instance de machine importe peut tre : un boolen littral TRUE ou FALSE, ou une instruction boolenne, un lment dun ensemble numr de limplantation ou dune instance de machine vue (cf. 7.8 La clause SEES), un paramtre formel scalaire de limplantation, une constante concrte de limplantation ou dune instance de machine vue, appartenant INT, BOOL ou un ensemble abstrait ou numr, une expression arithmtique forme de paramtres formels de limplantation, de constantes concrtes de limplantation ou dinstances de machines vues, et dentiers littraux. Les oprateurs arithmtiques permis sont +, -, *, /, mod, ab, succ et pred. Une Obligation de Preuve est gnre afin de prouver que chaque sous expression arithmtique est bien dfinie et que son rsultat appartient lensemble des entiers concrets INT (cf. 7.25.2 Les termes).

Instanciation des paramtres ensembles Linstanciation dun paramtre ensemble dune instance de machine importe peut tre : un paramtre formel ensemble de limplantation, un ensemble abstrait ou numr de limplantation ou dune instance de machine vue, une constante concrte de limplantation ou dune instance de machine vue, incluse dans Z ou dans un ensemble abstrait, un intervalle non vide de INT dont les bornes sont formes dexpressions arithmtiques similaires celles permises pour instancier les paramtres scalaires.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

120

Manuel de rfrence du langage B - Version 1.8.6

Exemple
MACHINE MACHINE

MA (E0 )
CONCRETE_CONSTANTS SETS

Msees COUL = { Rouge, Vert, Bleu }


CONCRETE _CONSTANTS

c1
PROPERTIES

c1 0 .. 10 ...
END

c2
PROPERTIES c2 INT END

IMPLEMENTATION

MA_i (E0 )
REFINES

MACHINE

MA
SEES

Mimports (ENS1, ENS2, ENS3) ...


END

Msees
IMPORTS

Mimports ( E0, COUL, c1 . . (c2 + 2))


VALUES

c1 = 2
... END

Visibilit Les paramtres formels des machines importes ne sont pas accessibles dans le composant qui importe. Les ensembles et les constantes concrtes sont accessibles dans les clauses PROPERTIES, VALUES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations de la machine. Les constantes abstraites sont accessibles dans les clauses PROPERTIES, INVARIANT, ASSERTIONS et dans les variants et invariants de boucle et dans le prdicat des instructions ASSERT des oprations et de linitialisation. Les variables sont accessibles en lecture dans les invariants et les assertions. Les variables concrtes sont, en outre, accessibles en lecture dans le corps de linitialisation et des oprations. Les variables abstraites sont accessibles uniquement dans les variants et invariants de boucle et dans le prdicat des instructions ASSERT des oprations et de linitialisation. Il est possible dutiliser les oprations dune machine importe dans linitialisation et dans les oprations de limplantation. Promotion des oprations Les oprations dune machine importe peuvent devenir automatiquement des oprations du composant qui ralise limportation. Il sagit du mcanisme de promotion dopration (cf. 7.10 La clause PROMOTES et 7.11 La clause EXTENDS). Tables de visibilit Soit MN une implantation qui importe une instance de machine MB. La table de visibilit suivante prcise le mode daccs de chaque constituant de MB, dans les clauses de MN.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants
Clauses de MN
Paramtres dIMPORTS / EXTENDS PROPERTIES VALUES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS Instructions Variants et invariants de boucles, prdicats dASSERT

121
LOCAL_ OPERATIONS

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible visible visible visible

visible

visible

visible

visible visible visible visible modifiable visible non modifiable

visible visible visible

visible visible modifiable visible modifiable visible modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

122

Manuel de rfrence du langage B - Version 1.8.6

1.87.8 La clause SEES Syntaxe


Clause_sees ::= "SEES" Ident_ren
+","

Restrictions 1. Les identificateurs dune clause SEES (sans tenir compte des ventuels prfixes de renommage) doivent dsigner des machines abstraites. 2. Si un composant CA appartenant au module MA voit une instance de machine r.MB, et si le premier anctre commun dans larbre dimportation du projet de MA et MB est MO, alors les renommages r (ventuellement vide) doivent provenir des renommages successifs dans larbre dimportation du projet subis depuis linstance de module MO jusqu linstance de module MB (cf. paragraphe ci-dessous SEES et renommage). 3. Si une instance de machine est vue par un composant dun module dvelopp, alors les raffinements de ce composant doivent galement voir cette instance (cf. 8.3 Rgle n4 sur les liens SEES). 4. Un composant dun module MA ne peut pas voir une instance de module MB importe par une instance de module dpendant de MA (cf. 8.3 Rgle n5 sur les liens SEES). 5. Un composant ne peut pas possder plusieurs liens sur une mme instance de machine. Par exemple, une implantation ne peut pas voir et importer une mme instance de machine (cf. 8.3 Rgle n6 sur les liens de dpendance). 6. Il ne doit pas exister de cycle dans le graphe de dpendance dun projet (cf. 8.3 Rgle n7 sur les liens de dpendance). Description Le lien SEES permet de rfrencer dans un composant une instance de machine abstraite importe dans une autre branche du projet, afin de consulter ses constituants (ensembles, constantes et variables) sans les modifier. Utilisation La liste des instances de machines vues est constitue de noms de machines ventuellement renommes. La signification de ce renommage est donne dans le paragraphe suivant. Si une machine est paramtre, les paramtres effectifs de la machine ne doivent pas tre fournis. En effet, ceux-ci sont uniquement fournis lors de la cration dinstances de machines. Des instances de machines sont cres soit localement par inclusion (cf. 7.9 La clause INCLUDES), soit globalement par importation (cf. 7.7 La clause IMPORTS). La clause SEES ne fait que rfrencer une instance de machine globale. SEES et renommage Lorsquune machine MA voit une instance de machine MB, le nom de linstance effectivement vue se construit partir du nom de la machine vue, prcd des ventuels renommages successifs de linstance de MB, subit dans son arbre dimportation, partir du premier anctre commun de MA et MB.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants Considrons lexemple suivant :


MD f3 MC b1 MA b1 f3.e4 b1.MB f3.MF e4 f3.e4.ME
IMPORTS

123

SEES

Figure 1 : exemple n1 de SEES et renommage Le schma prcdent reprsente le graphe de dpendance entre instances de machines dun projet. MA voit les instances b1.MB et f3.e4.MD. En effet, MC est le premier anctre commun de MA et de MB. partir de MC, MB est importe avec comme prfixe de renommage b1. De mme, partir de MD, ME est importe avec comme prfixes de renommage successifs f3 puis e4. On construit maintenant lexemple 2 partir de lexemple 1. Dsormais MD importe galement une nouvelle instance de MC renomme c2.MC. Le graphe ci-dessous indique quelles sont les instances effectivement vues par la nouvelle instance de MA cre transitivement par ce renommage.
MD f3 MC b1 MA b1 f3.e4 f3.e4 b1.MB f3.MF e4 c2.MA b1 c2 c2.MC b1 c2.b1.MB

f3.e4.ME

Figure 2 : exemple n2 de SEES et renommage La nouvelle instance de MA note c2.MA voit les instances c2.b1.MB et f3.e4.ME. En effet, c2.MC est le premier anctre commun de c2.MA et de c2.b1.MB. partir de c2.MC, c2.b1.MB est importe avec comme prfixe de renommage b1. De mme, MD est lanctre commun de c2.MA et de ME. partir de MD, ME est importe avec comme prfixe de renommage f3.e4.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

124

Manuel de rfrence du langage B - Version 1.8.6 Visibilit Soit MA une machine abstraite ou un raffinement qui voit une instance de machine MB. Les paramtres formels de MB ne sont pas accessibles dans MA. Les ensembles et les constantes de MB sont accessibles dans les clauses INCLUDES, EXTENDS, PROPERTIES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations du composant. Les variables sont accessibles en lecture dans le corps de linitialisation et des oprations. Il est possible dutiliser les oprations de consultation (ne modifiant pas les variables) de MB dans linitialisation et dans les oprations de MA. Si l'instance de machine vue est renomme, alors ses variables et ses oprations sont accessibles dans la machine en prfixant leur nom par le prfixe de renommage de la machine vue. Soit MA_i une implantation qui voit une instance de machine MB. Les paramtres formels de MB ne sont pas accessibles dans MA_i. Les ensembles et les constantes concrtes de MB sont accessibles dans les clauses IMPORTS, EXTENDS, PROPERTIES, VALUES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations du composant. Les constantes abstraites de MB sont en outre accessibles dans les clauses PROPERTIES, INVARIANT, ASSERTIONS et dans les variants et invariants de boucles, et les prdicats de substitutions ASSERT des oprations et de l'initialisation. Les variables concrtes de MB sont accessibles en lecture dans le corps de linitialisation et des oprations. Les variables abstraites de MB sont en outre accessibles dans les variants et invariants de boucles, et les prdicats de substitutions ASSERT des oprations et de l'initialisation. Il est possible dutiliser les oprations de consultation (ne modifiant pas les variables) de MB dans linitialisation et dans les oprations de MA_i. Transitivit La clause SEES nest pas transitive. Si un composant M1 voit une machine M2 qui ellemme voit une machine M3, alors les constituants de M3 ne sont pas accessibles par M1. Si on veut quils le soient, il faut que M1 voit aussi explicitement M3. Tables de visibilit Soit MA une machine ou un raffinement qui voit une machine MB. La table de visibilit suivante prcise pour chaque constituant de MB, les modes dutilisation applicables dans les clauses de MA.
Clauses de MA CONSTRAINTS Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations

visible visible

visible visible

visible visible

visible visible visible non modifiable visible non modifiable visible non modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

125

Soit MN une implantation qui voit une instance de machine MB. La table de visibilit suivante prcise pour chaque constituant de MB, les modes dutilisation applicables dans les clauses de MN.
Clauses de MN
Paramtres dIMPORTS / EXTENDS PROPERTIES VALUES INVARIANT / ASSERTIONS INITIALISATION Instructions / OPERATIONS Variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible non modifiable

visible

visible visible

visible

visible visible

visible

visible visible

visible visible visible non modifiable visible non modifiable visible non modifiable

visible non modifiable

visible visible

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

126

Manuel de rfrence du langage B - Version 1.8.6

1.97.9 La clause INCLUDES Syntaxe


Clause_includes ::= +"," +"," "INCLUDES" ( Ident_ren [ "(" Instanciation ")" ] ) Instanciation := Terme | Ensemble_entier | "BOOL" | Intervalle

Rgle de typage Dans le cas o une instance de machine incluse possde des paramtres, les paramtres effectifs doivent respecter la rgle suivante. Les paramtres effectifs correspondant des donnes scalaires doivent tre de mme type que les paramtres formels de la machine incluse et les paramtres effectifs correspondant des ensembles doivent tre de type P(T) o T est un type de base autre que STRING. Restrictions 1. Les identificateurs dune clause INCLUDES (sans tenir compte des ventuels prfixes de renommage) doivent dsigner des machines abstraites. 2. Les identificateurs renomms ne peuvent avoir au plus quun prfixe de renommage. 3. Chaque nom de machine doit tre suivi dune liste de paramtres effectifs de mme nombre que les paramtres de la machine incluse. Description La clause INCLUDES permet de regrouper dans une machine abstraite ou un raffinement, les constituants (ensembles, constantes et variables) dinstances de machines ainsi que leurs proprits (clause PROPERTIES et INVARIANT), afin de crer un composant enrichi laide dautres machines abstraites. Ce lien permet de construire de manire modulaire des machines abstraites ou des raffinements. Utilisation La clause INCLUDES contient la dclaration de la liste des instances de machines incluses. Il sagit soit du nom de la machine seul, qui rfrence linstance sans renommage de la machine (linstance de la machine est alors confondue avec celle-ci), soit du nom de la machine prcd dun renommage, qui dsigne linstance de la machine renomme (dans ce cas on peut avoir plusieurs instances de la machine, chaque instance correspondant un prfixe distinct). Si une instance de machine incluse est paramtre, les paramtres effectifs de la machine doivent tre fournis, ce qui permet dinstancier les paramtres formels de la nouvelle instance de machine. Les paramtres dune machine abstraite sont dcrits dans la clause CONSTRAINTS (cf. 7.5 La clause CONSTRAINTS). Ce sont soit des scalaires, soit des ensembles de scalaires. Une Obligation de Preuve est gnre afin de prouver que les paramtres effectifs dune instance de machine incluse respectent les contraintes de la machine.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

127

Instanciation des paramtres scalaires Un paramtre effectif scalaire dune instance de machine incluse est de type Z, BOOL, ou Ens, si Ens est un ensemble abstrait ou numr. Instanciation des paramtres ensembles Un paramtre effectif ensemble dune instance de machine incluse est de type P(Z), P(BOOL), ou P(Ens), si Ens est un ensemble abstrait ou numr. Raffinement dun composant qui inclut Lorsque labstraction dun raffinement MA_r inclut une instance de machine MB, alors, le raffinement MA_r peut nouveau inclure MB. Les ensembles abstraits ou numrs, les constantes concrtes et les variables concrtes de MA_r qui proviennent de linclusion prcdente de MB sont colls par homonymie avec ceux de MB. Dans le raffinement MA_r, toutes ces donnes sont alors considres comme provenant de MB, et non pas comme hrites de labstraction de MA_r. Les constantes abstraites et les variables abstraites de labstraction de MA_r qui proviennent de linclusion prcdente de MB sont raffines par les donnes homonymes de MB. Implantation dun composant qui inclut Lorsquune machine abstraite ou un raffinement MA inclut une instance de machine MB, alors plusieurs possibilits peuvent tre envisages lors de lcriture de limplantation MA_i de MA. Limplantation peut importer linstance de machine incluse par MA. Dans ce cas, les constituants de MB regroups dans MA lors de linclusion sont implants dans MA_i par homonymie avec ceux de linstance de machine importe. Sinon, limplantation peut ne pas importer linstance de machine MB. Elle doit alors implanter les constituants de MB regroups dans MA lors de linclusion soit directement, soit avec des constituants dinstances de machines vues ou importes. Lutilisateur reste libre de choisir le dcoupage qui lui convient. Dans le deuxime cas, si aucune instance de MB nest importe dans le projet alors MB sappelle un module abstrait (cf. 8.2 Module B). Linstance locale de MB est alors cre pour servir dintermdiaire de spcification et elle est abandonne dans la suite du dveloppement. Visibilit Les paramtres formels des machines incluses ne sont pas accessibles dans le composant qui inclut. Les ensembles et les constantes sont accessibles dans les clauses PROPERTIES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations de la machine. Les variables sont accessibles dans les invariants et les assertions. Elles sont, en outre, accessibles en lecture dans le corps de linitialisation et des oprations. Il est possible dutiliser les oprations dune machine incluse dans linitialisation et dans les oprations de la machine. Transitivit La clause INCLUDES est transitive : si un composant M1 inclut une instance de machine M2 qui elle-mme inclut une instance de machine M3, alors les ensembles, les constantes, les variables et leurs proprits de M3 sont regroups avec ceux de M2 qui sont eux-mmes regroups avec ceux de M1. Ces constituants sont donc accessibles par M1. Par contre, les oprations de M3 ne sont pas accessibles par M1. Les proprits de regroupement et daccs stendent pour un nombre quelconque de machines transitivement incluses.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

128

Manuel de rfrence du langage B - Version 1.8.6 Regroupement des donnes Si un composant MA inclut des instances de machines Minc, alors, vis vis de lextrieur du composant, lensemble des constituants (les ensembles, les constantes et les variables) des machines incluses et transitivement incluses fait partie du composant MA au mme titre que les constituants propres de ce composant. Ainsi, si un composant MB voit MA, les ensembles, les constantes et les variables des machines incluses et transitivement incluses par MA sont accessibles dans le composant MB selon les mmes rgles que les ensembles, les constantes et les variables de MA. Si un composant MA_r raffine MA, les ensembles, les constantes et les variables des machines incluses et transitivement incluses par MA sont accessibles dans le composant MA_r selon les mmes rgles que les ensembles, les constantes et les variables propres de MA. Promotion des oprations Les oprations dune machine incluse peuvent devenir automatiquement des oprations du composant qui ralise linclusion. Il sagit du mcanisme de promotion dopration (cf. 7.10 La clause PROMOTES et 7.11 La clause EXTENDS).

Table de visibilit Soit MA une machine ou un raffinement qui inclut une instance de machine MB. La table de visibilit suivante prcise pour chaque constituant de MB, les modes dutilisation applicables dans les clauses de MA.
Clauses de MA Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible visible visible visible visible visible visible visible visible non modifiable visible non modifiable visible modifiable CONSTRAINTS Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS

On note que ces liens de visibilit sont les mmes que ceux que lon aurait eu si les clauses de la machine incluse avaient t regroupes dans les clauses correspondantes de la machine incluante (cf. schma de regroupement ci-dessous). Machine quivalente Si MA est une machine abstraite qui inclut MB, les deux machines sont logiquement quivalentes une machine unique ayant les caractristiques suivantes : le nom de la machine quivalente, ses paramtres formels et ses oprations sont ceux de MA, ses ensembles abstraits et numrs, ses constantes, ses variables, ses proprits, son invariant, ses assertions et son initialisation sont respectivement ceux de MB concatns avec ceux de MA. Dans le cas de linitialisation, la substitution quivalente est le squencement de linitialisation de MB puis de MA. En effet,

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

129

comme les oprations de MB peuvent tre appeles dans linitialisation de MA, il faut que linvariant de MB ait dj t tabli, dans l'initialisation et dans le corps des oprations de la machine quivalente, les appels des oprations de MB sont remplaces par leur corps, en appliquant la dfinition de la substitution appel dopration (cf. 6.16 Substitution appel dopration), lors de l'inclusion dans la machine quivalente de l'initialisation, de la clause ASSERTIONS et ventuellement des oprations de MB, les paramtres formels de MB sont remplacs par leurs instanciations.

MACHINE

MACHINE

MACHINE

MA ( ParamA )
CONSTRAINTS

MB ( ParamB )
CONSTRAINTS

MA ( ParamA )
CONSTRAINTS

ConstrA
INCLUDES

ConstrB
SETS

ConstrA

MB ( Inst )
SETS SETS

SetsA
CONCRETE_CONSTANTS

SetsB
CONCRETE_CONSTANTS

SetsB ; SetsA
CONCRETE_CONSTANTS

ConcCteA
ABSTRACT_CONSTANTS

ConcCteB
ABSTRACT_CONSTANTS

ConcCteB , ConcCteA
ABSTRACT_CONSTANTS

AbsCteA
PROPERTIES

AbsCteB
PROPERTIES

AbsCteB , AbsCteA
PROPERTIES

PropA
CONCRETE_VARIABLES

PropB
CONCRETE_VARIABLES

PropB PropA
CONCRETE_VARIABLES

ConcVarA
ABSTRACT_VARIABLES

ConcVarB
ABSTRACT_VARIABLES

ConcVarB , ConcVarA
ABSTRACT_VARIABLES

AbsVarA
INVARIANT

AbsVarB
INVARIANT

AbsVarB , AbsVarA
INVARIANT

InvA
ASSERTIONS

InvB
ASSERTIONS

InvB InvA
ASSERTIONS

AssertA
INITIALISATION

AssertB
INITIALISATION

AssertB ; AssertA
INITIALISATION

InitA
OPERATIONS opA1 = SubstA1 ;

InitB
OPERATIONS opB1 = SubstB1 ;

InitB ; InitA
OPERATIONS opA1 = SubstA1 ;

opAn = SubstAn END END

...
opBm = SubstBm END

...
opAn = SubstAn

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

130 1.107.10 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 La clause PROMOTES

Clause_promotes ::=

"PROMOTES" Ident_ren

+","

Restrictions 1. Les noms d'oprations promues par un composant doivent dsigner des oprations d'instances de machines incluses, si le composant est une machine abstraite ou un raffinement, et d'instances de machines importes, si le composant est une implantation. 2. Chaque opration promue dun raffinement dune machine abstraite doit porter le mme nom quune opration de la machine abstraite. Les deux oprations doivent alors avoir la mme signature (leurs paramtres formels doivent porter le mme nom, tre dans le mme ordre et avoir les mmes types). Description La clause PROMOTES permet un composant de promouvoir des oprations (cf. 7.23 La clause OPERATIONS) appartenant des instances de machines cres par le composant. Il peut s'agir soit d'instances de machines incluses, si le composant est une machine abstraite ou un raffinement, soit d'instances de machines importes si le composant est une implantation. Promouvoir une opration d'une instance de machine MB dans un composant MA quivaut dfinir dans MA une opration dont le nom est celui de l'opration de MB (ventuellement prcd du prfixe de renommage de MB, si MB est renomme), et dont la signature et le corps sont ceux de l'opration de MB. Utilisation Chaque nom de la liste PROMOTES dsigne le nom dune opration dune instance de machine incluse ou importe. Si linstance de machine incluse ou importe est renomme, alors le nom de lopration doit tre prcd du prfixe de renommage de linstance. Le nom, la signature et le service offert par une opration promue sont identiques au nom la signature et au service de lopration quelle promeut. Les oprations promues deviennent des oprations part entire de la machine abstraite. Du point de vue des composants qui utilisent cette machine, rien ne distingue les oprations promues des oprations propres dfinies dans la clause OPERATIONS. Contrairement aux oprations propres, les oprations promues dune machine peuvent tre appeles dans les clauses INITIALISATIONS et OPERATIONS de la machine, puisquil sagit en ralit doprations de machines incluses ou importes.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants Exemple
MACHINE MACHINE MACHINE

131

MA
INCLUDES

MB
OPERATIONS opB1 = ... ; opB3 = ...

MC
OPERATIONS opC1 = ... ; opC3 = ...

MB, r2.MC
PROMOTES opB1, opB3, r2.opC1, r2.opC3

...
END

...
END

...
END

Dans lexemple ci-dessus, la machine MA inclut les instances de machines MB et r2.MC, puis elle promeut les oprations opB1 et opB3 de linstance MB et les oprations opC1 et opC2 de linstance renomme r2.MC. La machine possde dsormais, en plus de ses propres oprations, les quatre oprations : opB1, opB3, r2.opC1 et r2.opC3.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

132 1.117.11 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 La clause EXTENDS

Clause_EXTENDS ::= Clause_EXTENDS_B0 ::=

"EXTENDS" ( Ident_ren [ "(" Instanciation

+","

")" ] )
+","

+"," +","

"EXTENDS" ( Ident_ren [ "(" Instanciation_B0

")" ] )

Description Dans une machine abstraite ou un raffinement, la clause EXTENDS est quivalente linclusion (cf. 7.9 La clause INCLUDES) dinstances de machines et la promotion (cf. 7.10 La clause PROMOTES) de toutes les oprations des instances de machines incluses. Dans une implantation, la clause EXTENDS est quivalente limportation et la promotion (cf. 7.10 La clause PROMOTES) de toutes les oprations des instances de machines importes. Restrictions (cf. 7.9 La clause INCLUDES)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 1.127.12 Syntaxe


Clause_uses ::= "USES" Ident_ren
+","

133

La clause USES

Restrictions 1. Si une machine MA utilise une instance de machine Mused, alors il doit exister dans le projet une machine qui inclut une instance de MA et l'instance Mused (cf. 8.3 Rgle n8 sur les liens USES). 2. Une machine qui utilise dautres machines ne doit pas tre raffine. Elle doit donc constituer un module abstrait (cf. 8.2 Module B). Elle ne doit pas tre vue ni importe par dautres composants. Description Lorsquun composant inclut plusieurs machines, les machines incluses peuvent partager les donnes dune des machines incluses en utilisant (par un lien USES) cette machine incluse. Dans le schma ci-dessous, la machine MA inclut les instances de machines MB, MC et MD. La machine incluse MC est utilise (lien USES) par MB et MD, ce qui permet MB et MD daccder aux donnes de MC. Les donnes de MC sont donc partages par MB et MD.
INCLUDES

MB
USES

MA

MC

MD

Figure 3 : principes du lien USES Utilisation Soit MA une machine abstraite, qui utilise dautres machines. Les noms de la liste USES dsignent des instances de machines utilises par MA. Une instance de MA, ainsi que les instances de machines utilises doivent toutes tre incluses par un composant unique. Visibilit Les paramtres formels des machines utilises sont accessibles dans les clauses PROPERTIES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations de la machine qui utilise. Les ensembles et les constantes sont accessibles dans les clauses PROPERTIES, INVARIANT, ASSERTIONS et dans le corps de linitialisation et des oprations de la machine. Les variables sont accessibles dans les invariants et les assertions. Elles sont, en outre, accessibles en lecture dans le corps de linitialisation et des oprations. Il est interdit dappeler les oprations dune machine utilise dans linitialisation et dans les oprations de la machine.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

134

Manuel de rfrence du langage B - Version 1.8.6 Transitivit La clause USES nest pas transitive. Si une machine M1 utilise une machine M2 qui ellemme utilise une machine M3, alors les paramtres formels, les ensembles, les constantes et les variables de M3 ne sont pas accessibles par M1. Exemple
MACHINE

MA
INCLUDES

MX, y2.MY, z3.MZ ...


END

MACHINE

MACHINE

MACHINE

MX
USES

MY ...
END

MZ
INCLUDES

y2.MY ...
END

y2.MY ...
END

La machine MA inclut les instances de machines MX, y2.MY et z3.MZ. Linstance de machine y2.MY est utilise par les machines MX et MZ (et donc par les instances de machines MX et z3.MZ). Table de visibilit Soit MA une machine qui utilise une machine MB. La table de visibilit suivante prcise pour chaque constituant de MB, les modes dutilisation applicables dans les clauses de M A.
Clauses de MA CONSTRAINTS Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible visible Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS visible visible visible visible visible INITIALISATION / OPERATIONS visible visible visible visible non modifiable visible non modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 1.137.13 Syntaxe


Clause_sets Ensemble ::= ::= | "SETS" Ensemble
+";"

135

La clause SETS

Ident +"," Ident "=" "{" Ident "}"

Restrictions 1. Le nom dun ensemble abstrait ou numr dun raffinement doit diffrer respectivement du nom des ensembles abstraits ou numrs des machines abstraites vues ou incluses par le raffinement, sauf dans le cas suivant : un ensemble abstrait ou numr appartenant une abstraction du raffinement peut tre identique respectivement un ensemble abstrait ou numr dune machine vue ou incluse par le raffinement. Dans le cas de lensemble numr, les deux ensembles numrs doivent alors avoir le mme nom et la mme liste dlments numrs dans le mme ordre. 2. Le nom dun ensemble abstrait ou numr dune implantation doit diffrer respectivement du nom des ensembles abstraits ou numrs des machines abstraites vues ou importes par limplantation, sauf dans le cas suivant : un ensemble abstrait ou numr appartenant une abstraction de limplantation peut tre identique respectivement un ensemble abstrait ou numr dune machine vue ou importe par limplantation. Dans le cas de lensemble numr, les deux ensembles numrs doivent alors avoir le mme nom et la mme liste ordonne dlments numrs. Description La clause SETS dfinit la liste des ensembles abstraits et des ensembles numrs dun composant. Utilisation Les ensembles abstraits et les ensembles numrs dfinissent des types de base (cf. 3.1 Fondements du typage). Les ensembles abstraits et les ensembles numrs dfinis dans un composant sont des donnes concrtes. Ils sont implicitement conservs au cours du raffinement du composant, jusqu limplantation. Un ensemble abstrait est dfini par son nom. Les ensembles abstraits sont utiliss pour dsigner des objets dont on ne veut pas dfinir la structure au niveau dune abstraction. Tout ensemble abstrait est implicitement fini et non vide. Il devra tre valu dans limplantation du composant (cf. 7.17 La clause VALUES). terme, tout ensemble abstrait est valu par un intervalle entier fini non vide, mais pas par un ensemble numr. Un ensemble numr est dfini par son nom et par la liste ordonne et non vide de ses lments numrs. Les ensembles numrs servent dcrire une numration. Les lments dun ensemble numr sont appels des numrs littraux. Ils possdent la mme smantique que des constantes concrtes dont le type est lensemble numr.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

136

Manuel de rfrence du langage B - Version 1.8.6 Liste des ensembles abstraits et numrs dun composant Les ensembles abstraits et les ensembles numrs dune machine abstraite regroupent les ensembles dfinis dans la machine ou provenant des machines incluses par la machine. Les ensembles abstraits et les ensembles numrs dun raffinement regroupent les ensembles dfinis dans le raffinement, provenant de labstraction du raffinement ou provenant des machines incluses par le raffinement. Les ensembles abstraits et les ensembles numrs dune implantation regroupent les ensembles dfinis dans limplantation et ceux provenant de labstraction de limplantation. Visibilit Les ensembles abstraits, les ensembles numrs et les lments densembles numrs dune machine abstraite sont accessibles dans la machine, au sein des clauses INCLUDES, EXTENDS, PROPERTIES, INVARIANT, ASSERTIONS, INITIALISATION et OPERATIONS. Ils sont galement accessibles par les composants qui voient, incluent, utilisent ou importent la machine. Les ensembles abstraits, les ensembles numrs et les lments densembles numrs dun raffinement sont accessibles dans le raffinement, au sein des clauses INCLUDES, EXTENDS, PROPERTIES, INVARIANT, ASSERTIONS, INITIALISATION et OPERATIONS. Les ensembles abstraits, les ensembles numrs et les lments densemble numr dun raffinement sont accessibles dans le raffinement, au sein des clauses IMPORTS, EXTENDS, PROPERTIES, VALUES, INVARIANT, ASSERTIONS, INITIALISATION et OPERATIONS.

Exemple
MACHINE

MA
SETS

POSITION ; MARCHE = {Arret, Avant, Arriere} ; DIRECTION = {Nord, Sud, Est, Ouest} ...
END

IMPLEMENTATION

MA_i
REFINES

MA
IMPORTS

MB
SETS

MACHINE

VITESSE ; SIGNAL = {Rouge, Orange, Vert}


VALUES

MB
SETS

MARCHE = {Arret, Avant, Arriere} ; ...


END

POSITION = 0 .. 100 ; VITESSE = -10 .. 10 ...


END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

137

Dans lexemple ci-dessus, la machine abstraite MA dfinit lensemble abstrait POSITION et les ensembles numrs MARCHE et DIRECTION. MA_i, limplantation de MA dfinit un nouvel ensemble abstrait VITESSE et un nouvel ensemble numr SIGNAL. Les deux ensembles abstraits de MA_i sont valus dans la clause VALUES. Limplantation MA_i importe la machine MB qui possde un ensemble numr MARCHE identique celui de MA_i , puisquil a le mme nom et la mme liste ordonne dlments numrs.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

138 1.147.14 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 La clause CONCRETE_CONSTANTS

Clause_concrete_constants ::= +"," "CONCRETE_CONSTANTS" Ident +"," | "CONSTANTS" Ident

Description La clause CONCRETE_CONSTANTS dfinit la liste des constantes concrtes dun composant. Une constante concrte est une donne implmentable dans un langage informatique dont la valeur reste constante et qui est implicitement conserve au cours du raffinement jusqu limplantation. Une constante concrte peut tre un entier concret, un boolen, un lment dun ensemble abstrait ou dun ensemble numr, un intervalle fini et non vide dentiers concrets, un intervalle fini et non vide densemble abstrait, ou un tableau concret (cf. 3.4 Types et contraintes des donnes concrtes). Restriction 1. Le nom dune nouvelle constante concrte dun raffinement ou dune implantation doit diffrer du nom des constantes (concrtes ou abstraites) de labstraction, sauf dans le cas suivant : une constante concrte peut raffiner une constante abstraite homonyme de labstraction. Les deux constantes sont alors implicitement gales et elles doivent tre de mme type. Utilisation Les noms de clause CONCRETE_CONSTANTS et CONSTANTS sont quivalents, ils peuvent donc tre utiliss indiffremment. Les constantes concrtes dune machine abstraites regroupent les constantes concrtes dfinies dans la machine ou provenant de machines incluses (cf. 7.9 La clause INCLUDES). Les constantes concrtes dun raffinement regroupent les constantes concrtes dfinies dans le raffinement, provenant de labstraction et provenant dinclusions. Les constantes concrtes dune implantation regroupent les constantes concrtes dfinies dans limplantation et provenant de labstraction. Le typage et les proprits des constantes concrtes sont exprims dans la clause PROPERTIES (cf. 7.16 La clause PROPERTIES). Chaque constante concrte appartenant un composant doit tre value dans limplantation du composant (cf. 7.17 La clause VALUES). Chaque constante concrte dfinie dans une machine abstraite doit tre type dans la clause PROPERTIES de la machine. Une constante concrte dfinie dans un raffinement ou dans une implantation peut tre : soit une nouvelle constante concrte. Elle doit alors tre type explicitement dans la clause PROPERTIES du raffinement ou de limplantation. soit le raffinement dune constante abstraite, si son nom est identique celui dune constante abstraite de labstraction. Pour cela, la constante abstraite doit tre de mme nature quune constante concrte. Elle est alors type implicitement

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

139

par un prdicat de liaison qui signifie que la constante concrte est gale la constante abstraite homonyme. Visibilit Les constantes concrtes dune machine abstraite sont accessibles en lecture dans les clauses PROPERTIES, INVARIANT, ASSERTIONS, INCLUDES, EXTENDS et dans le corps de linitialisation et des oprations de la machine. Elles sont accessibles en lecture par les composants qui voient, incluent, utilisent ou importent cette machine. Les constantes concrtes dun raffinement sont accessibles en lecture dans les clauses PROPERTIES, INVARIANT, ASSERTIONS, INCLUDES, EXTENDS et dans le corps de linitialisation et des oprations du raffinement. Les constantes concrtes dune implantation sont accessibles en lecture dans les clauses PROPERTIES, INVARIANT, ASSERTIONS, IMPORTS, EXTENDS et dans le corps de linitialisation et des oprations du raffinement. Elles sont en outre accessibles en criture dans la clause VALUES. Exemple
MACHINE IMPLEMENTATION

MA
CONCRETE_CONSTANTS

MA_i
REFINES

PosMin, PosMax
ABSTRACT_CONSTANTS

MA
CONCRETE_CONSTANTS

PosInit
PROPERTIES

PosMoyenne, PosInit
PROPERTIES

PosMin INT PosMax NAT PosInit INT ...


END

PosMoyenne INT
VALUES

PosMin = -100 ; PosMax = 100 ; PosMoyenne = 0 ; PosInit = 50 ...


END

La machine abstraite MA dfinit deux constantes concrtes PosMin et PosMax et une constante abstraite PosInit. Limplantation MA_i de MA dfinit les nouvelles constantes concrtes PosMoyenne et PosInit. Cette dernire raffine la constante abstraite homonyme de MA. Toutes les constantes de MA_i (PosMin, PosMax, PosMoyenne et PosInit) sont values dans limplantation.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

140 1.157.15 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 La clause ABSTRACT_CONSTANTS

Clause_abstract_constants ::= "ABSTRACT_CONSTANTS" Ident

+","

Description La clause ABSTRACT_CONSTANTS contient la liste des constantes abstraites dune machine abstraite ou d'un raffinement. Une constante abstraite est une donne de valeur constante qui sera raffine dans le raffinement du composant. Restriction 1. Le nom dune constante abstraite dun raffinement doit diffrer du nom des constantes (concrtes ou abstraites) de labstraction, sauf dans le cas suivant : une constante abstraite peut raffiner une constante abstraite homonyme de labstraction, elle est alors implicitement gale la constante abstraite de labstraction. Utilisation Le nom de la clause est suivi par une liste didentificateurs qui reprsentent le nom des constantes abstraites. Le typage et la dclaration des proprits des constantes abstraites sont effectues dans la clause PROPERTIES (cf. 7.16 La clause PROPERTIES). Chaque constante abstraite dfinie dans un raffinement peut tre : soit une nouvelle constante abstraite. Elle doit tre type et peut ventuellement tre contrainte dans la clause PROPERTIES. soit le raffinement dune constante abstraite. Si son nom est identique celui dune constante abstraite de labstraction, il est alors inutile de typer la constante abstraite dans la clause PROPERTIES, car elle est type par dfaut laide dune proprit de liaison implicite qui signifie que la nouvelle constante abstraite est gale la constante abstraite de labstraction. Dautres proprits sur la constante peuvent tre exprimes dans la clause PROPERTIES. Si Mn raffine Mn-1, les constantes abstraites de Mn-1 peuvent galement tre raffines en tant que constantes concrtes de Mn (cf. 7.14 La clause CONCRETE_CONSTANTS). Si une constante abstraite de Mn-1 nest pas raffine en tant que constante abstraite, ni en tant que constante concrte, alors elle ne fait plus partie des constantes de Mn. On dit alors quelle disparat dans Mn. La clause ABSTRACT_CONSTANTS est interdite en implantation. En effet, contrairement aux constantes concrtes, les constantes abstraites ne sont pas systmatiquement implmentables dans un langage informatique. Visibilit Les constantes abstraites dune machine sont accessibles en lecture dans les clauses INCLUDES, EXTENDS, PROPERTIES, INVARIANT, ASSERTIONS, INITIALISATION et OPERATIONS de la machine. Elles sont accessibles en lecture par les composants qui importent, voient, incluent ou utilisent cette machine (cf. Annexe C. Tables de visibilit).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

141

Les constantes abstraites dun raffinement sont accessibles en lecture dans les clauses PROPERTIES, INVARIANT, ASSERTIONS, INCLUDES, EXTENDS, INITIALISATION et OPERATIONS du raffinement. Les constantes abstraites dun raffinement sont utilisables dans les clauses INCLUDES, EXTENDS, PROPERTIES, INVARIANT, ASSERTIONS, INITIALISATION et OPERATIONS du raffinement. Exemple
MACHINE

Reseau
ABSTRACT_CONSTANTS

NbrAbonnesMax, Connexion
PROPERTIES

NbrAbonnesMax NAT Connexion 0 .. NbrAbonnesMax 0 .. NbrAbonnesMax ...


END

REFINEMENT

Reseau_r
REFINES

Reseau
ABSTRACT_CONSTANTS

Connexion, AbonnesInit
PROPERTIES

AbonnesInit NAT ...


END

La machine abstraite Reseau dfinit deux constantes abstraites NbrAbonnesMax et Connexion. Reseau_r, le raffinement de Reseau dfinit la nouvelle constante abstraite AbonnesInit et la constante Connexion, homonyme une constante abstraite de la machine abstraite Reseau. Comme Connexion est implicitement gale la constante de labstraction, sa redfinition permet de conserver cette constante abstraite et ses proprits dans le raffinement.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

142 1.167.16 Syntaxe

Manuel de rfrence du langage B - Version 1.8.6 La clause PROPERTIES

Clause_properties ::= "PROPERTIES" Prdicat

Description La clause PROPERTIES permet de typer les constantes (concrtes et abstraites) dfinies dans un composant et dexprimer des proprits sur ces constantes. Restrictions 1. Chaque constante, concrte ou abstraite, dfinie dans un composant et qui nest pas homonyme une constante de lventuelle abstraction du composant, doit tre type dans la clause PROPERTIES du composant par un prdicat de typage (cf. 3.4 Typage des constantes concrtes et 3.3 Typage des donnes abstraites) situ au plus haut niveau danalyse syntaxique dans une srie de conjonctions. Ces constantes ne peuvent pas tre utilises dans la clause PROPERTIES avant davoir t types. 2. Chaque constante dfinie dans un raffinement ou une implantation et qui est homonyme une constante de labstraction na pas tre type, puisquelle est type implicitement par un prdicat qui signifie que la nouvelle constante est gale la constante homonyme de labstraction. Alors, les deux constantes homonymes doivent tre de mme type. 3. Si une constante dune instance de machine incluse ou vue par un raffinement est homonyme et de mme nature (abstraite ou concrte) une constante de labstraction du raffinement, alors les deux constantes homonymes dsignent la mme donne et elles doivent tre de mme type. 4. Si une constante dune instance de machine importe ou vue par une implantation est homonyme et de mme nature (abstraite ou concrte) une constante de labstraction de limplantation, alors les deux constantes homonymes dsignent la mme donne et elles doivent tre de mme type. Utilisation La clause PROPERTIES dune machine abstraite permet de typer les constantes de la machine et de dfinir leurs proprits. La clause PROPERTIES dun raffinement permet de typer les nouvelles constantes du raffinement et de dfinir leurs proprits et notamment celles qui explicitent les liens qui doivent exister ncessairement entre les constantes du raffinement et celles de labstraction. Chaque nouvelle constante doit tre type par un prdicat de typage. Il est inutile de typer une constante qui raffine une constante abstraite homonyme de labstraction, car elle est type par dfaut laide dun prdicat de liaison implicite qui signifie que la nouvelle constante est gale la constante abstraite de labstraction. Lutilisation de la clause PROPERTIES dans un raffinement et dans une implantation sont similaires. Cependant, comme la dclaration de constantes abstraites est interdite dans une implantation, seules les nouvelles constantes concrtes de limplantation doivent tre types dans des prdicats de typage de la clause PROPERTIES.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

143

Typage des constantes Les constantes doivent tre types dans l'un des prdicats situ au plus haut niveau de l'analyse syntaxique de la clause PROPERTIES spars par des conjonctions '', l'aide de prdicats de typage de donnes abstraites pour les constantes abstraites (cf. 3.3 Typage des donnes abstraites) et de prdicats de typage de constantes concrtes pour les constantes concrtes (cf. 3.4 Typage des constantes concrtes). Proprits des constantes Le prdicat de proprits sur les constantes permet dexprimer des proprits gnrales portant sur les constantes. Liaison entre constantes La clause PROPERTIES dun raffinement permet de prciser quels liens unissent les constantes dclares dans le raffinement et les constantes de son abstraction. Chaque prdicat dfinissant un tel lien est appel prdicat de liaison. Un prdicat de liaison peut aussi bien prendre la forme dun prdicat de typage que dune proprit gnrale. On rappelle galement quun prdicat de liaison implicite lie par dfaut deux constantes homonymes. Une constante dun raffinement ou dune implantation peut tre homonyme une constante de mme nature concrte ou abstraite dune instance de machine incluse ou importe. Deux constantes homonymes fusionnent, elles reprsentent donc la mme donne et doivent alors tre de mme type. Visibilit Dans la clause PROPERTIES dune machine, les ensembles et les constantes de la machine sont accessibles. Les ensembles et les constantes des machines incluses ou vues sont accessibles. Par contre les paramtres de la machine, de mme que ceux des machines utilises ne sont pas accessibles. Exemple
MACHINE

MA
CONCRETE_CONSTANTS

Cte1
ABSTRACT_CONSTANTS

Cte2
PROPERTIES Cte1 INT

Cte2 N (Cte1 < 0 Cte2 = 0) ...


END

La machine abstraite MA dfinit la constante concrte Cte1 et la constante abstraite Cte2. Ces deux constantes sont types dans des prdicats de typage situs au plus haut niveau de lanalyse syntaxique dans une liste de conjonctions. Limplication qui suit ces prdicats de typage exprime une proprit portant sur Cte1 et Cte2. Il faut noter que les parenthses qui lentourent sont ncessaires dans ce cas, cause de la priorit de plus faible que celle de (sans ces parenthses, le prdicat serait analys comme

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

144

Manuel de rfrence du langage B - Version 1.8.6


(Cte1 INT Cte2 N Cte1 < 0) Cte2 = 0

; alors les prdicats de typage de Cte1 et Cte2 ne seraient plus dans une liste de conjonctions au plus haut niveau syntaxique).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 7.17 La clause VALUES Syntaxe


Clause_values Valuation ::= ::= | | ::= | | ::= | "VALUES" Valuation
+";"

145

Ident "=" Terme Ident "=" Expr_tableau Ident "=" Intervalle_B0 Ident +"m" +"," "{" ( Terme_simple "m" Terme ) "}" +"" Ensemble_simple "" "{" Terme "}" Expression_arithmtique ".." Expression_arithmtique Ensemble_entier_B0

Expr_tableau

Intervalle_B0

Ensemble_entier_B0 ::= "NAT" | "NAT1" | "INT" Ensemble_simple ::= | | | Ensemble_entier_B0 "BOOL" Intervalle_B0 Ident

Description La clause VALUES permet de donner une valeur aux constantes concrtes (cf. 7.14 La clause CONCRETE_CONSTANTS) et aux ensembles abstraits (cf. 7.13 La clause SETS) de limplantation. Restrictions 1. Chaque constante concrte ou chaque ensemble abstrait qui nest pas homonyme une donne de mme nature dune instance de machine vue ou importe doit tre valu dans la clause VALUES une et une seule fois. Dans ce cas, on dit que la donne est value explicitement, sinon on dit quelle est value implicitement. 2. Si une constante concrte est homonyme une constante concrte dune instance de machine vue ou importe, alors les deux constantes doivent avoir le mme type. 3. Si une constante concrte ou un ensemble abstrait de limplantation est utilis en partie droite dune valuation, alors il doit soit avoir t valu auparavant, soit tre implant par homonymie. Utilisation Le nom de la clause VALUES est suivi dune liste de valuations. Lordre des valuations est significatif cause de la valuation des ensembles abstraits (cf. ci-dessous). Chaque valuation permet de donner explicitement une valeur une constante concrte ou un ensemble abstrait. Elle se compose du nom de la donne valuer, suivi de loprateur gal = et de la valeur de la donne. Les valuations explicites se scindent en plusieurs parties : la valuation des constantes concrtes scalaires, des constantes tableaux, des constantes intervalles et des ensembles abstraits.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

146

Manuel de rfrence du langage B - Version 1.8.6 Valuation des ensembles abstraits Lors de la valuation dun ensemble abstrait AbsSet, le type que reprsente cet ensemble change. Il prend le type de lensemble qui le value. Voici les diffrentes manires de valuer AbsSet : par un intervalle dentiers non vide contenu dans INT. Le type AbsSet devient alors Z, par un ensemble abstrait AbsSet2 dune machine vue ou importe. Le type AbsSet devient alors AbsSet2. implicitement, par un ensemble abstrait homonyme dune machine vue ou importe. Le type AbsSet reste le mme. En effet, comme les deux ensembles abstraits portent le mme nom, ils sont de mme type, par un ensemble abstrait AbsSet3 de limplantation qui a dj t valu dans la clause VALUES ou qui est valu par homonymie avec un ensemble abstrait dune machine vue ou importe. Le type AbsSet devient alors le type de AbsSet3.Il faut prouver que les ensembles avec lesquels sont valus les ensembles abstraits sont finis et non vides. Si un ensemble abstrait est valu par un intervalle, il faut prouver que les bornes de lintervalle appartiennent INT et si les bornes de lintervalle sont des expressions arithmtiques, il faut prouver que chaque sous expression est bien dfinie et quelle appartient INT (cf. 7.25.2 Les termes). Les donnes de limplantation dont le type est construit laide du type AbsSet subissent galement un changement de type. Cette modification consiste remplacer dans le type des donnes chaque occurrence de AbsSet par le type qui sert le valuer. La porte de ce changement de type comprend la partie de la clause VALUES, aprs valuation de AbsSet ainsi que les clauses IMPORTS, EXTENDS, PROPERTIES, INVARIANT, ASSERTION, INITIALISATION et OPERATIONS de limplantation. Lintrt du changement de type rside principalement dans le cas de la valuation par un intervalle dentiers (tout ensemble abstrait sera valu terme par un intervalle dentiers, les deux premiers cas de valuation ne font que diffrer cette valuation). Lorsque AbsSet est valu par un intervalle dentiers, les donnes appartenant AbsSet peuvent recevoir des valeurs entires (en particulier des entiers littraux) et tre manipules laide des oprateurs arithmtiques, puisque ces oprateurs ne sont dfinis en B que pour des entiers. Elles deviennent donc concrtement utilisables.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

147

Exemple de changement de type


MACHINE IMPLEMENTATION

MA
SETS

MA_i
REFINES

AbsSet
CONCRETE_VARIABLES

MA
VALUES

var1, var2, var3


INVARIANT

AbsSet = 0 .. 100
INITIALISATION

var1 AbsSet var2 AbsSet var3 AbsSet ...


END

var1 := 0 ; var2 := 100 ; var3 := (var1 + var2) / 2 ...


END

Dans lexemple ci-dessus, les variables concrtes var1, var2 et var3, dfinies dans la machine MA, sont du type AbsSet. Dans limplantation MA_i, comme AbsSet est valu par un intervalle entier, le type des variables var1, var2 et var3 devient Z. Elles peuvent donc dsormais tre initialises laide dexpressions arithmtiques. Exemple de valuation densemble

MACHINE

MA
SETS

EnsAbs1 ; EnsAbs2 ; EnsAbs3 ; EnsAbs4 ; ...


END MACHINE

MB
IMPLEMENTATION SETS

MA_i
REFINES

EnsAbs5, EnsAbs6
CONCRETE_CONSTANTS

MA
SEES

MB
VALUES

EnsAbs1 = 0 .. 2 c1 + 1 ; EnsAbs2 = Interv ; EnsAbs3 = IntervAbs ; EnsAbs4 = EnsAbs6 ...


END

c1, Interv, IntervAbs


PROPERTIES

c1 0 .. 100 Interv NAT IntervAbs EnsAbs6


END

EnsAbs2

Dans lexemple ci-dessus, lensemble abstrait EnsAbs1 est valu par un intervalle entier. est valu par une constante intervalle entier de la machine vue MB. EnsAbs3 est valu par une constante intervalle de type abstrait EnsAbs6 provenant de MB. EnsAbs4 est

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

148

Manuel de rfrence du langage B - Version 1.8.6 valu par lensemble abstrait EnsAbs6 de MB. Enfin, EnsAbs5 est valu implicitement par lensemble abstrait homonyme de MB. Valuation des constantes concrtes scalaires Chaque constante concrte scalaire est value en fonction de son type. Si elle appartient Z, elle doit tre value par une expression arithmtique. Il faut alors prouver que chaque sous expression arithmtique est bien dfinie et quelle est contenue dans lensemble des entiers concrets INT (cf. 7.25.2 Les termes). Si la constante concrte appartient BOOL, elle doit tre value par une expression boolenne. Si elle est de type numr ou abstrait, elle doit tre value par une constante numre ou abstraite. Dans le cas des constantes appartenant un ensemble abstrait qui a dj t valu dans la clause VALUES, on rappelle que le type de la constante est modifi ; il sagit du type de lensemble valuant lensemble abstrait. Exemple Dans lexemple ci-dessous, la constante concrte c1 est value par un entier littral. La constante c2 est value par une expression arithmtique, laide de la constante concrte CteB2 de la machine vue MB. La constante c3 est value par un lment numr de lensemble numr COUL dclar dans MB. La constante c4 est value lgitimement par un entier littral puisquelle est de type entier depuis la valuation de EnsAbs1 par lintervalle entier 0 .. 12. Enfin, la constante c5 est value par la constante concrte cteB1 de MB.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

149

MACHINE

MACHINE

MA
SEES SETS

MB COUL = { Rouge, Vert, Bleu } ; EnsAbs2


CONCRETE_CONSTANTS

MB
SETS

EnsAbs1
CONCRETE_CONSTANTS

c1, c2, c3, c4, c5, c6


PROPERTIES c1 INT c2 NAT

cteB1, cteB2
PROPERTIES

cteB1 EnsAbs2 cteB2 - 10 .. 10


END

c3 COUL c4 EnsAbs1 c5 EnsAbs2 c6 NAT


END

IMPLEMENTATION

MA_i
REFINES

MA
SEES

MB
VALUES

c1 = - 100 ; c2 = cteB22 + 4 ; c3 = Bleu ; EnsAbs1 = 0 .. 512 ; c4 = 42 ; c5 = cteB1 ; c6 = c2 + 1 ...


END

Valuation des constantes concrtes tableaux Une constante concrte tableau peut tre value de trois manires diffrentes : par une constante concrte tableau dune machine vue ou importe. par un ensemble de maplets. Un maplet permet de reprsenter un n-uplet dont les n-1 premiers lments dsignent les indices de llment du tableau et dont le dernier lment dsigne la valeur de llment du tableau. Les indices dun maplet doivent tre des scalaires littraux, alors que la valeur dun maplet doit tre une valeur scalaire quelconque. par un tableau dont tous les lments ont la mme valeur. Ce tableau est exprim sous la forme du produit cartsien entre les ensembles indice du tableau et un singleton contenant la valeur donner tous les lments du tableau. Dans la valuation dun tableau dont les lments sont des entiers, si une valeur du tableau est dfinie par une expression arithmtique, il faut prouver que chaque sous expression appartient INT (cf. 7.25.2 Les termes).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

150

Manuel de rfrence du langage B - Version 1.8.6 Exemple Dans lexemple ci-dessous, la constante tab1 est value laide de la constante tab4 de la machine vue MB. La constante tab2 est value par un ensemble de maplets : llment dindice (1) possde la valeur FALSE, (2) possde la valeur TRUE. La constante tab3 est value par le tableau EnsAbs BOOL {0} qui a tout lment de lensemble de dpart du tableau associe la valeur 0.
MACHINE MACHINE

MA
SEES SETS

MB EnsAbs
CONCRETE_CONSTANTS

MB
CONCRETE_CONSTANTS

tab1, tab2, tab3


PROPERTIES

tab4
PROPERTIES

tab1 (0 .. 2) BOOL 3 EnsAbs tab2 (1 .. 2) 9 BOOL tab3 EnsAbs BOOL 3 INT ...
END

tab4 (0 .. 2) BOOL 3 EnsAbs ...


END

IMPLEMENTATION

MA_i
REFINES

MA
SEES

MB
VALUES

tab1 = tab4 ; tab2 = { 1 m FALSE, 2 m TRUE } ; tab3 = EnsAbs BOOL {0} ...
END

Valuation des constantes concrtes intervalles Chaque constante concrte intervalle est value en fonction de son type. Si elle est de type entier, elle peut tre value par une constante intervalle entire ou par un intervalle dont les bornes sont des expressions arithmtiques. Si elle est de type abstrait, elle doit tre value par une constante intervalle de type abstrait ou par un ensemble abstrait. Dans la valuation dun intervalle entier laide dexpressions arithmtiques, il faut prouver que chaque sous expression est bien dfinie et appartient INT (cf. 7.25.2 Les termes). Exemple Dans lexemple ci-dessous, la constante intervalle c1 est value laide de la constante cteInterv1 de la machine vue MB. La constante intervalle c2 est value par lintervalle entier 0 .. MAXINT / 2 - 1, dont la borne suprieure est une expression arithmtique. Lensemble abstrait EnsAbs1 est valu par lintervalle entier 0 .. 100. Par consquent, les donnes dont le type tait EnsAbs1 devient dsormais Z. La constante intervalle c3 appartenant EnsAbs1 est value par lintervalle 1 .. 6. La constante intervalle c4

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

151

appartenant lensemble abstrait EnsAbs2 est value par la constante intervalle cteInterv2 de la machine vue MB, cette dernire constante appartenant bien EnsAbs2.
MACHINE MACHINE

MA
SEES SETS

MB EnsAbs2
CONCRETE_CONSTANTS

MB
SETS

EnsAbs1
CONCRETE_CONSTANTS

cteInterv1, cteInterv2
PROPERTIES

c1, c2, c3, c4


PROPERTIES c1 INT c2 = 0 .. (MAXINT / 2 - 1)

cteInterv1 INT cteInterv2 EnsAbs2 ...


END

c3 EnsAbs1 c4 EnsAbs2 ...


END

IMPLEMENTATION

MA_i
REFINES

MA
SEES

MB
VALUES

c1 = cteInterv1 ; c2 = 0 .. ( MAXINT / 2 - 1 ) ; EnsAbs1 = 0 .. 100 ; c3 = 1 .. 6 ; c4 = cteInterv2 ...


END

Visibilit Dans la clause VALUES dune implantation, les constantes concrtes et les ensembles numrs des machines vues et importes sont accessibles en lecture. Les constantes concrtes et les ensembles abstraits de limplantation ne peuvent se prsenter quen partie gauche des valuations, et ils ne sont donc pas accessibles en lecture.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

152

Manuel de rfrence du langage B - Version 1.8.6

7.18 La clause CONCRETE_VARIABLES Syntaxe


Clause_concrete_variables ::= "CONCRETE_VARIABLES" Ident_ren
+","

Description La clause CONCRETE_VARIABLES dfinit la liste des variables concrtes dun composant. Une variable concrte est une donne implmentable dans un langage informatique. Elle peut tre un scalaire ou un tableau (cf. 3.4 Types et contraintes des donnes concrtes). Une variable concrte na pas tre raffine puisquelle est implicitement conserve au cours du raffinement jusqu limplantation. Cette proprit autorise alors laccs en lecture directe aux variables concrtes dune machine dans les implantations qui importent cette machine, sans recourir ncessairement un service de lecture comme cest ncessairement le cas pour les variables abstraites. Restrictions 1. Les variables concrtes dclares dans une machine abstraite ne doivent pas tre renommes. 2. Le nom dune nouvelle variable concrte dun raffinement ou dune implantation doit diffrer du nom des variables (concrtes ou abstraites) de labstraction, sauf dans le cas suivant : une variable concrte peut raffiner une variable abstraite homonyme de labstraction, elle est alors implicitement gale la variable abstraite. Utilisation Les variables concrtes dune machine abstraite regroupent les variables concrtes dfinies dans la machine et provenant des inclusions (cf. 7.9 La clause INCLUDES). Les variables concrtes dun raffinement regroupent les variables concrtes dfinies dans le raffinement, provenant de labstraction et provenant de machines incluses. Les variables concrtes dune implantation regroupent les variables concrtes dfinies dans limplantation et provenant de labstraction. Le typage et les proprits invariantes des variables concrtes sont exprims dans la clause INVARIANT (cf. 7.20 La clause INVARIANT). Chaque variable concrte appartenant un composant doit tre initialise dans la clause INITIALISATION du composant (cf. 7.22 La clause INITIALISATION). Chaque variable concrte dfinie dans une machine abstraite doit tre type dans la clause INVARIANT de la machine. Une variable concrte dfinie dans un raffinement ou dans une implantation peut tre : soit une nouvelle variable concrte. Elle doit alors tre type explicitement dans la clause INVARIANT du raffinement ou de limplantation. soit le raffinement dune variable abstraite, si son nom est identique celui dune variable abstraite de labstraction. Pour cela, la variable abstraite doit tre de mme nature quune variable concrte (scalaire ou tableau). Elle est alors type implicitement par un prdicat de liaison qui signifie que la variable concrte est gale la variable abstraite homonyme.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

153

Visibilit Les variables concrtes dun composant sont utilisables dans les clauses INVARIANT et ASSERTIONS de ce composant et de ses raffinements successifs. Elles sont accessibles en lecture et en criture dans le corps de linitialisation et des oprations du composant. Les variables concrtes dclares dans une machine sont accessibles en lecture uniquement par les composants qui voient, incluent, utilisent ou importent cette machine. Exemple
MACHINE IMPLEMENTATION

MA
CONCRETE_VARIABLES

MA_i
REFINES

Production, ProductionMois
ABSTRACT_VARIABLES

MA
CONCRETE_VARIABLES

ProductionExterne
INVARIANT

Recettes, Charges, ProductionExterne


INVARIANT

Production INT ProductionMois (1 .. 12) INT ProductionExterne INT


INITIALISATION

Recettes INT Charges INT


INITIALISATION

Production : INT || ProductionMois : (1 .. 12) INT || ProductionExterne : INT ...


END

Production := 0 ; ProductionMois := (1 .. 12) {0} ; ProductionExterne := 0 ; Recettes := 0 ; Charges := 0 ...


END

La machine abstraite MA dfinit deux variables concrtes Production et ProductionMois et une variable abstraite ProductionExterne. Les variables Production et ProductionExterne sont des entiers concrets et la variable ProductionMois est un tableau dentiers concrets dindice lintervalle 1..12. Toutes ces variables sont initialises dans la clause INITIALISATION. Limplantation MA_i de MA dfinit les nouvelles variables concrtes Recettes, Charges et ProductionExterne. Cette dernire raffine la variable abstraite homonyme de MA. Toutes les variables de MA_i (Production, ProductionMois, ProductionExterne, Recettes et Charges) sont initialises dans la clause INITIALISATION.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

154

Manuel de rfrence du langage B - Version 1.8.6

7.19 La clause ABSTRACT_VARIABLES Syntaxe


Clause_abstract_variables ::= +"," "ABSTRACT_VARIABLES" Ident_ren +"," | "VARIABLES" Ident_ren

Machine abstraite La clause ABSTRACT_VARIABLES permet dintroduire dans une machine ou un raffinement de nouvelles variables abstraites. Une variable abstraite est une donne dont le type est quelconque et qui est raffine au cours du raffinement du composant. Restrictions 1. Les variables abstraites dclares dans une machine ne doivent pas tre renommes. 2. Le nom dune nouvelle variable abstraite dun raffinement ou dune implantation doit diffrer du nom des variables (concrtes ou abstraites) de labstraction, sauf dans le cas suivant : une variable abstraite peut raffiner une variable abstraite homonyme de labstraction, elle est alors implicitement gale la variable abstraite. Utilisation Le nom de la clause est suivi par une liste didentificateurs qui reprsentent le nom des variables abstraites. Les variables abstraites doivent tre types (cf. 3.3 Typage des donnes abstraites) et ventuellement contraintes dans la clause INVARIANT. Elles doivent toutes tre initialises dans la clause INITIALISATION. Dans un raffinement, chaque variable abstraite dfinie peut tre : soit une nouvelle variable abstraite. Son nom doit alors tre un identificateur non renomm. Elle doit tre type et ventuellement contrainte dans la clause INVARIANT. soit le raffinement dune variable abstraite, si son nom est identique celui dune variable abstraite du composant raffin. Lidentificateur de la variable est renomm si la variable du composant raffin provient dune machine incluse (ou transitivement incluse) renomme. Il est alors inutile de typer la variable abstraite dans la clause INVARIANT, car elle est type par dfaut laide dun invariant de liaison implicite qui signifie que la nouvelle variable abstraite est gale la variable abstraite homonyme du composant raffin. Dautres proprits invariantes portant sur la variable abstraite peuvent galement tre exprimes dans la clause INVARIANT. Si le raffinement Mn raffine Mn-1, les variables abstraites de Mn-1 peuvent galement tre raffines en tant que variables concrtes de Mn. Si une variable de Mn-1 nest pas raffine en tant que variable abstraite, ni en tant que variable concrte, alors elle disparat dans Mn. Elle ne fait donc plus partie des variables du composant Mn. Les variables abstraites du raffinement qui ne proviennent pas d'une instance de machine incluse par le raffinement doivent tre initialises dans la clause INITIALISATION. Dans une implantation, il est interdit de dfinir des variables abstraites.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

155

Visibilit Les variables abstraites dun composant sont accessibles dans les clauses INVARIANT et ASSERTIONS de ce composant. Elles sont accessibles en lecture et en criture dans le corps de linitialisation et des oprations du composant. Elles sont accessibles en lecture par les composants qui importent, voient, incluent ou utilisent cette machine (cf. Annexe C. Tables de visibilit). Soient MA et MB des machines. Si MA voit MB, les variables abstraites de MB sont accessibles dans MA en lecture dans le corps de linitialisation et des oprations de MA. Si MA utilise, ou inclut MB, les variables abstraites de MB sont accessibles dans MA dans les clauses INVARIANT et ASSERTIONS et elles sont accessibles en lecture dans le corps de linitialisation et des oprations. Si Mn raffine Mn-1, les variables abstraites de Mn-1, qui disparaissent dans Mn sont seulement accessibles dans Mn, dans les clauses INVARIANT et ASSERTIONS ainsi que dans les clauses INITIALISATION et OPERATIONS, au sein des prdicats des substitutions assertion et des variants et invariants de boucles. Elles ne sont plus accessible dans les raffinements successifs de Mn. Soient MA un raffinement et MB une machine. Si MA voit (clause SEES) MB, les variables abstraites de MB sont accessibles dans MA en lecture dans le corps de linitialisation et des oprations. Si MA inclut MB, les variables abstraites de MB sont accessibles dans MA dans les clauses INVARIANT et ASSERTIONS et elles sont accessibles en lecture dans le corps de linitialisation et des oprations. Les variables abstraites dclares dans un raffinement ne sont pas accessibles par les composants externes au module.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

156

Manuel de rfrence du langage B - Version 1.8.6

7.20 La clause INVARIANT Syntaxe


Clause_invariant ::= "INVARIANT" Prdicat

Description La clause INVARIANT contient, au sein dun prdicat appel invariant, dune part le typage des variables dclares dans le composant et dautre part des proprits sur ces variables. Linvariant exprime les proprits invariantes des variables de la machine abstraite. Il faut prouver que linitialisation du composant (cf. 7.22 La clause INITIALISATION) tablit linvariant et que chaque appel dune opration de la machine prserve linvariant. Des composants extrieurs peuvent accder aux variables concrtes dune machine abstraite en lecture, mais pas en criture, afin de ne pas briser linvariant. Linvariant dun raffinement ou dune implantation permet dexprimer le lien entre les nouvelles variables du composant et les variables de labstraction. Restrictions 1. Chaque variable, concrte ou abstraite, dfinie dans un composant et qui nest pas homonyme une variable de lventuelle abstraction du composant, doit tre type, avant toute autre utilisation, dans la clause INVARIANT du composant par un prdicat de typage (cf. 3.6 Typage des variables concrtes et 3.3 Typage des donnes abstraites) situ au plus haut niveau dans une srie de conjonctions. Ces variables ne peuvent pas tre utilises dans linvariant avant davoir t types. 2. Chaque variable dfinie dans un raffinement ou une implantation et qui est homonyme une variable de labstraction ne doit pas tre type, puisquelle est type implicitement par un prdicat qui signifie que la nouvelle variable est gale la variable homonyme de labstraction. Les deux variables doivent alors tre de mme type. 3. Si une variable dune instance de machine incluse par un raffinement est homonyme et de mme nature (abstraite ou concrte) une variable de labstraction du raffinement, alors les deux variable homonymes dsignent la mme donne et elles doivent tre de mme type. 4. Si une variable dune instance de machine importe par une implantation est homonyme et de mme nature (abstraite ou concrte) une variable de labstraction de limplantation, alors les deux variable homonymes dsignent la mme donne et elles doivent tre de mme type. Utilisation Le nom de la clause INVARIANT est suivi dune liste de prdicats. Dans une machine abstraite linvariant permet de typer les variables dfinies dans la machine et de dfinir leurs proprits invariantes. Linvariant dun raffinement permet de typer les nouvelles variables du raffinement et de dfinir leurs proprits, notamment les liens existant entre les variables du raffinement et celles de labstraction.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

157

Linvariant dune implantation est semblable celui dun raffinement. Il permet galement de dfinir la relation dimplantation entre, dune part, les variables de limplantation et dautre part, les variables des instances de machines importes par limplantation. Typage des variables Les variables doivent tre types dans l'un des prdicats situ au plus haut niveau d'analyse syntaxique de la clause INVARIANT spars par des conjonctions '', l'aide de prdicats de typage de donnes abstraites pour les variables abstraites (cf. 3.3 Typage des donnes abstraites) et de prdicat de typage de variables concrtes pour les variables concrtes (cf. 3.6 Typage des variables concrtes). Les variables dclares dans le raffinement peuvent se scinder en deux groupes : les nouvelles variables et les variables qui raffinent des variables abstraites homonymes de labstraction. Chaque nouvelle variable doit tre type par un invariant de typage. Il est inutile de typer une variable qui raffine une variable abstraite homonyme de labstraction, car elle est type par dfaut laide dun invariant de liaison implicite qui signifie que la nouvelle variable est gale la variable abstraite de labstraction. Comme les nouvelles variables dclares dans une implantation ne peuvent tre que des variables concrtes, le typage des variables dans linvariant concerne seulement les nouvelles variables concrtes dclares dans limplantation. Liaison entre variables Linvariant dun raffinement permet de prciser quels liens unissent les variables dclares dans le raffinement et les variables de son abstraction. Chaque prdicat de linvariant dfinissant un tel lien est appel invariant de liaison. Un invariant de liaison peut aussi bien prendre la forme dun prdicat de typage que dune proprit. On rappelle galement quun invariant de liaison implicite lie par dfaut deux variables homonymes, lune tant dclare dans le raffinement, lautre dans son abstraction. Les variables abstraites de labstraction de limplantation peuvent tre lies aux variables concrtes ou abstraites des instances de machines importes (voir lexemple ci-dessous). Une variable dun raffinement peut tre homonyme une variable de mme nature concrte ou abstraite dune instance de machine incluse par le raffinement. Deux variables homonymes fusionnent, elles reprsentent donc la mme donne. Elles doivent alors tre de mme type. Soit M_i une implantation, si une variable concrte de labstraction de M_i porte le mme nom quune variable concrte dune instance de machine importe Mimp, alors les deux variables sont automatiquement lies par un invariant de liaison implicite qui signifie que les variables sont gales. Par consquent, les deux variables doivent avoir le mme type. Les deux variables fusionnent ; on dit que la variable de M_i simplante sur la variable homonyme de Mimp. La variable concrte de M_i se comporte alors comme une rfrence sur la variable homonyme de Mimp. L'instance de machine Mimp devient responsable de la gestion de la variable concrte et notamment de son initialisation. Il est possible dimplanter une variable concrte de limplantation M_i par une variable concrte portant un nom diffrent dune instance de machine importe Mimp en crivant en invariant lgalit des deux variables. Cependant ce cas est totalement dnu dintrt. En effet, les deux variables ne fusionnent pas. Pour ne pas briser linvariant, il faut donc modifier conjointement les deux variables.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

158

Manuel de rfrence du langage B - Version 1.8.6

Exemple Dans lexemple ci-dessous, la variable abstraite var1 de la machine MA est implante par la variable vimp, la variable abstraite var2 est implante implicitement par homonymie avec la variable var2 de la machine importe Mimp, et la variable concrte var3 est implante dans limplantation. La variable concrte var5 est implante par homonymie avec la variable var5 de la machine importe Mimp.
MACHINE

MA
ABSTRACT_VARIABLES

var1, var2
CONCRETE_VARIABLES

var5
INVARIANT

var1 NAT var2 BOOL var5 INT (var1 > var5 var2 = TRUE) ...
END

IMPLEMENTATION

MACHINE

MA_i
REFINES

Mimp
ABSTRACT_VARIABLES

MA
IMPORTS

vimp, var2
CONCRETE_VARIABLES

Mimp
CONCRETE_VARIABLES

var5
INVARIANT

var3
INVARIANT

var3 NAT var1 = vimp ...


END

vimp 1 .. 100 var2 BOOL var5 INT ...


END

Visibilit Dans la clause INVARIANT dune machine, les paramtres formels, les ensembles (abstraits et numrs), les constantes et les variables de la machine sont accessibles. Les ensembles, les constantes, les lments densembles numrs et les variables des machines incluses sont accessibles. Les paramtres, les ensembles, les constantes, les lments densembles numrs et les variables des machines utilises sont accessibles. Les ensembles et les constantes, les lments densembles numrs des machines vues sont accessibles. Dans la clause INVARIANT dun raffinement, les paramtres formels, les ensembles (abstraits et numrs), les constantes, les lments densembles numrs et les variables du raffinement sont accessibles. Les constantes et les variables de labstraction disparaissant dans le raffinement sont accessibles. Les ensembles, les constantes, les lments densembles numrs et les variables des machines incluses sont accessibles. Les ensembles, les constantes et les lments densembles numrs des machines vues sont accessibles.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

159

Dans linvariant d'une implantation, les constituants suivants sont accessibles : les paramtres formels, les ensembles, les lments numrs, les constantes concrtes et les variables concrtes de limplantation, les constantes abstraites et les variables abstraites de labstraction de limplantation, les ensembles, les lments numrs, les constantes et les variables des instances de machines vues ou importes par limplantation.

Exemple
MACHINE

MA
CONCRETE_VARIABLES

var1
ABSTRACT_VARIABLES

var2
INVARIANT

var1 INT var2 N (var1 > 0 var1 + var2 = 0)


INITIALISATION var1 : MININT .. 0 ||

var2 := - var1 ...


END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

160

Manuel de rfrence du langage B - Version 1.8.6

7.21 La clause ASSERTIONS Syntaxe


Clause_assertions ::= "ASSERTIONS" Prdicat
+";"

Description La clause ASSERTIONS comporte une liste de prdicats appels assertions portant sur les variables du composant. Ces assertions sont des rsultats intermdiaires dduits de linvariant du composant susceptibles daider la preuve du composant. Une assertion est un lemme qui devra tre prouv partir de linvariant du composant et des lemmes qui le prcdent dans la clause ASSERTIONS. Lordre des assertions est donc significatif. Dans les obligations de preuve concernant les oprations du composant, les assertions sont ajoutes en hypothse, en plus de linvariant. Exemple Dans lexemple ci-dessous, la variable concrte var est un entier implmentable qui vrifie var2 = 1. Nous ajoutons une assertion pour dire que la variable var est gale 1 ou - 1. En effet, cette assertion peut tre prouve en prenant comme hypothse linvariant. Lors de la construction des autres Obligations de Preuve de la machine, chaque fois que linvariant apparat en hypothse alors cette assertion sera ajoute afin de faciliter la dmonstration de lObligation de Preuve.
MACHINE

MA
CONCRETE_VARIABLES

var
INVARIANT var INT

var2 = 1
ASSERTIONS

var = 1 var = - 1 ...


END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 7.22 La clause INITIALISATION Syntaxe


Clause_initialisation ::= "INITIALISATION" Substitution "INITIALISATION" Instruction Clause_initialisation_B0 ::=

161

Description La clause INITIALISATION permet dinitialiser toutes les variables du composant. Il faut prouver que linitialisation dun composant tablit linvariant. La clause INITIALISATION peut tre considre comme la dclaration dune opration particulire dun module. Cette opration ne possde pas de paramtre. Son rle est dinitialiser les variables du module afin quelles tablissent l'invariant du composant. Lors de lexcution du code B0 associ un projet, toutes les oprations dinitialisation des modules sont appeles dans un ordre de dpendance correct, avant le lancement du point dentre du projet. Restriction 1. Toutes les variables du composant non homonymes des variables dinstances de machines incluses ou importes doivent tre initialises dans la clause INITIALISATION. Utilisation Le nom de la clause est suivi par une substitution de spcification. Lensemble de ces substitutions est dcrit dans le chapitre 6 Substitution. Dans une machine abstraite, toutes les variables du composant doivent tre initialises dans linitialisation. Les variables des machines incluses par le composant ne doivent pas tre initialises par le composant puisquelles sont dj initialises dans la clause INITIALISATION de leur machine. Lors de linitialisation des variables dun composant, les variables des machines dpendantes (incluses, importes, vues ou utilises) sont considres comme dj initialises. Linitialisation permet de modifier les variables des machines incluses ou importes en appelant des oprations de ces machines. Cette possibilit est notamment utile pour tablir les invariants qui expriment des proprits de liaison sur des variables de machines incluses ou importes. Dans un raffinement, les substitutions de linitialisation doivent tre des substitutions de raffinement. Comme dans les machines, toutes les variables du raffinement qui ne proviennent pas d'une inclusion d'instance de machine par le raffinement doivent tre initialises. Il sagit des variables concrtes des abstractions du raffinement et des nouvelles variables, dclares dans le raffinement. Dans une implantation, la clause INITIALISATION permet dinitialiser les variables concrtes de limplantation. Les substitutions utilises dans linitialisation doivent cependant tre des substitutions dimplantation encore appeles instructions (cf. 7.25.4 Les instructions). Toutes les variables concrtes de limplantation doivent tre initialises. Il existe deux manires dinitialiser une variable concrte dune implantation M_i : directement, en donnant explicitement une valeur la variable concrte au sein dune instruction de linitialisation. La variable concrte est alors localise dans M_i.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

162

Manuel de rfrence du langage B - Version 1.8.6 indirectement, si la variable concrte porte le mme nom quune variable concrte dune instance de machine importe Mimp. Alors les deux variables homonymes doivent avoir le mme type. La variable de M_i ne doit pas tre initialise explicitement dans la clause INITIALISATION de M_i. On dit quelle est dlocalise dans Mimp. La variable concrte de M_i ne reprsente alors quune rfrence sur la variable homonyme de Mimp. Par consquent, linitialisation effective de la variable concrte est dporte dans la machine Mimp. Bien quil soit possible dutiliser dans linitialisation toutes les sortes dinstructions, la manire usuelle dinitialiser les variables consiste utiliser des substitutions devient gal ou des appels doprations.

Visibilit Les variables d'une machine sont accessibles en lecture et en criture dans la clause INITIALISATION de la machine. Les paramtres, les ensembles et les constantes de la machine sont accessibles en lecture. Les ensembles, les constantes, les lments densembles numrs et les variables des instances de machines incluses, utilises ou vues sont accessibles en lecture. En outre, les paramtres des machines utilises sont accessibles en lecture. Dans linitialisation dune machine M1, il est possible daccder aux oprations des machines incluses par M1 et aux oprations de consultation des machines vues par M1. Par contre, il est interdit daccder aux oprations propres de M1 et aux oprations des machines utilises par M1. Les variables du raffinement sont accessibles en criture dans la clause INITIALISATION du composant. Les paramtres, les ensembles, les constantes et les lments densembles numrs du raffinement sont accessibles en lecture dans linitialisation. Les ensembles, les constantes et les variables des machines incluses ou vues par le raffinement sont accessibles en lecture dans linitialisation. Dans linitialisation dun raffinement M1, il est possible daccder aux oprations des machines incluses par M1 et aux oprations de consultation des machines vues par M1. Par contre, il est interdit daccder aux oprations propres de M1. Les variables d'une implantation sont accessibles en lecture et en criture dans les instructions de la clause INITIALISATION de limplantation. Elles doivent tre crites avant dtre lues. Les paramtres formels, les lments numrs et les constantes de limplantation sont accessibles en lecture dans linitialisation. Les lments numrs, les constantes concrtes et les variables concrtes des machines vues ou importes par limplantation sont accessibles en lecture dans linitialisation. Les paramtres formels de limplantation, les ensembles, les constantes, les lments densembles numrs et les variables de limplantation et des instances de machines vues ou importes sont accessibles dans les invariants de boucles WHILE de linitialisation et dans les prdicats des substitutions ASSERT.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

163

Exemple Dans lexemple ci-dessous, la variable abstraite var1 de la machine MA est implante par la variable vimp, la variable var2 est implante implicitement par homonymie avec la variable var2 de la machine importe Mimp, et les variables concrtes var3 et var4 sont implantes localement comme des variables propres.
MACHINE

MA
ABSTRACT_VARIABLES

var1, var2
CONCRETE_VARIABLES

var4
INVARIANT

var1 NAT var2 BOOL var4 INT ...


END

MACHINE

Mimp
CONCRETE_VARIABLES

vimp, var2
INVARIANT

vimp 1 .. 100 var2 BOOL


IMPLEMENTATION INITIALISATION

MA_i
REFINES

vimp : 1 .. 100 || var2 : BOOL


OPERATIONS setv2 (b0) = PRE b0 BOOL THEN

MA
IMPORTS

Mimp
CONCRETE_VARIABLES

var3
INVARIANT

var2 := b0
END ; setvimp (in) = PRE

var3 NAT var1 = vimp


INITIALISATION

var3 := 0 ;
setv2 ( TRUE ) ; setvimp (10) ;

in 1 .. 100
THEN

vimp := in
END END

var4 := - 12 ...
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

164

Manuel de rfrence du langage B - Version 1.8.6

7.23 La clause OPERATIONS Syntaxe


Clause_operations Opration Entte_opration Clause_operations_B0 Opration_B0 ::= ::= ::= ::= ::= "OPERATIONS" Opration
+"," +";"

Entte_opration "=" Substitution_corps_opration [ Ident "c"] Ident_ren [ "(" Ident


+";" +","

")" ]

"OPERATIONS" Opration_B0

Entte_opration "=" Instruction_corps_opration

Substitution_corps_opration ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_any | Substitution_let | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_appel_opration Instruction_corps_opration ::= Instruction_bloc | Instruction_variable_locale | Substitution_identit | Instruction_devient_gal | Instruction_appel_opration | Instruction_conditionnelle | Instruction_cas | Instruction_assertion | Substitution_tant_que

Restrictions 1. Les paramtres formels d'une opration doivent tre deux deux distincts. 2. Dans une machine abstraite, les oprations dclares dans la clause opration ne doivent pas tre renommes. 3. Dans une machine abstraite, les paramtres dentre dune opration doivent tre typs dans le prdicat de la substitution prcondition qui doit dbuter le corps de lopration, par des prdicats de typage (cf. 3.7 Typage des paramtres dentre dopration et 3.3 Typage des donnes abstraites) situs au plus haut niveau danalyse syntaxique dans une srie de conjonctions. Ces paramtres dentre ne peuvent pas tre utiliss dans le prdicat de la substitution prcondition avant davoir t typs. 4. Dans une machine abstraite, les paramtres de sortie dune opration doivent tre typs dans le corps de lopration par des substitutions de typage (cf. 3.9 Typage des variables locales et des paramtres de sortie dopration). Ces paramtres de sortie ne peuvent pas tre utiliss dans le corps de lopration avant davoir t

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

165

typs. 5. Dans un raffinement dune machine abstraite, on ne doit pas dfinir de nouvelles oprations. 6. Dans une implantation, chaque opration de la machine abstraite doit tre dclare, soit en tant quopration propre, dans la clause OPERATIONS, soit en tant quopration promue, dans la clause PROMOTES (cf. 7.10 La clause PROMOTES), 7. Chaque opration d'un raffinement ou d'une implantation doit avoir les mmes paramtres formels et dans le mme ordre que sa spcification (lopration homonyme de la clause LOCAL_OPERATIONS dans le cas dune opration locale dimplantation, lopration homonyme de la machine abstraite sinon). 8. Dans la clause OPERATIONS dune implantation, on ne peut dfinir que des oprations qui sont spcifies dans la machine abstraite de limplantation, ou dans la clause LOCAL_OPERATIONS. 9. Dans une implantation, chaque opration locale spcifie dans la clause LOCAL_OPERATIONS doit tre implante dans la clause OPERATIONS. 10. Le graphe dappel doprations locales, en ne considrant que les implmentations doprations locales de la clause OPERATIONS, ne doit pas contenir de cycle. Description La clause OPERATIONS permet de dclarer dans un composant des oprations. Les oprations constituent la partie dynamique du langage B puisqu'elles peuvent faire voluer les variables d'un composant. Une opration peut possder des paramtres d'entre et des paramtres de sortie. Les oprations des machines abstraites constituent les spcifications de l'opration pour le module. Les oprations d'une machine sont utilisables par d'autres machines sous la forme d'appels d'oprations (cf. 6.16 Substitution appel dopration). La clause OPERATIONS permet galement de dclarer limplantation des oprations locales, spcifies dans la clause LOCAL_OPERATIONS (cf. 7.24 La clause LOCAL_OPERATIONS). Il faut dmontrer que les oprations d'une machine abstraite prservent l'invariant de la machine. Les oprations doivent tre raffines jusqu' l'implantation pour devenir des oprations informatiques. Il faut dmontrer chaque tape que l'opration est cohrente avec l'opration qu'elle raffine. Utilisation dans une machine abstraite Lensemble des oprations dune machine abstraite se compose des oprations promues (cf. 7.10 La clause PROMOTES et 7.11 La clause EXTENDS) et des oprations de la clause OPERATIONS. Ces dernires sont encore appeles oprations propres. La clause OPERATIONS permet de dclarer les services offerts par une machine et de spcifier leur comportement. Les oprations dune machine abstraite constituent la partie dynamique de la machine, par opposition aux donnes (les ensembles, les constantes, les variables et les paramtres des machines) qui constituent la partie statique. Elles permettent, en effet, de modifier les donnes de la machine. Il faudra prouver que lappel dune opration dune machine prserve linvariant de la machine. Les paramtres doprations des modules dvelopps (cf. 8.2 Module B) et des machines abstraites doivent tre de type concrets puisquelles seront associes un

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

166

Manuel de rfrence du langage B - Version 1.8.6 code, alors que les paramtres doprations des modules abstraits peuvent tre de type quelconque puisquils ne servent que dintermdiaire de raisonnement. Une opration se compose dun en-tte et dun corps.

En-tte dopration Len-tte dune opration est constitu dun identificateur dsignant le nom de lopration et des ventuels paramtres formels dentre et de sortie de lopration. Le nom dune opration propre dclare dans une machine abstraite ne doit pas possder de renommage. Les paramtres dentres sont reprsents par une liste didentificateurs parenthse qui suit le nom de lopration. Les paramtres de sortie sont reprsents par une liste didentificateurs prcdant le nom de lopration. Les paramtres dentre et de sortie dune opration doivent tre deux deux distincts. Passage des paramtres par valeur En B, lors de lappel dune opration, la smantique du passage des paramtres est la copie. Les paramtres dentre de lopration permettent de paramtrer un appel dopration laide de valeurs. Lors dun appel dopration, la valeur de chaque paramtre effectif dentre est recopie dans le paramtre formel.

Les paramtres de sortie de lopration permettent de renvoyer les rsultats dun appel dopration sous la forme de valeurs. Aprs un appel dopration, la valeur de chaque paramtre formel de sortie est recopie dans le paramtre effectif. Ces copies sont formalises par des substitutions devient gal entre les paramtres formels et effectifs dans la dfinition de la substitution dappel dopration (cf. 6.16 Substitution appel dopration). Rgles de porte La porte des paramtres formels dfinis dans len-tte dune opration est le corps de lopration. Les paramtres formels dentre dopration sont accessibles en lecture uniquement dans les prdicats, par exemple les prdicats des substitutions IF ou WHILE, et dans les substitutions. Les paramtres formels de sortie dopration sont accessibles dans les prdicats en lecture et dans les substitutions en lecture et en criture. Pour pouvoir lire un paramtre formel de sortie, il faut dabord lui avoir donn une valeur. Rgles de typage Les paramtres doprations des modules possdant un code associ (modules dvelopps par raffinements successifs ou machines abstraites) doivent tre de type implmentable. Les types permis sont ceux dune variable concrte (type entier, boolen, ensemble abstrait, ensemble numr ou tableau). Dans le cas des paramtres dentre dopration, on permet galement le type chane de caractre, ce qui donne la possibilit denvoyer un message laide dun appel dopration. Les paramtres doprations des modules abstraits peuvent tre de type quelconque (cf. 3.3 Typage des donnes abstraites). Les paramtres dentre dopration Les paramtres formels dentre doivent tre typs dans le corps de lopration, au sein dun prdicat de typage. Pour pouvoir utiliser un paramtre formel dentre dans lopration, il faut lavoir typ dans le texte qui prcde son utilisation. Une opration

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

167

possdant des paramtres dentre scrit laide dune substitution prcondition, qui type les paramtres formels dentre puis qui permet ventuellement dexprimer dautres proprits que doivent vrifier ces paramtres dentre. Lors de la spcification de lopration, on suppose que les paramtres formels dentre vrifient la prcondition et lors dun appel cette opration, on doit prouver que les paramtres effectifs dentre vrifient la prcondition. Les paramtres formels dentre ne peuvent pas tre modifis dans le corps de lopration. Exemple
MACHINE

MA
OPERATIONS Service1 (x1, b1, tab1, mess) = PRE x1 NAT b1 BOOL

tab1 (0 .. 10) (0 .. 10) 3 INT mess STRING ...


THEN

...
END END

Les paramtres de sortie dopration Les paramtres formels de sortie doivent tre typs dans le corps de lopration. Pour pouvoir utiliser un paramtre formel de sortie dans lopration, il faut lavoir typ dans le texte qui prcde son utilisation. La manire usuelle dcrire une opration possdant des paramtres de sortie consiste les typer en leur donnant une valeur dans une substitution devient gal , devient appartient , devient tel que ou comme paramtre de sortie dun appel dopration.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

168

Manuel de rfrence du langage B - Version 1.8.6

Exemple
MACHINE

MA
OPERATIONS

ok, res1, tab2 c Service2 =


BEGIN

res1 : (res1 0 .. 10 res1 / 2 = 0) || tab2 : (0 .. 10) (0 .. 10) 3 INT || ... ok := bool ( ... )
THEN

...
END END

Corps dopration Le corps dune opration propre est constitu dune substitution. Seules les substitutions de niveau spcification sont autorises (cf. chapitre 6 Substitutions). Exemple
MACHINE

MA
OPERATIONS

res_min, res_max, egal c Comparer (x1, x2) =


PRE

x1 INT x2 INT
THEN

res_min := min ({x1, x2}) || res_max := max ({x1, x2}) || egal := bool (x1 = x2)
END END

Visibilit Les variables du composant sont accessibles en lecture et en criture dans la clause OPERATIONS du composant. Les paramtres, les ensembles constantes et les lments densembles numrs du composant sont accessibles en lecture. Les ensembles, les constantes, les lments densembles numrs et les variables des machines incluses, utilises ou vues sont accessibles en lecture. En outre, les paramtres des machines utilises sont accessibles en lecture. Dans le corps dune opration propre dune machine M1, il est possible daccder aux oprations des machines incluses par M1 et aux oprations de consultation des machines vues par M1. Par contre, il est interdit daccder aux oprations propres de M1 et aux oprations des machines utilises par M1.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants Utilisation dans un raffinement

169

Raffinement dune opration Dans les raffinements successifs dune machine, chaque opration de la machine, quelle soit propre ou promue, doit tre raffine par une opration. Il est interdit de dclarer de nouvelles oprations dans un raffinement. Le nom de chaque opration dun raffinement doit correspondre au nom dune opration de labstraction correspondante. Cette opration peut prendre la forme dune opration propre ou dune opration promue, indpendamment du choix qui a t fait lors des abstractions du raffinement. Ainsi, chaque opration peut tre raffine par : une opration propre dans la clause OPERATIONS, dont le nom est celui de lopration dclare dans labstraction. Si le nom de lopration de labstraction comporte un prfixe alors le nom de lopration du raffinement le conserve. une opration promue par le raffinement, dont le nom est le nom de lopration dclare dans labstraction. Si lopration promue par le raffinement provient dune instance de machine incluse non renomme, alors cette machine doit possder une opration de mme nom. Si lopration promue par le raffinement provient dune instance de machine incluse renomme, alors le premier prfixe du nom de lopration doit correspondre au renommage de linstance de machine incluse par le raffinement et le nom de lopration sans le premier prfixe doit correspondre une opration de la machine incluse.

Exemple
MACHINE

MA
INCLUDES

MACHINE

MACHINE

MACHINE

b2.MB
PROMOTES b2.op1, b2.op2 OPERATIONS op3 = ... ; op4 = ...

MB
OPERATIONS op1 = ... ; op2 = ...

MC
OPERATIONS op1 = ...

MD
OPERATIONS op3 = ...

...
END

...
END

...
END

...
END

REFINEMENT

MA_r
REFINES

MA
INCLUDES

b2.MC, MD
PROMOTES b2.op1, op3 OPERATIONS b2.op2 = ... ; op4 = ...

...
END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

170

Manuel de rfrence du langage B - Version 1.8.6 Dans un raffinement, les paramtres formels de chaque opration doivent tre identiques ceux de lopration raffine. Chaque paramtre formel conserve le mme type que celui qui est dfini dans labstraction correspondant au raffinement. Corps dopration Le corps dune opration propre est constitu dune substitution. Seules les substitutions de niveau raffinement sont autorises. Il nest pas ncessaire de typer les paramtres formels de lopration dans le corps de lopration. En effet, le nom et le type de ces paramtres sont dtermins dans la machine correspondant au raffinement et reste identique au cours du raffinement. Le mcanisme du raffinement dopration se caractrise par plusieurs proprits concernant le corps de lopration du raffinement : le niveau dindterminisme de la substitution doit diminuer par rapport celui de labstraction. Il sagit donc, l o labstraction comportait des choix, dapporter peu peu des solutions afin de lever lindterminisme. Dans le dernier raffinement, limplantation, lindterminisme doit avoir compltement disparu. les prconditions peuvent tre affaiblies par rapport labstraction. Si une prcondition est prsente en en-tte dune opration de raffinement, il faut prouver que cette prcondition est plus faible que celle de la machine abstraite. Dans limplantation, les prconditions doivent avoir disparues.

la structure de la substitution doit voluer vers lutilisation de substitutions de plus en plus concrtes. Les substitutions concrtes sont les substitutions qui peuvent tre implmentes par un programme informatique. Dans limplantation, seules les substitutions concrtes sont acceptes. Les proprits dcrites ci-dessus permettent de raffiner par tapes une opration jusqu lobtention dun programme informatique. Pour que le raffinement dune opration possde un sens en B, il faut dmontrer que pour chaque raffinement, le corps de lopration soit cohrent avec ce qui a t spcifi dans labstraction. Utilisation dans une implantation La clause OPERATIONS dune implantation suit les mmes principes que ceux dun raffinement, mais les substitutions qui composent son corps doivent avoir les caractristiques suivantes : les substitutions employes doivent tre dterministes, les prconditions doivent avoir disparues et les substitutions doivent tre concrtes, cest-dire quelles doivent pouvoir tre excutes par un programme. En plus du raffinement de certaines oprations de la machine, la clause OPERATIONS dune implantation contient le raffinement de toutes les oprations locales spcifies dans la clause LOCAL_OPERATIONS de la machine abstraite (cf. 7.24 La clause LOCAL_OPERATIONS).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants Exemple
MACHINE

171

MA
OPERATIONS

res_min, res_max, egal c Comparer (x1, x2) =


PRE

x1 INT x2 INT
THEN

res_min := min ({x1, x2}) || res_max := max ({x1, x2}) || egal := bool (x1 = x2)
END END

REFINEMENT

MA_r
REFINES

MA
OPERATIONS

res_min, res_max, egal c Comparer (x1, x2) =


BEGIN IF x1 x2 THEN

res_min, res_max := x1, x2


ELSE

res_min, res_max := x2, x1


END ;

egal := bool (x1 = x2)


END END

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

172

Manuel de rfrence du langage B - Version 1.8.6

7.24 La clause LOCAL_OPERATIONS Syntaxe


Clause_operations_locales Opration Entte_opration ::= ::= ::= "LOCAL_OPERATIONS" Opration
+"," +";"

Entte_opration "=" Substitution_corps_opration [ Ident "c"] Ident_ren [ "(" Ident


+","

")" ]

Substitution_corps_opration ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_any | Substitution_let | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_appel_opration

Restrictions 1. Les paramtres formels d'une opration locale doivent tre deux deux distincts. 2. Les oprations locales ne doivent pas tre renommes. 3. Les paramtres dentre dune opration locale doivent tre typs, dans le prdicat de la substitution prcondition qui doit dbuter le corps de lopration locale, par des prdicats de typage (cf. 3.7 Typage des paramtres dentre dopration) situs au plus au niveau danalyse syntaxique dans une srie de conjonctions. Ces paramtres dentre ne peuvent pas tre utiliss dans le prdicat de la substitution prcondition avant davoir t typs. 4. Les paramtres de sortie dune opration locale doivent tre typs dans le corps de lopration par des substitutions de typage (cf. 3.9 Typage des variables locales et des paramtres de sortie dopration). Ces paramtres de sortie ne peuvent pas tre utiliss dans le corps de lopration avant davoir t typs. Description Les oprations locales dune implantation sont dites locales car elles ne sont utilisables que par les oprations (non locales ou locales) de cette implantation, mais pas par des composants extrieurs limplantation. Une opration locale est spcifie dans la clause LOCAL_OPERATIONS et implante dans la clause OPERATIONS, avec limplantation des oprations non locales et non promues. Les oprations locales partagent de nombreuses caractristiques avec les oprations non locales (cf. 7.23 La clause OPERATIONS) : elles peuvent faire voluer des variables laide de substitutions ; elles peuvent galement possder des paramtres dentre et de sortie. Elles diffrent des oprations non locales par leur raffinement : elles sont spcifies et implantes dans une mme implantation, et par leur visibilit : elles ne sont accessibles (sous la forme dappels dopration, cf. 6.16 Substitution appel

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

173

dopration) que par les oprations de limplantation dans laquelle elles sont dfinies. Il faut dmontrer que les spcifications doprations locales prservent linvariant des machines importes. Il faut galement dmontrer que limplantation de chaque opration locale (cf. 7.23 La clause OPERATIONS) est cohrente avec la spcification de lopration locale. Utilisation Les oprations locales servent factoriser lcriture dun projet B. Une opration locale se dfinit dans une implantation par sa spcification et son implantation. Comme toujours dans la Mthode B, les appels une opration locale seront remplacs par la spcification de lopration locale lors de la preuve et par un appel leur implmentation dans le programme informatique associ au projet. La spcification dune opration locale ncessite des substitutions de machine abstraite, comme la spcification dune opration non locale. En particulier, la substitution simultane est autorise, mais pas la substitution squencement. Les constantes et variables abstraites du raffinement de limplantation et des instances de machines vues ou importes par limplantation sont accessibles dans la spcification de lopration. De plus, les variables importes sont modifiables directement par la spcification de lopration locale. Limplantation dune opration locale est situe dans la clause OPERATIONS, avec limplantation des oprations de la machine, non promues par limplantation. Elles doivent respecter les mmes rgles que ces oprations non locales. En particulier, la substitution simultane est interdite, la substitution squencement est autorise et les constantes et variables abstraites ne sont pas accessibles dans les instructions. Une opration locale peut tre appele par les implmentations des oprations non locales de limplantation. Elle ne peut pas tre appele par linitialisation de limplmentation. Elle possde des droits similaires ceux des oprations non locales de limplantation. Elle peut notamment modifier directement les variables concrtes de limplantation. Elle peut galement modifier les variables des instances de machines importes (directement dans la spcification des oprations locales et indirectement, par des appels dopration dans limplmentation des oprations locales, cf. Modle quivalent ci-aprs). Si une opration locale est appele plusieurs fois, on factorise un traitement commun.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

174

Manuel de rfrence du langage B - Version 1.8.6 Exemple


IMPLEMENTATION

MA_i
LOCAL_OPERATIONS max_y = BEGIN x0 := max (y1, y2) END OPERATIONS max_y = IF y1 > y2 THEN

x0 := y1
ELSE

x0 := y2
END ; OpA = BEGIN max_y ; END END

Modle quivalent Le sens des oprations locales est dcrit par le modle quivalent suivant. Soit MA_i une implantation qui dfinit lopration locale op_loc et qui importe la machine MB. Le principe gnral du modle est quivalent est le suivant : limplantation MA_i importe une machine M_loc contenant la spcification de op_loc et la machine M_loc est raffine par limplantation M_loc_i qui contient limplantation de op_loc et qui fait un extends de MB. Cest ce qui est reprsent par le schma suivant. En entrant plus dans les dtails, on obtient MA_i partir de MA_i en supprimant les dclarations de variables concrtes et linitialisation. On recopie tous les lments constituant MB dans la machine M_loc. Dans le cas o MB inclut une machine MC, alors on recopie galement dans M_loc toutes les donnes de MC et on effectue lexpansion des appels aux oprations de MC. On recopie galement dans M_loc toutes les variables concrtes prsentes dans MA_i. Linvariant de M_loc se compose de linvariant de MB, de celui de MC et du typage B des variables concrtes de MA_i. Linitialisation de M_loc comprend linitialisation de MC, puis linitialisation de MB, puis linitialisation de MA_i. Enfin, les instructions du corps des oprations de MA_i qui ne sont pas des appels doprations sont transformes en opration dans M_loc et dans M_loc_i. Les nouvelles obligations de preuve obtenues pour les oprations locales dcoulent directement des obligations de preuve classiques des oprations du module doprations locales.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

175

IMPLEMENTATION

IMPLEMENTATION

MACHINE

MA_i
LOCAL_OPERATIONS op_loc = OPERATIONS op_loc =

MA_i
OPERATIONS opA = BEGIN

M_loc
OPERATIONS op_loc = END

op_loc ;

;
opA = BEGIN END END

IMPLEMENTATION

op_loc ;

M_loc_i
OPERATIONS op_loc = END

END END

MACHINE

MACHINE

MB
OPERATIONS opB = END

MB
OPERATIONS opB = END

La factorisation obtenue est claire : on gagne lcriture du module doprations locales.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

176 7.247.25

Manuel de rfrence du langage B - Version 1.8.6 Spcificits du B0

On appelle B0, la partie du langage B permettant de dcrire les oprations et les donnes des implantations. Le B0 quivaut un langage de programmation informatique, manipulant des donnes concrtes, alors que le langage B est un langage de spcification et de programmation. Les donnes concrtes prsentes dans le B0 sont les constantes concrtes, les variables concrtes, les paramtres dentre et de sortie dopration, les paramtres de machines, les variables locales, les ensembles abstraits et les ensembles numrs ainsi que leurs lments. La nature de ces donne est dcrite au 3.4 Types et contraintes des donnes concrtes. Afin de bien marquer la diffrence entre les langages B et B0, on adopte un nouveau vocabulaire pour dsigner les productions de la grammaire du B0. Les substitutions concrtes sont appeles instructions (cf. 7.25.4). Les prdicats concrets sont appels conditions (cf. 7.25.3) et les expressions concrtes sont appeles termes (cf. 7.25.2). 1.1.17.25.1 Contrle des tableaux en B0 Description Pour garantir que des tableaux concrets (cf. 3.4 Types et contraintes des donnes concrtes) soient traduisibles, on ajoute aux contrles de type concernant les prdicats, les expressions et les substitutions destins tre traduits, un contrle de compatibilit B0, comme dfini ci-dessous. Restriction 1. Deux tableaux concrets sont compatibles en B0 sils ont le mme type et sils ont reus syntaxiquement le mme domaine de dfinition lors de leur typage. Le domaine de dfinition dun tableau est dtermin soit directement lorsque le tableau est typ dans un prdicat de typage qui dfinit explicitement ce domaine, soit par infrence si le tableau est typ laide dun autre tableau. Utilisation Deux tableaux concrets peuvent ne pas tre compatibles pour un programme informatique alors qu'ils sont de mme type. Ceci se produit lorsque certains ensembles indices des tableaux sont des intervalles de valeurs diffrentes. Par exemple, les tableaux concrets Tab1 (1 .. 5) 3 INT et Tab2 (1 .. 10) 3 INT sont de mme type, mais ils ne peuvent pas servir de valeur une mme variable informatique, puisqu'ils sont de taille diffrente. Daprs la restriction nonce ci-dessus, les tableaux concrets Tab1 et Tab2 ne sont pas compatibles en B0 puisque leurs domaines de dfinition (1 .. 5) et (1 .. 10) sont syntaxiquement distincts. Ce contrle est une condition suffisante mais pas ncessaire afin d'assurer que les valeurs de deux tableaux concrets soient compatibles. En effet, si c1 et c2 sont deux constantes concrtes dsignant des entiers positifs gaux, alors les tableaux Tab3 (0 .. c1) 3 INT et Tab4 (0 .. c2) 3 INT ne seront pas compatibles en B0, mme si c1 et c2 sont gales.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

177

1.1.27.25.2 Les termes Syntaxe


Terme ::= | | | Terme_simple Expression_arithmtique Terme_record + Terme_record ( "" Ident ) Ident_ren Entier_lit Boolen_lit + Ident_ren ( "" Ident ) Entier_littral "MAXINT" "MININT" "FALSE" "TRUE"

Terme_simple ::= | | | Entier_lit ::= | | Boolen_lit ::= |

Expression_arithmtique ::= Entier_lit | Ident_ren +"," | Ident_ren "(" Terme ")" + | Ident_ren ( "" Ident ) | Expression_arithmtique "+" Expression_arithmtique | Expression_arithmtique "-" Expression_arithmtique | "-" Expression_arithmtique | Expression_arithmtique "" Expression_arithmtique | Expression_arithmtique "/" Expression_arithmtique | Expression_arithmtique "mod" Expression_arithmtique | Expression_arithmtique Expression_arithmtique | "succ" "(" Expression_arithmtique ")" | "pred" "(" Expression_arithmtique ")" | "(" Expression_arithmtique ")" Terme_record ::= "rec" "(" ( [ Ident ":" ] ( Terme | Expr_tableau ) ) Expr_tableau ::= | | Intervalle_B0 ::= | Expression_arithmtique ".." Expression_arithmtique Ensemble_entier_B0 Ident +"m" +"," "{" ( Terme_simple "m" Terme ) "}" +"" Ensemble_simple "" "{" Terme "}"
+","

")"

Ensemble_entier_B0 ::= "NAT" | "NAT1" | "INT"

Description Les termes reprsentent la restriction des expressions du langage B utilisables en B0. Les termes peuvent tre implments par un programme informatique. Ils sont utiliss au sein des instructions et des conditions.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

178

Manuel de rfrence du langage B - Version 1.8.6 Les termes doivent tre du type des variables concrtes (cf. 3.6 Typage des variables concrtes). Lutilisation directe, dans les instructions, de termes ncessite de prouver que les termes sont bien dfinis et peuvent tre correctement implments dans un langage de programmation classique. Pour cela, les obligations de preuves suivantes devront tre dmontres : lors de lutilisation, dans une expression B0, dune donne de type entier, il faut prouver que la donne appartient INT (dfini par MININT .. MAXINT) qui est lensemble des entiers concrets. En effet, on fait lhypothse que sur la machine cible sur laquelle sexcute le projet, il est possible de reprsenter directement tout entier compris entre MININT et MAXINT sans quil se produise un dbordement. lors de lutilisation dans une expression B0 dun oprateur arithmtique, il faut prouver que ses oprandes appartiennent au domaine de dfinition de loprateur en B0 et que le rsultat appartient INT. Les oprateurs arithmtiques utilisables dans les termes ainsi que leur domaines de dfinition sont donns dans le tableau cidessous :
Expression B0 arithmtique Addition en B0 Soustraction en B0 Moins unaire en B0 Multiplication en B0 Division entire en B0 Modulo en B0 Puissance en B0 Successeur en B0 Prdcesseur en B0 a+b a-b -a a*b a/b a mod b a
b

Condition a INT a INT a INT a INT a INT a NAT a INT a INT a INT b INT b INT - {0} b NAT1 b NAT b INT b INT a + b INT a - b INT - a INT a * b INT a / b INT a mod b INT a b INT succ (a) INT pred (a) INT

succ (a) pred (a)

lors de laccs dans une instruction un lment dun tableau concret (on rappelle quen B un tableau est une fonction totale), il faut prouver que lindice utilis appartient au domaine de dfinition du tableau.

7.24.37.25.3 Les conditions Syntaxe


Condition ::= | | | | | | | | | Terme_simple "=" Terme_simple Terme_simple "" Terme_simple Terme_simple "<" Terme_simple Terme_simple ">" Terme_simple Terme_simple "" Terme_simple Terme_simple "" Terme_simple Condition "" Condition Condition "" Condition "" "(" Condition ")" "(" Condition ")"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

179

Description Les conditions reprsentent la restriction des prdicats du langage B utilisables en B0. Les conditions peuvent tre values par un langage informatique. Elles sont utilises en B0 comme condition de branchement des instructions conditionnelles IF et comme condition darrt des instructions de boucle tant que . Dans le cas des prdicats dgalit et dingalit portant sur des tableaux, on rappelle que les tableaux doivent, bien sr, avoir le mme type, mais quils doivent aussi avoir le mme domaine de dfinition (cf. 7.25.1 Contrle des tableaux en B0). 7.24.47.25.4 Les instructions Syntaxe
Instruction ::= Instruction_bloc | Instruction_variable_locale | Substitution_identit | Instruction_devient_gal | Instruction_appel_opration | Instruction_conditionnelle | Instruction_cas | Instruction_assertion | Instruction_squence | Substitution_tant_que Instruction_bloc ::= "BEGIN" Instruction "END" Instruction_variable_locale ::= +"," "VAR" Ident "IN" Instruction "END" Instruction_devient_gal ::= +"," Ident_ren [ "(" Terme ")" ] ":=" Terme | Ident_ren ":=" Expr_tableau + | Ident_ren ("" Ident ) ":=" Terme Instruction_appel_opration ::= +"," +"," [ Ident_ren "c" ] Ident_ren [ "(" (Terme | Chane_lit) ")" ] Instruction_squence ::= Instruction ";" Instruction Instruction_conditionnelle ::= "IF" Condition "THEN" Instruction * ( "ELSIF" Condition "THEN" Instruction ) [ "ELSE" Instruction ] "END" Instruction_cas ::= "CASE" Terme_simple "OF" +"," "EITHER" Terme_simple "THEN" Instruction +"," * ( "OR" Terme_simple "THEN" Instruction ) [ "ELSE" Instruction ] "END" "END" Instruction_assertion ::= "ASSERT" Prdicat "THEN" Instruction "END"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

180

Manuel de rfrence du langage B - Version 1.8.6


Substitution_tant_que ::= "WHILE" Condition "DO" Instruction "INVARIANT" Prdicat "VARIANT" Expression "END"

Description Les instructions reprsentent une restriction des substitutions du langage B qui peuvent tre implmentes par un programme informatique. Les instructions sont utilises dans le corps de linitialisation et dans le corps des oprations. Voici les particularits des instructions : Instruction devient gal Dans une instruction devient gal , il est seulement permis de raliser les affectations suivantes : affectation dune donne scalaire, affectation dune donne tableau, tous les lments du tableau doivent recevoir une valeur. La valeur affecte peut tre soit une donne tableau soit un tableau littral (cf. 7.17 La clause VALUES). Les tableaux doivent bien sr avoir le mme type, mais ils doivent aussi avoir le mme domaine de dfinition (cf. 7.25.1 Contrle des tableaux en B0). affectation dun lment de tableau, les indices utiliss pour dsigner un lment de tableau doivent tre des termes. affectation dun champ, ou dun sous champ, dune donne record.

Instruction dappel dopration Dans une instruction dappel dopration, les paramtres effectifs dentre peuvent tre soit des termes, soit des chanes de caractres littrales. Dans le cas o un paramtre effectif dentre ou de sortie dun appel opration est un tableau, le paramtre formel et le paramtre effectif doivent bien sr avoir le mme type, mais ils doivent aussi avoir le mme domaine de dfinition (cf. 7.25.1 Contrle des tableaux en B0). Instruction CASE Dans une instruction CASE, lexpression de slection doit tre un terme simple. Instruction ASSERT Dans une instruction ASSERT, lassertion introduite reste un prdicat car elle ne sert pas la production de code, mais la preuve de limplantation.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants 7.257.26 Rgles danticollision didentificateurs

181

Les rgles danticollision didentificateurs servent viter que dans une clause dun composant, il soit possible daccder plusieurs constituants portant le mme nom mais dsignant des constituants diffrents sans savoir lequel est effectivement utilis. Les rgles danticollision dpendent principalement des rgles de visibilit entre composants. En effet si un composant MA voit une instance de machine MB, alors une donne de MB accessible par MA ne doit pas porter le mme nom quune donne de MA. Les donnes dclares dans un prdicat, une substitution ou dans un en-tte dopration ne participent pas au contrle danticollision. En effet, elles ont une porte limite respectivement au prdicat, la substitution et au corps de lopration dans lequel elles sont dclares. Si elles portent le mme nom quun constituant accessible, alors elles le masquent localement. Machine abstraite Soit une machine abstraite Mch. La liste LMch comprend les identificateurs suivants de Mch : nom de Mch, nom des paramtres de Mch, nom des ensembles abstraits et des ensembles numrs de Mch, nom des lments numrs et des constantes de Mch, nom des variables de Mch,

nom des oprations propres de Mch. La liste LSees comprend les identificateurs suivants pour chaque machine vue MSees par Mch : nom de MSees avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MSees, sans le prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MSees, sans le prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des variables de MSees avec le prfixe de renommage,

nom des oprations de MSees avec le prfixe de renommage. La liste LInc comprend les identificateurs suivants pour chaque machine incluse MInc par Mch : nom de MInc, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MInc, sans le prfixe de renommage, si plusieurs instances de machines sont incluses, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MInc, sans le prfixe de renommage, si plusieurs instances de machines sont incluses, les noms des donnes ne doivent pas tre rpts,

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

182

Manuel de rfrence du langage B - Version 1.8.6 nom des variables de MInc, avec le prfixe de renommage,

nom des oprations de MInc, avec le prfixe de renommage. La liste LUses comprend les identificateurs suivants pour chaque machine utilise MUses par M : nom de MUses, avec le prfixe de renommage, nom des paramtres de MUses, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MUses, sans le prfixe de renommage, si plusieurs instances de machines sont utilises, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MUses, sans le prfixe de renommage, si plusieurs instances de machines sont utilises, les noms des donnes ne doivent pas tre rpts, nom des variables de MUses, avec le prfixe de renommage.

Rgle danticollision Les noms de la liste LMch LSees LInc LUses doivent tre deux deux distincts. Raffinement Soit un raffinement Raf dont la machine abstraite est Mch. La liste LRaf comprend les identificateurs suivants de Raf : nom de Mch, nom des paramtres de Raf, nom des ensembles abstraits et des ensembles numrs de Raf, sauf ceux qui sont homonymes un lment de mme nature dune instance de machine incluse ou vue, nom des lments numrs et des constantes de Raf, sauf ceux qui sont homonymes un lment de mme nature dune instance de machine incluse ou vue, nom des variables de Raf, sauf les variables concrtes provenant de labstraction de Raf et homonymes des variables concrtes dune instance de machine incluse, nom des oprations propres de Raf, nom des constantes abstraites de labstraction de Raf disparaissant dans Raf, sauf celles qui sont homonymes des constantes abstraites dune instance de machine incluse ou vue,

nom des variables abstraites de labstraction de Raf disparaissant dans Raf, sauf celles qui sont homonymes des variables abstraites dune instance de machine incluse, La liste LSees comprend les identificateurs suivants pour chaque machine vue MSees par Raf : nom de MSees, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MSees, sans le

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Composants

183

prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MSees, sans le prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des variables de MSees, avec le prfixe de renommage,

nom des oprations de MSees, avec le prfixe de renommage. La liste LInc comprend les identificateurs suivants pour chaque machine incluse MInc par Raf : nom de MInc, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MInc, sans le prfixe de renommage, si plusieurs instances de machines sont incluses, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MInc, sans le prfixe de renommage, si plusieurs instances de machines sont incluses, les noms des donnes ne doivent pas tre rpts, nom des variables de MInc, avec le prfixe de renommage, nom des oprations de MInc, avec le prfixe de renommage.

Rgle danticollision Les noms de la liste LRaf LSees LInc doivent tre deux deux distincts. Implantation Soit une implantation Imp dont la machine abstraite est Mch. La liste LImp comprend les identificateurs suivants de Imp : nom de Mch, nom des paramtres de Imp, nom des ensembles abstraits, sauf ceux qui proviennent de labstraction de Imp et qui sont homonymes des ensembles abstraits dune instance de machine importe ou vue, nom des ensembles numrs de Imp et de leurs lments numrs, sauf pour les ensembles numrs qui proviennent de labstraction de Imp et qui sont homonymes un ensemble numr dune machine importe ou vue, nom des constantes concrtes de Imp, sauf celles qui proviennent de labstraction de Imp et qui sont homonymes des constantes concrtes dune instance de machine importe ou vue, nom des variables concrtes de Imp, sauf celles qui proviennent de labstraction de Imp et qui sont homonymes des variables concrtes dune instance de machine importe, nom des oprations de la clause OPERATIONS de Imp (il sagit des oprations non promues et non locales ainsi que des oprations locales), nom des constantes abstraites de labstraction de Imp, sauf celles qui sont homonymes des constantes abstraites dune instance de machine importe.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

184

Manuel de rfrence du langage B - Version 1.8.6 La liste LImports comprend les identificateurs suivants pour chaque machine importe par Imp : nom de MImports, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MImports, sans le prfixe de renommage, si plusieurs instances de machines sont importes, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MImports, sans le prfixe de renommage, si plusieurs instances de machines sont importes, les noms des donnes ne doivent pas tre rpts, nom des variables de MImports, avec le prfixe de renommage,

MImports

nom des oprations de MImports, avec le prfixe de renommage. La liste LSees comprend les identificateurs suivants pour chaque machine vue MSees par Imp : nom de MSees, avec le prfixe de renommage, nom des ensembles abstraits et des ensembles numrs de MSees, sans le prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des lments numrs et des constantes de MSees, sans le prfixe de renommage, si plusieurs instances de machines sont vues, les noms des donnes ne doivent pas tre rpts, nom des constantes de MSees, sans le prfixe de renommage, nom des variables de MSees, avec le prfixe de renommage, nom des oprations de MSees, avec le prfixe de renommage.

Rgle danticollision Les noms de la liste LImp LImports LSees doivent tre deux deux distincts.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Architecture

185

48 ARCHITECTURE B
8.1 Introduction Un dveloppement complet en B se droule dans le cadre dun projet B. Un projet permet de modliser de manire formelle un systme de nature quelconque. La finalit du projet B est de produire un programme excutable. La sret de fonctionnement de cet excutable est tudie en dtail par la mthode B. La construction dun projet B se fait laide du dveloppement de modules B. 8.2 Module B

Prsentation Un module B permet de modliser un sous-systme ; il constitue une partie dun projet B. Les modules sont constitus par des composants B. Les trois sortes de composants B existant sont la machine abstraite, le raffinement et limplantation. Un module possde les proprits suivantes : il comprend toujours une machine abstraite, qui reprsente la spcification du module. Il peut possder une implantation et ventuellement des raffinements. Enfin, il peut possder un code associ. Il existe trois sortes de modules qui se dfinissent en fonction de leurs proprits. Il sagit des modules dvelopps par raffinements successifs dune machine abstraite, des modules de base et des modules abstraits. Ces modules sont dcrits dans le tableau ci-dessous.
Module Proprits Possde une machine abstraite Possde une implantation et ventuellement des raffinements Possde un code associ Module dvelopp oui oui oui (par traduction) Module de base oui non oui (manuellement) Module abstrait oui non non

Machine abstraite Une machine abstraite contient la description de la spcification dun module B. ce titre, le langage B constitue donc un langage de spcification part entire. Seule la machine abstraite dun module est accessible par les modules externes. Par abus de langage, on emploie parfois le terme machine abstraite ou plus simplement machine la place de module. En effet, dune part le nom du module et de sa machine abstraite son confondus et dautre part linterface du module, cest--dire la partie accessible de lextrieur, est commune au module et sa machine abstraite. Une machine abstraite comprend des liens (cf. 8.3 Liens entre composants), une partie statique et une partie dynamique. La partie statique est forme de donnes prenant la forme densembles, de constantes, de variables ou de paramtres et par les proprits de ces donnes. Une donne est un objet mathmatique faisant partie de la boite outil mathmatique du langage B (cf. chapitre 5 Expressions), comme par exemple un scalaire, un ensemble, une fonction ou une suite. Les donnes sont encapsules dans la machine abstraite. La partie dynamique permet de manipuler les donnes. Elle est constitue de linitialisation qui permet de donner une valeur initiale aux variables et

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

186

Manuel de rfrence du langage B - Version 1.8.6 doprations qui correspondent des services offerts par la machine pour manipuler les variables. On nomme invariant les proprits des variables de la machine. Linvariant doit tre tabli lors de linitialisation de la machine et il doit tre prserv lors de lappel dune opration de la machine. Linvariant constitue donc lnonc des proprits de scurit de la machine.

Raffinement Le raffinement dune machine abstraite est un composant qui conserve la mme interface et le mme comportement que la machine abstraite mais qui reformule les donnes et les oprations de la machine laide de donnes plus concrtes. Le raffinement permet galement denrichir ce qui a t spcifi dans la machine abstraite. Lors du raffinement, les ensembles et les donnes concrtes dune machine sont conserves. Les donnes raffinables sont raffines, ce qui signifie quelles peuvent tre conserves, disparatre ou changer de forme. De nouvelles donnes peuvent tre introduites. Le corps des oprations doit galement tre raffin : chaque opration raffine doit raliser ce qui est spcifi dans labstraction, laide des donnes du raffinement et de substitutions plus concrtes et plus dterministes. Un premier raffinement peut son tour tre raffin par un autre raffinement selon les principes indiqus ci-dessus. Plusieurs niveaux de raffinement peuvent ainsi tre utiliss afin de reformuler progressivement, par tapes successives, la machine abstraite. Implantation Une implantation est un composant B qui constitue le niveau ultime de raffinement dune machine abstraite. Elle utilise largement un sous-ensemble du langage B, appel B0, semblable un langage de programmation informatique. Les donnes dune implantation doivent tre des donnes concrtes (scalaires, tableaux, chanes de caractres) implmentables directement dans un langage informatique volu (cf. 3.4 Types et contraintes des donnes concrtes). Le corps des oprations dune implantation doit tre constitu par des substitutions concrtes, appeles instructions, excutables directement dans un langage informatique volu (cf. 7.24 La clause LOCAL_OPERATIONS). Ces proprits font quil est possible de produire systmatiquement un programme informatique partir du B0 dun projet B smantiquement correct. Pour obtenir une meilleure intgration dans nimporte quel systme informatique, le B0 est traduit automatiquement dans un langage informatique volu comme Ada ou C++. Exemple Le schma suivant reprsente graphiquement un module dvelopp complet. ModuleA reprsente la fois le nom du module et le nom de la machine abstraite reprsentant la spcification du module. ModuleA_r1 et ModuleA_r2 sont les noms des raffinements successifs de ModuleA. ModuleA_i est le nom de limplantation de ModuleA.
ModuleA ModuleA_r1 ModuleA_r2 ModuleA_i

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Architecture

187

Module de base Un module de base, encore appel machine de base, dsigne un module B qui nest compos que dune machine abstraite. Une machine de base correspond une feuille dans le graphe dimportation dun projet. Contrairement aux autres modules qui sont raffins et peuvent tre traduits, il nest pas traduit mais doit possder un code associ qui implmente directement ses donnes et ses services. En effet, comme la machine abstraite peut comporter des donnes abstraites et des substitutions abstraites, ventuellement non dterministes, il nest pas possible de produire de manire systmatique un programme partir de ces seules spcifications. Les machines de base peuvent servir dinterface avec un code existant ou bien avec des fonctionnalits de bas niveau qui nexistent pas dans le langage B, comme les fonctions systmes. Les fonctions dentres/sorties constituent un exemple typique de fonctionnalits interfaes laide de machines de base. Module abstrait Un module abstrait est compos dune machine abstraite qui nest pas raffine et qui ne possde pas de code associ. La seule utilisation dun module abstrait dans un projet B consiste linclure (cf. lien INCLUDES) dans une machine abstraite ou dans un raffinement sans jamais limporter (cf. lien IMPORTS) dans le projet. Il constitue donc un intermdiaire de raisonnement. 8.3 Projet B

Prsentation Un projet B dsigne un ensemble complet dinstances de modules B. Les composants de ces instances de modules sont relis par des liens. Les liens doivent respecter certaines rgles. Instanciation et renommage Une instance de module est la copie dune machine abstraite. Linstanciation permet de rutiliser plusieurs fois une machine abstraite dans un mme projet. Chaque instance de machine abstraite possde un espace de donne propre qui contient les valeurs des donnes modifiables de la machine. Ces donnes sont propres linstance, il sagit des variables (cf. 7.18 La clause CONCRETE_VARIABLES et 7.19 La clause ABSTRACT_VARIABLES) et des paramtres de la machine (cf. 7.5 La clause CONSTRAINTS). Les constantes dune machine sont propres la machine puisque leur valeur est identique dans toutes les instances de machines. Lors de lappel dune opration dune instance de machine, les valeurs des variables et des paramtres de la machine manipuls par lopration sont ceux de lespace de donne de linstance. On distingue les instances locales un composant et les instances globales au projet. Les premires sont cres par les liens INCLUDES (cf. lien INCLUDES) en phase de spcifications ou de raffinement. Elles constituent des espaces de donnes locaux au composant car seulement accessible par celui-ci. Les secondes sont cres par les liens IMPORTS (cf. lien IMPORTS) en phase dimplantation et constituent les espaces de donnes globaux au projet car elles sont accessible depuis lensemble du projet laide du lien SEES (cf. lien SEES).

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

188

Manuel de rfrence du langage B - Version 1.8.6 Chaque instance possde un nom qui lui est propre. Ce nom peut tre soit le nom de la machine sans renommage, soit un identificateur, appel prfixe de renommage, suivi dun point et du nom de la machine. Dans le cas dune instance sans renommage, linstance et la machine abstraite ont le mme nom, mais elles ne doivent pas tre confondues. Linstanciation sans renommage reprsente le cas le plus frquent dans un projet B puisque les machines qui ne sont instancies quune seule fois nont pas besoin dtre renommes (on peut donc choisir de les instancier sans renommage). Par contre, linstanciation avec renommage est obligatoire ds quun machine est instancie plusieurs fois, car le nom de chaque instance de machine dun projet B doit tre unique pour identifier les espaces de donnes. Si un composant Cmp accde une instance de machine InstMch, alors le nom de cette instance influe sur le nom sous lequel seront dsigns dans Cmp les variables, les oprations et les paramtres de InstMch (cf. 7.26 Rgles danticollision didentificateurs). Si linstance est sans renommage, alors les variables, les oprations et les paramtres de InstMch seront utiliss dans Cmp sous le mme nom que dans la machine abstraite qui les dclare. Si InstMch est renomme alors le nom des variables, des oprations et des paramtres utiliss dans Cmp devra tre prfix par le prfixe de renommage de InstMch suivi dun point.

Liens entre composants Les composants dun projet B peuvent tre relis par cinq sortes des liens : IMPORTS, SEES, INCLUDES, EXTENDS et USES. Ils sont dclars dans les clauses de visibilit des composants. En voici une description sommaire : lien IMPORTS Le lien IMPORTS entre une implantation Mi et une instance de machine MB permet de crer concrtement linstance MB et de disposer entirement de ses services. On dit que Mi est le pre de MB, car il contrle entirement lcriture des donnes modifiables de MB. Limportation permet de structurer un projet B en couches, en effet limplantation dun module simplmente par importation sur dautres modules offrant des services de plus bas niveau. On appelle graphe dimportation dun projet B, le graphe form de lensemble des modules du projet B et des liens dimportation entre les implantations de ces modules. Pour dsigner quelle instance de machine est importe par un lien, on indique sur le lien le prfixe de renommage de linstance de machine importe et rien sil ny a pas de renommage. Un graphe dimportation doit possder une unique racine qui joue un rle particulier. Cest la machine principale du projet. Ces oprations constituent le point dentre du projet. partir de la machine principale, le graphe dimportation sorganise en couches qui reprsentent les niveaux de dcomposition du projet en lments de plus en plus simples. Une feuille du graphe est soit un module dvelopp terminal, si le module a pu tre dvelopp sans recourir aux services de machines de base, soit une machine de base. Le graphe dimportation dun projet dcrit entirement lorganisation du programme associ au projet puisque chaque module du graphe possde un code associ, quil sagisse de modules dvelopps ou de modules de base.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Architecture

189

Le schma ci-dessous prsente un exemple de graphe dimportation dun projet. Chaque instance de module possde de 0 n fils et un unique pre, sauf le module principal qui ne possde pas de pre. Les modules BasicX, BasicY et BasicZ reprsentent des modules de base. Le module MH est import trois fois, une fois sans renommage, une fois avec le renommage h1 et une fois avec le renommage h2.
MA MA_i MB MB_r MB_i MC MC_r1 MC_r2 MC_i IMPORTS

MD MD_i

ME ME_i

MF MF_i h1 h2

MG MG_i

MH MH_i

BasicX

MH MH_i

BasicY

BasicZ

lien SEES Le lien SEES est une rfrence transversale dans le graphe dimportation du projet B qui permet un composant de voir une instance de machine , cest--dire daccder en lecture mais pas en criture aux constituants de linstance de machine vue. On dit quun module dpend dun autre module, si limplantation du premier module voit ou importe une instance du second module. Le graphe de dpendance dun projet B est le graphe dimportation du projet auquel sajoutent les liens SEES. Les liens SEES portent le prfixe de renommage de linstance de machine vue. Ce prfixe peut contenir plusieurs renommages successifs (cf. 7.8 clause SEES et renommage). lien INCLUDES Le lien INCLUDES entre un composant MN (une machine ou un raffinement) et une instance de machine Minc permet dinclure dans MN les constituants de Minc afin de construire un composant plus volumineux. Linclusion cre linstance de machine Minc un niveau abstrait. lien EXTENDS Le lien EXTENDS se comporte comme le lien INCLUDES dans une machine ou un raffinement et comme le lien IMPORTS dans une implantation (cf. 7.11 La clause EXTENDS). lien USES Lorsquun composant inclut plusieurs instances de machines , les machines incluses peuvent partager les donnes de lune dentre elle, Mused, par un lien USES sur Mused. La clause USES permet de rfrencer une instance de machine au sein dun ensemble dinclusion.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

190

Manuel de rfrence du langage B - Version 1.8.6

Rgles concernant les liens Les rgles concernant les liens entre composants au sein dun projet sont rassembles ci-dessous. Rgles sur les liens IMPORTS 1. Une instance de machine ne doit pas tre importe plus dune fois dans un projet. Donc pour importer plusieurs fois une machine dans un projet, il faut crer plusieurs instances en leur donnant des prfixes de renommage diffrents. 2. Tout projet complet doit contenir un et un seul module dvelopp qui nest jamais instanci par importation dans le projet. Cest lunique source du graphe dimportation du projet. Ce module sappelle le module principale du projet. Rgles sur le graphe de dpendance 3. Toute instance de machine vue dans un projet doit tre importe dans le projet. 4. Si une instance de machine est vue par un composant dun module dvelopp, alors les raffinements de ce composant doivent galement voir cette instance. 5. Un composant dun module MA ne peut pas voir une instance de module MB importe par une instance de module dpendant de MA. Le schma ci-dessous illustre les architectures interdites.
MA
de 0 N liens SEES IMPORTS

Dpendance IMPORTS ou SEES

MB

Figure 4 : architecture interdite du lien SEES

6. Un composant ne peut pas possder plusieurs liens sur une mme instance de machine. Par exemple, une implantation ne peut pas voir et importer une mme instance de machine. 7. Il ne doit pas exister de cycle dans le graphe de dpendance dun projet. Rgles sur les liens USES 8. Si une machine MA utilise une instance de machine, Mused, alors il doit exister dans le projet une machine qui inclut une instance de MA et de Mused. 8.4 Librairies Une librairie B est une collection de modules qui peuvent tre utiliss dans un projet. La notion de librairie permet de constituer des bibliothques de modules rutilisables entre plusieurs projets. Elle permet galement de dcomposer un projet en plusieurs sous-

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Architecture

191

parties, chaque sous-partie tant une librairie. Les modules dune librairie peuvent euxmmes utiliser dautres librairies. Un projet B complet peut devenir une librairie. Cependant une librairie ne correspond pas forcment un projet. En effet, elle peut contenir plusieurs modules principaux. Le schma ci-dessous donne un exemple de projet utilisant une librairie.

MA MA_i MB MB_r MB_i MC MC_r1 MC_r2 MC_i

IMPORTS

MD MD_i

ME ME_i

MF MF_i h1 h2

MG MG_i Librairie Lib1 MH MH_i

BasicX

MJ MJ_i

BasicY

BasicZ

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

193

ANNEXES

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Mots rservs et oprateurs

195

ANNEXE A

MOTS RESERVES ET OPERATEURS

Cette annexe contient la description de lensemble des mots rservs et des oprateurs du langage B, tris par ordre ASCII ascendant. L'ordre ASCII est rappel ci-dessous : !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Pour chaque mot rserv ou oprateur, sont indiqus : sa notation ASCII, ventuellement complte par son utilisation lorsqu'il existe une correspondance non triviale entre les notations ASCII et mathmatique (par exemple, dans le cas de l'oprateur puissance, l'criture ASCII x ** y correspond la notation mathmatique x y), sa notation mathmatique, si elle diffre de sa notation ASCII, son niveau de priorit. Le niveau de priorit correspond l'ordre de priorit lors de l'analyse syntaxique. Il suffit de se rappeler que plus un oprateur possde un niveau de priorit lev, plus il attire ses oprandes. Par exemple, si les oprateurs op40 et op250 sont respectivement de priorit 40 et 250, alors l'expression x op40 y op250 z est analyse comme x op40 (y op250 z), ses proprits dassociativit (G pour associatif gauche ou D pour associatif droite). Si des oprateurs binaires nots op ont la mme priorit, alors : x op y op z sera analys comme (x op y) op z si op est associatif gauche et comme x op (y op z) si op est associatif droite. sa description, une rfrence au(x) paragraphe(s) o il est trait.
Math. Pri. 250 As. Description quantificateur universel (quelque soit) dlimiteur de chane de caractres ou de fichier de dfinition 250 250 40 250 G G quantificateur existentiel (il existe) valeur prcdente dune donne lambda expression conjonction (ET logique) accs un champ de record parenthse ouvrante parenthse fermante x
y


ASCII ! " # $0 % & ' ( ) * x ** y + +-> +->> ,

Rfrence 4.2 5.1, 2.3 4.2 5.1 5.16 4.1 5.9 4.1, 5.1 4.1, 5.1 3.2, 5.3, 5.7 5.3 5.3 5.15 5.15

190 200 180 125 125 115

G D G G G G

multiplication ou produit cartsien puissance addition fonction partielle surjection partielle virgule

2 6

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

196
ASCII --> -->> -> .

Manuel de rfrence du langage B - Version 1.8.6


Math. Pri. 180 210 3 7 k 125 125 160 220 G G G D As. G Description soustraction moins unaire fonction totale surjection totale insertion en tte dune suite renommage ou sparateur de donnes utilis dans les oprateurs , , U, I, , , intervalle division entire non-appartenance non-inclusion non-inclusion stricte ingalit intersection restriction dune suite la tte appartenance champ de record devient lment de devient gal squencement de substitution ou composition de relations strictement infrieur ou dlimiteur de fichier de dfinitions surcharge dune relation ensemble des relations insertion en fin de suite paramtres de sortie dopration inclusion inclusion stricte soustraction sur le domaine infrieur ou gal quivalence restriction sur le domaine galit dfinition 30 160 4 5 9 125 125 125 160 G G G G G G implique strictement suprieur ou dlimiteur de fichier de dfinitions injection partielle injection totale bijection totale produit direct de relations 5.7 5.3 4.4 4.5 4.5 4.3 5.8 5.19 4.4 5.9 6.12 6.3 6.15, 5.11 4.6, 2.3 5.14 5.10 5.19 6.16, 7.23 4.5 4.5 5.14 4.6 4.1 5.14 4.3 2.3 4.1 4.6, 2.3 5.15 5.15 5.15 5.11 Rfrence 5.3, 5.8 5.3 5.15 5.15 5.15

.. / /: /<: /<<: /= /\ /|\ : : :: := ; < <+ <-> <<-<: <<: <<| <= <=> <| = == => > >+> >-> >->> >< + 1 j c a r : q

170 190 160 110 110 160 160 160 120 60

G G G G G G G G G G G G

20 160 160 125 160 110 110 160 160 60 160 60

G G G G G G G G G G G G G

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Mots rservs et oprateurs


ASCII >= ABSTRACT_CONSTANTS ABSTRACT_VARIABLES ANY ASSERT ASSERTIONS BE BEGIN BOOL CASE CHOICE CONCRETE_CONSTANTS CONCRETE_VARIABLES CONSTANTS CONSTRAINTS DEFINITIONS DO EITHER ELSE ELSIF END Math. Pri. 160 As. G Description suprieur ou gal clause ABSTRACT_CONSTANTS clause ABSTRACT_VARIABLES substitution ANY substitution ASSERT clause ASSERTIONS substitution LET substitution BEGIN ensemble des boolens substitution CASE substitution CHOICE clause CONCRETE_CONSTANTS clause CONCRETE_VARIABLES clause CONSTANTS clause CONSTRAINTS clause DEFINITIONS substitution WHILE substitution CASE substitution IF ou CASE substitution IF terminateur des clauses ou des substitutions BEGIN, PRE, ASSERT, CHOICE, IF, SELECT, ANY, LET, VAR, CASE et WHILE clause EXTENDS constante boolenne littrale faux F F1 ensemble des sous-ensembles finis ensemble des sous-ensembles finis nonvides substitution IF clause IMPLEMENTATION clause IMPORTS substitution LET ou VAR clause INCLUDES clause INITIALISATION ensemble des entiers relatifs concrets Z I ensemble des entiers relatifs intersection quantifie clause INVARIANT ou substitution WHILE substitution LET clause LOCAL_OPERATIONS clause MACHINE plus grand entier implmentable 7.11 5.2 5.7 5.7 6.7 7.4 7.7

197
Rfrence 4.6 7.15 7.19 6.10 6.5 7.21 6.11 6.1 5.6 6.9 6.6 7.14 7.18 7.14 7.5 2.3 6.17 6.9 6.7, 6.9 6.7

EXTENDS FALSE FIN FIN1 IF IMPLEMENTATION IMPORTS IN INCLUDES INITIALISATION INT INTEGER INTER INVARIANT LET LOCAL_OPERATIONS MACHINE MAXINT

6.11, 6.17 7.9 7.22 5.6 5.6 5.8 7.20, 6.17 6.11, 6.14 7.24 7.1 5.3

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

198
ASCII MININT NAT NAT1 NATURAL NATURAL1 OF OPERATIONS OR PI POW POW1 PRE PROMOTES PROPERTIES REFINES REFINEMENT SEES SELECT SETS SIGMA STRING THEN TRUE UNION USES VALUES VAR VARIANT VARIABLES WHEN WHERE WHILE [ [] \/ \|/ ] ^ arity bin

Manuel de rfrence du langage B - Version 1.8.6


Math. Pri. As. Description plus petit entier implmentable ensemble des entiers naturels concrets
NAT1

Rfrence 5.3 5.6 5.6 5.6 5.6 6.9 7.23 6.6, 6.9 5.4 5.7 6.4 7.10 7.16 7.6 7.3 7.8 6.8 7.13 5.4 5.6 7.10, 6.5, 6.7, 6.9 5.2 5.8 7.12 7.17 6.14 6.17 7.19 6.8 6.10 6.17 5.13, 5.17 5.17 5.8 5.19 5.13, 5.17 5.19 5.22 5.23

ensemble des entiers naturels non nuls concrets ensemble des entiers naturels ensemble des entiers naturels non nuls substitution CASE clause OPERATIONS substitution CHOICE ou CASE

N N1

P P1

produit quantifi dentiers ensemble des sous-ensembles substitution prcondition clause PROMOTES clause PROPERTIES clause REFINES clause REFINEMENT clause SEES substitution SELECT clause SETS

ensemble des sous-ensembles non vides 5.7

somme quantifi ensemble des chanes de caractres substitution prcondition, ASSERT, IF, CASE ou SELECT constante boolenne littrale vrai

union quantifie clause USES clause VALUES substitution VAR substitution WHILE clause VARIABLES substitution SELECT substitution ANY substitution WHILE image, dbut de suite suite vide

u w )

160 160 160

G G G

union restriction dune suite la queue image, fin de suite concatnation de suites arit du nud dun arbre arbre binaire en extension

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Mots rservs et oprateurs


ASCII bool btree card closure(R) closure1(R) conc const dom father first fnc front id infix inter iseq iseq1 iterate(R, n) last left max min mirror mod not or perm postfix pred prefix prj1 prj2 ran rank rec rel rev right seq seq1 size prj1 prj2 190 G G iseq1 R
n

199
Rfrence 5.2 5.20 5.4 5.12 5.12 5.19 5.21 5.13 5.22 5.18 5.16 5.18 5.11 5.23 5.8 5.17 5.17 5.12 5.18 5.23 5.4 5.4 5.21 5.3 4.1 4.1 5.17 5.21 5.3 5.21 5.11 5.11 5.13 5.22 5.9 5.16 5.18 5.23 5.17 5.17 5.18

Math. Pri.

As.

Description conversion dun prdicat en boolen arbres binaires cardinal

R R

* +

fermeture rflexive dune relation fermeture dune relation concatnation de suites construction dun arbre domaine dune fonction pre du nud dun arbre premier lment dune suite transforme en fonction tte dune suite fonction identit aplatissement infix dun arbre intersection gnralise ensemble des suites injectives ensemble des suites injectives non-vides itration dune relation dernier lment dune suite sous arbre gauche maximum dun ensemble dentiers minimum dun ensemble dentiers symtrie dun arbre modulo ngation (NON logique) 40 disjonction (OU logique) ensemble des permutations (suites bijectives) aplatissement postfix dun arbre prdcesseur dun entier aplatissement prfix dun arbre premire projection dune relation seconde projection dune relation codomaine dune relation rang du nud dun arbre record en extension transforme en relation inverse dune suite sous arbre droit ensemble des suites ensemble des suites non-vides taille dune suite

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

200
ASCII sizet skip son sons struct subtree succ tail top tree union { {} | |-> |> |>> || } r~

Manuel de rfrence du langage B - Version 1.8.6


Math. Pri. As. Description taille dun arbre substitution identit i
me

Rfrence 5.21 6.2 5.22 5.21 5.9 5.22 5.3 5.18 5.21 5.20 5.8 5.7 5.6

fils du nud dun arbre

fils du nud dun arbre ensemble de records sous arbre dun arbre successeur queue dune suite racine dun arbre arbres union gnralise dbut densemble 10 m R A 160 160 160 20 G G G G G ensemble vide barre verticale utilise dans , , , , , , , { | } maplet restriction sur le codomaine soustraction sur le codomaine substitutions simultanes ou produit parallle de relations fin densemble r
-1

5.5 5.14 5.14 5.11, 5.11 5.7 5.11

230

relation inverse

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires

201

ANNEXE B GRAMMAIRES
Nous regroupons dans cette annexe, la grammaire du langage B, la grammaire des prdicats de typage et la grammaire des types. Les conventions lexicales et syntaxiques utilises pour dcrire ces grammaires sont dfinies au chapitre 2. A.1B.1 B.1.1 Grammaire du langage B Axiome

Composant ::= Machine_abstraite | Raffinement | Implantation

A.1.2B.1.2

Clauses

Machine_abstraite ::= "MACHINE" En-tte * Clause_machine_abstraite "END" Clause_machine_abstraite ::= Clause_constraints | Clause_sees | Clause_includes | Clause_promotes | Clause_extends | Clause_uses | Clause_sets | Clause_concrete_constants | Clause_abstract_constants | Clause_properties | Clause_concrete_variables | Clause_abstract_variables | Clause_invariant | Clause_assertions | Clause_initialisation | Clause_operations En-tte ::= +"," ")" ] Ident [ "(" Ident Raffinement ::= "REFINEMENT" En-tte Clause_refines * Clause_raffinement "END"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

202

Manuel de rfrence du langage B - Version 1.8.6


Clause_raffinement ::= Clause_sees | Clause_includes | Clause_promotes | Clause_extends | Clause_sets | Clause_concrete_constants | Clause_abstract_constants | Clause_properties | Clause_concrete_variables | Clause_abstract_variables | Clause_invariant | Clause_assertions | Clause_initialisation | Clause_operations Implantation ::= "IMPLEMENTATION" En-tte Clause_refines * Clause_implantation "END" Clause_implantation ::= Clause_sees | Clause_imports | Clause_promotes | Clause_extends_B0 | Clause_sets | Clause_concrete_constants | Clause_properties | Clause_values | Clause_concrete_variables | Clause_invariant | Clause_assertions | Clause_initialisation_B0 | Clause_operations_B0 | Clause_operations_locales Clause_constraints ::= "CONSTRAINTS" Prdicat Clause_refines ::= "REFINES" Ident Clause_IMPORTS ::= +"," +"," "IMPORTS" ( Ident_ren [ "(" Instanciation_B0 ")" ] ) Instanciation_B0 := Terme | Ensemble_entier_B0 | "BOOL" | Intervalle_B0 Clause_sees ::= +"," "SEES" Ident_ren Clause_includes ::= +"," +"," "INCLUDES" ( Ident_ren [ "(" Instanciation ")" ] ) Instanciation := Terme | Ensemble_entier | "BOOL" | Intervalle

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires
Clause_promotes ::= +"," "PROMOTES" Ident_ren Clause_EXTENDS ::= +"," +"," "EXTENDS" ( Ident_ren [ "(" Instanciation ")" ] ) Clause_EXTENDS_B0 ::= +"," +"," "EXTENDS" ( Ident_ren [ "(" Instanciation_B0 ")" ] ) Clause_uses ::= +"," "USES" Ident_ren Clause_sets ::= +";" "SETS" Ensemble Ensemble ::= Ident +"," "}" | Ident "=" "{" Ident Clause_concrete_constants ::= +"," "CONCRETE_CONSTANTS" Ident +"," | "CONSTANTS" Ident Clause_abstract_constants ::= +"," "ABSTRACT_CONSTANTS" Ident Clause_properties ::= "PROPERTIES" Prdicat Clause_values ::= +";" "VALUES" Valuation Valuation ::= Ident "=" Terme | Ident "=" Expr_tableau | Ident "=" Intervalle_B0 Clause_concrete_variables ::= +"," "CONCRETE_VARIABLES" Ident_ren Clause_abstract_variables ::= +"," "ABSTRACT_VARIABLES" Ident_ren +"," | "VARIABLES" Ident_ren Clause_invariant ::= "INVARIANT" Prdicat Clause_assertions ::= +";" "ASSERTIONS" Prdicat Clause_initialisation ::= "INITIALISATION" Substitution Clause_initialisation_B0 ::= "INITIALISATION" Instruction Clause_operations ::= +";" "OPERATIONS" Opration Opration ::= Entte_opration "=" Substitution_corps_opration Entte_opration ::= +"," +"," [ Ident "c"] Ident_ren [ "(" Ident ")" ] Clause_operations_B0 ::= +";" "OPERATIONS" Opration_B0

203

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

204

Manuel de rfrence du langage B - Version 1.8.6


Opration_B0 ::= Entte_opration "=" Instruction_corps_opration Clause_operations_locales ::= +";" "LOCAL_OPERATIONS" Opration

A.1.3B.1.3
Terme

Termes et regroupement dexpressions


::= | | | Terme_simple Expression_arithmtique Terme_record + Terme_record ( "" Ident ) Ident_ren Entier_lit Boolen_lit bool ( Condition ) + Ident_ren ( "" Ident ) Entier_littral "MAXINT" "MININT" "FALSE" "TRUE"

Terme_simple ::= | | | | Entier_lit ::= | | Boolen_lit ::= |

Expression_arithmtique ::= Entier_lit | Ident_ren +"," | Ident_ren "(" Terme ")" + | Ident_ren ( "" Ident ) | Expression_arithmtique "+" Expression_arithmtique | Expression_arithmtique "-" Expression_arithmtique | "-" Expression_arithmtique | Expression_arithmtique "" Expression_arithmtique | Expression_arithmtique "/" Expression_arithmtique | Expression_arithmtique "mod" Expression_arithmtique Expression_arithmtique | Expression_arithmtique | "succ" "(" Expression_arithmtique ")" | "pred" "(" Expression_arithmtique ")" | "(" Expression_arithmtique ")" Terme_record ::= "rec" "(" ( [ Ident ":" ] ( Terme | Expr_tableau ) ) Expr_tableau ::= Ident +"m" +"," | "{" ( Terme_simple "m" Terme ) "}" +"" | Ensemble_simple "" "{" Terme "}" Intervalle_B0 ::= Expression_arithmtique ".." Expression_arithmtique | Ensemble_entier_B0 Ensemble_entier_B0 ::= "NAT" | "NAT1" | "INT"
+","

")"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires B.1.4 Conditions

205

Condition ::= Terme_simple "=" Terme_simple | Terme_simple "" Terme_simple | Terme_simple "<" Terme_simple | Terme_simple ">" Terme_simple | Terme_simple "" Terme_simple | Terme_simple "" Terme_simple | Condition "" Condition | Condition "" Condition | "" "(" Condition ")" | "(" Condition ")"

B.1.5

Instructions

Instruction ::= Instruction_bloc | Instruction_variable_locale | Substitution_identit | Instruction_devient_gal | Instruction_appel_opration | Instruction_conditionnelle | Instruction_cas | Instruction_assertion | Instruction_squence | Substitution_tant_que Instruction_corps_opration ::= Instruction_bloc | Instruction_variable_locale | Substitution_identit | Instruction_devient_gal | Instruction_appel_opration | Instruction_conditionnelle | Instruction_cas | Instruction_assertion | Substitution_tant_que Instruction_bloc ::= "BEGIN" Instruction "END" Instruction_variable_locale ::= +"," "VAR" Ident "IN" Instruction "END" Instruction_devient_gal ::= +"," Ident_ren [ "(" Terme ")" ] ":=" Terme | Ident_ren ":=" Expr_tableau + | Ident_ren ("" Ident ) ":=" Terme Instruction_appel_opration ::= +"," +"," [ Ident_ren "c" ] Ident_ren [ "(" (Terme | Chane_lit) ")" ] Instruction_squence ::= Instruction ";" Instruction Instruction_conditionnelle ::= "IF" Condition "THEN" Instruction * ( "ELSIF" Condition "THEN" Instruction ) [ "ELSE" Instruction ] "END"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

206

Manuel de rfrence du langage B - Version 1.8.6


Instruction_cas ::= "CASE" Terme_simple "OF" +"," "EITHER" Terme_simple "THEN" Instruction +"," * "THEN" Instruction ) ( "OR" Terme_simple [ "ELSE" Instruction ] "END" "END" Substitution_tant_que ::= "WHILE" Condition "DO" Instruction "INVARIANT" Prdicat "VARIANT" Expression "END" Instruction_assertion ::= "ASSERT" Condition "THEN" Instruction "END"

B.1.6

Prdicats

Prdicat ::= Prdicat_parenths | Prdicat_conjonction | Prdicat_ngation | Prdicat_disjonction | Prdicat_implication | Prdicat_quivalence | Prdicat_universel | Prdicat_existentiel | Prdicat_galit | Prdicat_ingalit | Prdicat_appartenance | Prdicat_non_appartenance | Prdicat_inclusion | Prdicat_inclusion_stricte | Prdicat_non_inclusion | Prdicat_non_inclusion_stricte | Prdicat_infrieur_ou_gal | Prdicat_strictement_infrieur | Prdicat_suprieur_ou_gal | Prdicat_strictement_suprieur Prdicat_parenths Prdicat_conjonction Prdicat_ngation Prdicat_disjonction Prdicat_implication Prdicat_quivalence Prdicat_universel Prdicat_existentiel Prdicat_galit Prdicat_ingalit Prdicat_appartenance Prdicat_non_appartenance ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= "(" Prdicat ")" Prdicat "" Prdicat "" "(" Prdicat ")" Prdicat "" Prdicat Prdicat "" Prdicat Prdicat "" Prdicat "" Liste_ident "." "(" Prdicat "" Prdicat ")" "" Liste_ident "." "(" Prdicat ")" Expression "=" Expression Expression "" Expression Expression "" Expression Expression "" Expression

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires
Prdicat_inclusion Prdicat_inclusion_stricte Prdicat_non_inclusion Prdicat_non_inclusion_stricte Prdicat_infrieur_ou_gal Prdicat_strictement_infrieur Prdicat_suprieur_ou_gal Prdicat_strictement_suprieur ::= ::= ::= ::= ::= ::= ::= ::= Expression "" Expression Expression "" Expression Expression "" Expression Expression "" Expression Expression "" Expression Expression "<" Expression Expression "" Expression Expression ">" Expression

207

B.1.7

Expressions

Expression ::= Expression_primaire | Expression_boolenne | Expression_arithmtique | Expression_de_couples | Expression_d_ensembles | Construction_d_ensembles | Expression_de_records | Expression_de_relations | Expression_de_fonctions | Construction_de_fonctions | Expression_de_suites | Construction_de_suites | Expression_d_arbres Expression_primaire ::= Donne | Expr_parenthse | Chane_lit Expression_boolenne ::= Boolen_lit | Conversion_bool Expression_arithmtique ::= Entier_lit | Addition | Diffrence | Moins_unaire | Produit | Division | Modulo | Puissance | Successeur | Prdcesseur | Maximum | Minimum | Cardinal | Somme_gnralise | Produit_gnralis Expression_de_couples ::= Couple

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

208

Manuel de rfrence du langage B - Version 1.8.6


Expression_d_ensembles ::= Ensemble_vide | Ensemble_entier | Ensemble_boolen | Ensemble_chanes Construction_d_ensembles ::= | Produit | Ens_comprhension | Sous_ensembles | Sous_ensembles_finis | Ens_extension | Intervalle | Diffrence | Union | Intersection | Union_gnralise | Intersection_gnralise | Union_quantifie | Intersection_quantife Expression_de_records ::= Ensemble_records | Record_en_extension | Champ_de_record Expression_de_relations ::= Ensemble_relations | Identit | Inverse | Premire_projection | Deuxime_projection | Composition | Produit_directe | Produit_parallle | Itration | Fermeture_rflexive | Fermeture | Domaine | Codomaine | Image | Restriction_domaine | Soustraction_domaine | Restriction_codomaine | Soustraction_codomaine | Surcharge Expression_de_fonctions ::= Fonction_partielle | Fonction_totale | Injection_partielle | Injection_totale | Surjection_partielle | Surjection_totale | Bijection_totale

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires
Construction_de_fonctions ::= Lambda_expression | valuation_fonction | Transforme_fonction | Transforme_relation Expression_de_suites ::= Suites | Suites_non_vide | Suites_injectives | Suites_inj_non_vide | Permutations | Suite_vide | Suite_extension Construction_de_suites ::= | Taille_suite | Premier_lment_suite | Dernier_lment_suite | Tte_suite | Queue_suite | Inverse_suite | Concatnation | Insertion_tte | Insertion_queue | Restriction_tte | Restriction_queue | Concat_gnralise Expression_d_arbres ::= Arbres | Arbres_binaires | Construction_arbre | Racine_arbre | Fils_arbre | Aplatissement_prfix | Aplatissement_postfix | Taille_arbre | Symtrie_arbre | Rang_noeud | Pre_noeud | Fils_noeud | Sous_arbre_noeud | Arit_noeud Donne ::= | ::= ::= | ::= ::= | | Ident_ren Ident_ren"$0" "(" Expression ")" Chane_de_caractres "FALSE" "TRUE" "bool" "(" Prdicat ")" Entier_littral "MAXINT" "MININT" ::= ::= ::= Expression "+" Expression Expression "-" Expression "-" Expression

209

Expr_parenthse ::= Chane_lit Boolen_lit Conversion_bool Entier_lit

Addition Diffrence Moins_unaire

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

210
Produit Division Modulo

Manuel de rfrence du langage B - Version 1.8.6


::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= | ::= ::= | | | | | ::= ::= ::= | ::= | ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= Expression "*" Expression Expression "/" Expression Expression "mod" Expression Expression
Expression

Puissance Successeur Prdcesseur Maximum Minimum Cardinal Somme_gnralise Produit_gnralis Couple Ensemble_vide Ensemble_entier

"succ" ["(" Expression ")"] pred ["(" Expression ")"] "max" "(" Expression ")" "min" "(" Expression ")" "card" "(" Expression ")" "" Liste_ident "." "(" Prdicat "|" Expression ")" "" Liste_ident "." "(" Prdicat "|" Expression ")" Expression "m" Expression Expression "," Expression "" "Z" "N" "N1" "NAT" "NAT1" "INT" "BOOL" ::= "STRING"
+","

Ensemble_boolen Ensemble_chanes Ens_comprhension Sous_ensembles Sous_ensembles_finis Ens_extension Intervalle Union Intersection Union_gnralise Union_quantifie Intersection_quantife Ensemble_records Record_en_extension Champ_de_record Ensemble_relations Identit Inverse Premire_projection Deuxime_projection

"{" Ident

"|" Prdicat "}"

"P" "(" Expression ")" "P1" "(" Expression ")" "F" "(" Expression ")" "F1" "(" Expression ")" "{" Expression
+","

"}"

Expression ".." Expression Expression "" Expression Expression "" Expression "union" "(" Expression ")" "inter" "(" Expression ")" "U" Liste_ident "." "(" Prdicat "|" Expression ")" "I" Liste_ident "." "(" Prdicat "|" Expression ")" "struct" "(" ( Ident ":" Expression )
+"," +","

Intersection_gnralise ::=

")" ")"

"rec" "(" ( [ Ident ":" ] Expression ) Expression "" Ident Expression "" Expression "id" "(" Expression ")" Expression " "
-1

"prj1" "("Expression "," Expression ")" "prj2" "("Expression "," Expression ")"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires
Composition Produit_direct Produit_parallle Itration Fermeture_rflexive Fermeture Domaine Codomaine Image Restriction_domaine Restriction_codomaine Surcharge Fonction_partielle Fonction_totale Injection_partielle Injection_totale Surjection_partielle Surjection_totale Bijection_totale Lambda_expression valuation_fonction Transforme_fonction Transforme_relation Suites Suites_non_vide Suites_injectives Suites_inj_non_vide Permutations Suite_vide Suite_extension Taille_suite Premier_lment_suite Dernier_lment_suite Tte_suite Queue_suite Inverse_suite Concatnation Insertion_tte Insertion_queue ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= Expression ";" Expression Expression "" Expression Expression "||" Expression Expression
Expression

211

Expression Expression

"*" "+"

"dom" "(" Expression ")" "ran" "(" Expression ")" Expression "[" Expression "]" Expression "r" Expression Expression "a" Expression Expression "R" Expression Expression "A" Expression Expression "+" Expression Expression "2" Expression Expression "3" Expression Expression "4" Expression Expression "5" Expression Expression "6" Expression Expression "7" Expression Expression "9" Expression "" Liste_ident "." "(" Prdicat "|" Expression ")" Expression "(" Expression ")" "fnc" "(" Expression ")" "rel" "(" Expression ")" "seq" "(" Expression ")" "seq1" "(" Expression ")" "iseq" "(" Expression ")" "iseq1" "(" Expression ")" "perm" "(" Expression ")" "[]" "[" Expression
+","

Soustractions_domaine ::= Soustraction_codomaine ::=

"]"

"size" "(" Expression ")" "first" "(" Expression ")" "last" "(" Expression ")" "front" "(" Expression ")" ::= "tail" "(" Expression ")" "rev" "(" Expression ")" Expression ")" Expression Expression "k" Expression Expression "j" Expression

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

212

Manuel de rfrence du langage B - Version 1.8.6


Restriction_tte Restriction_queue Concat_gnralise Arbres Arbres_binaires Construction_arbre Racine_arbre Fils_arbre Aplatissement_prfix Aplatissement_postfix Taille_arbre Symtrie_arbre Rang_noeud Pre_noeud Fils_noeud Sous_arbre_noeud Arit_noeud ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= Expression "q" Expression Expression "w" Expression "conc" "(" Expression ")" "tree" "(" Expression ")" "btree" "(" Expression ")" "const" "(" Expression "," Expression ")" "top" "(" Expression ")" "sons" "(" Expression ")" "prefix" "(" Expression ")" "postfix" "(" Expression ")" "sizet" "(" Expression ")" "mirror" "(" Expression ")" "rank" "(" Expression "," Expression ")" "father" "(" Expression "," Expression ")" "son" "(" Expression "," Expression "," Expression ")" "subtree" (" Expression "," Expression ")" "arity" "(" Expression "," Expression ")"

Arbre_binaire_en_extension ::= "bin" "(" Expression [ , Expression , Expression ] ")" Sous_arbre_gauche Sous_arbre_droit Aplatissement_infix ::= ::= ::= "left" "(" Expression ")" "right" "(" Expression ")" "infix" "(" Expression ")"

B.1.8

Substitutions

Substitution ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_choix_non_born | Substitution_dfinition_locale | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_squence | Substitution_appel_opration | Substitution_simultane | Substitution_tant_que

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires
Substitution_corps_opration ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_any | Substitution_let | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_appel_opration Substitution_bloc ::= "BEGIN" Substitution "END" Substitution_identit ::= "skip" Substitution_devient_gal ::= +"," +"," Ident_ren ":=" Expression +"," | Ident_ren "(" Expression ")" ":=" Expression + | Ident_ren ("" Ident ) ":=" Expression Substitution_prcondition ::= "PRE" Prdicat "THEN" Substitution "END" Substitution_assertion ::= "ASSERT" Prdicat "THEN" Substitution "END" Substitution_choix_born ::= "CHOICE" Substitution ( "OR" Substitution ) "END" Substitution_conditionnelle ::= "IF" Prdicat "THEN" Substitution * ( "ELSIF" Prdicat "THEN" Substitution ) [ "ELSE" Substitution ] "END" Substitution_slection ::= "SELECT" Prdicat "THEN" Substitution * ( "WHEN" Prdicat "THEN" Substitution ) [ "ELSE" Substitution ] "END" Substitution_cas ::= "CASE" Expression "OF" +"," "EITHER" Terme_simple "THEN" Substitution +"," * ( "OR" Terme_simple "THEN" Substitution ) [ "ELSE" Substitution ] "END" "END" Substitution_choix_non_born ::= "ANY" Ident
+"," *

213

"WHERE" Prdicat "THEN" Substitution "END"

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

214

Manuel de rfrence du langage B - Version 1.8.6


Substitution_dfinition_locale ::= +"," "LET" Ident "BE" +"" ( Ident "=" Expression ) "IN" Substitution "END" Substitution_devient_elt_de ::= Ident_ren
+","

":" Expression

Substitution_devient_tel_que ::= Ident_ren


+","

":" "(" Prdicat ")"

Substitution_variable_locale ::= "VAR" Ident


+","

"IN" Substitution "END"

Substitution_squence ::= Substitution ";" Substitution Substitution_appel_opration ::= +"," +"," [ Ident_ren "c" ] Ident_ren [ "(" Expression ")" ] Substitution_simultane ::= Substitution "||" Substitution Substitution_corps_opration ::= Substitution_bloc | Substitution_identit | Substitution_devient_gal | Substitution_prcondition | Substitution_assertion | Substitution_choix_born | Substitution_conditionnelle | Substitution_slection | Substitution_cas | Substitution_any | Substitution_let | Substitution_devient_elt_de | Substitution_devient_tel_que | Substitution_variable_locale | Substitution_appel_opration Instruction_corps_opration ::= Instruction_bloc | Instruction_variable_locale | Substitution_identit | Instruction_devient_gal | Instruction_appel_opration | Instruction_conditionnelle | Instruction_cas | Instruction_assertion | Substitution_tant_que

B.1.9

Rgles de syntaxe utiles


Ident +"," "(" Ident ")" Ident
+.

Liste_ident ::= | Ident_ren ::=

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Grammaires B.2 Grammaire des prdicats de typage


Typage_donne_abstraite ::= +"," +"" Ident "" Expression | Ident "" Expression | Ident "" Expression +"," +"," | Ident "=" Expression Typage_cte_concrte ::= +"," +"" Ident "" Typage_appartenance_donne_concrte | Ident "=" Typage_galit_cte_concrte | Ident "" Ensemble_simple | Ident "" Ensemble_simple Typage_appartenance_donne_concrte ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple 3 +"" | Ensemble_simple "5" Ensemble_simple +"" | Ensemble_simple "7" Ensemble_simple +"" | Ensemble_simple "9" Ensemble_simple +"," | "{" Terme_simple "}" +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")" Typage_galit_cte_concrte ::= | Terme | Expr_tableau | Intervalle | Ensemble_entier_B0 +"," | "rec" "(" ( [ Ident ":" ] Terme ) ")" Ensemble_simple ::= Ensemble_entier_B0 | "BOOL" | Intervalle_B0 | Ident Ensemble_entier_B0 ::= "NAT" | "NAT1" | "INT" Expr_tableau ::= Ident +"m" +"," | "{" ( Terme_simple "m" Terme ) "}" +"" | Ensemble_simple "" "{" Terme "}" Intervalle_B0 ::= Expression_arithmtique ".." Expression_arithmtique | Ensemble_entier_B0 Typage_var_concrte ::= +"," +"" Ident "" Typage_appartenance_donne_concrte | Ident "=" Terme

215

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

216

Manuel de rfrence du langage B - Version 1.8.6


Typage_appartenance_donne_concrte ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple 3 | Ensemble_simple+"" "5" Ensemble_simple +"" | Ensemble_simple "7" Ensemble_simple +"" | Ensemble_simple "9" Ensemble_simple +"," "}" | "{" Terme_simple +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")" Typage_param_entre ::= +"," +"" Ident "" Typage_appartenance_param_entre | Ident "=" Terme Typage_appartenance_param_entre ::= Ensemble_simple +"" | Ensemble_simple "3" Ensemble_simple 3 +"" | Ensemble_simple "5" Ensemble_simple +"" "7" Ensemble_simple | Ensemble_simple +"" | Ensemble_simple "9" Ensemble_simple +"," | "{" Terme_simple "}" +"," | "struct" "(" (Ident ":" Typage_appartenance_donne_concrte) ")" | "STRING" Typage_param_mch ::= +"," +"" | Ident "" Typage_appartient_param_mch +"," +"," | Ident "=" Terme Typage_appartient_param_mch ::= Ensemble_entier | "BOOL" | Intervalle_B0 | Ident Ensemble_entier ::= "Z" | "N" | "N1" | "NAT" | "NAT1" | "INT"

B.3

Grammaire des types B


Type ::= | | | | Type_de_base "P" "(" Type ")" Type "" Type +"," "struct" "(" (Ident ":" Type) ")" "(" Type ")"

Type_de_base ::= "Z" | "BOOL" | "STRING" | Ident

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Tables de visibilit

217

ANNEXE C TABLES DE VISIBILITE


Les rgles de visibilit entre un composant C1 et un composant C2 dfinissent pour chaque constituant de C2, les modes daccs applicables dans les clauses de C1. Pour des donnes, on distingue laccs en lecture seule, en lecture et criture ou en criture seule. Pour des oprations, on distingue laccs aux oprations de consultation (les oprations dont la spcification, ne modifie pas les variables de la machine) et aux oprations de modification. Dans les tables de visibilit ci-dessous MA dsigne une machine abstraite, MN-1 dsigne un raffinement, MN dsigne un raffinement ou une implantation et MB dsigne une machine abstraite relie un composant par une clause de visibilit IMPORTS, SEES, INCLUDES ou USES. Le tableau ci-dessous indique les diffrents modes de visibilit des constituants dans des clauses :
Mode de visibilit constituant non visible visible visible - modifiable constituant visible constituant visible, si le constituant est une variable utilise dans une substitution, la variable est modifiable, si le constituant est une opration appele dans une substitution, lopration peut modifier les variables de sa machine abstraite constituant visible, si le constituant est une variable utilise dans une substitution, la variable nest pas modifiable, si le constituant est une opration appele dans une substitution, cest une opration qui ne modifie pas les variables de sa machine abstraite Description

visible - non modifiable

A.1C.1

Visibilit dans une machine abstraite MA


Clauses de MA CONSTRAINTS Paramtres dINCLUDES / EXTENDS visible visible visible visible visible PROPERTIES INVARIANT / ASSERTIONS visible visible visible visible visible INITIALISATION / OPERATIONS visible visible visible visible - modifiable visible - modifiable

Constituants de MA Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites, non homonymes Variables concrtes, non homonymes Variables abstraites, non homonymes Oprations propres (non promues) visible

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

218

Manuel de rfrence du langage B - Version 1.8.6

A.2C.2 Visibilit dune machine vue MB par une machine ou un raffinement MA


Clauses de MA CONSTRAINTS Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS

visible visible

visible visible

visible visible

visible visible visible non modifiable visible non modifiable visible non modifiable

A.3C.3 Visibilit dune machine incluse MB par une machine ou un raffinement MA


Clauses de MA Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible visible visible visible visible visible visible visible visible non modifiable visible non modifiable visible modifiable CONSTRAINTS Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS

A.4C.4

Visibilit dune machine utilise (USES) MB par une machine MA


Clauses de MA CONSTRAINTS Paramtres dINCLUDES / EXTENDS PROPERTIES INVARIANT / ASSERTIONS visible visible visible visible visible visible visible INITIALISATION / OPERATIONS visible visible visible visible non modifiable visible non modifiable

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Tables de visibilit A.5C.5 Visibilit dans un raffinement MN


Clauses de MN Constituants de MN Paramtres formels Ensembles, numrs littraux, constantes concrtes, non homonymes Constantes abstraites non homonymes Variables concrtes non homonymes Variables abstraites non homonymes Oprations propres (non promues) Paramtres dINCLUDES / EXTENDS visible visible visible PROPERTIES INVARIANT / ASSERTIONS visible visible

219

INITIALISATION / OPERATIONS visible visible

visible

visible

visible visible visible

visible visible - modifiable visible - modifiable

A.6C.6
1

Visibilit dans un raffinement MN par rapport son abstraction MNClauses de MN Paramtres dINCLUDES / EXTENDS visible PROPERTIES INVARIANT / ASSERTIONS visible visible INITIALISATION / Substitutions OPERATIONS Prdicats dASSERT visible visible

Constituants de MN-1 Constantes abstraites disparaissant dans MN Variables abstraites disparaissant dans MN

A.7C.7

Visibilit dans une implantation


Paramtres dIMPORTS / EXTENDS PROPERTIES VALUES INVARIANT / ASSERTIONS INITIALISATION Instructions / OPERATIONS variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS

Clauses de MN

Constituants de MN Paramtres formels Ensembles numrs, numrs littraux, non homonymes Ensembles abstraits, constantes concrtes, non homonymes Variables concrtes non homonymes Oprations propres (non promues) Oprations locales visible modifiable dans OPERATIONS, pas dans
INITIALISATION

visible visible visible visible

visible visible

visible visible

visible visible

visible visible

visible

visible

visible modifiable

visible

visible

visible

visible

visible

visible modifiable

visible

visible modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

220 A.8C.8 MN-1

Manuel de rfrence du langage B - Version 1.8.6 Visibilit dans une implantation MN par rapport son abstraction
Paramtres dIMPORTS / EXTENDS PROPERTIES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS Instructions Variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS Substitutions Prdicats d'ASSERT

Clauses de MN

Constituants de MN-1 Constantes abstraites Variables abstraites visible visible visible

visible visible

visible visible

A.9C.9

Visibilit dune machine vue MB par une implantation MN


Paramtres dIMPORTS / EXTENDS PROPERTIES VALUES INVARIANT / ASSERTIONS INITIALISATION Instructions / OPERATIONS Variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS

Clauses de MN

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible non modifiable

visible

visible visible

visible

visible visible

visible

visible visible

visible visible visible non modifiable visible non modifiable visible non modifiable

visible non modifiable

visible visible

A.10C.10

Visibilit dune machine importe MB par une implantation MN


Paramtres dIMPORTS / EXTENDS PROPERTIES VALUES INVARIANT / ASSERTIONS INITIALISATION / OPERATIONS Instructions Variants et invariants de boucles, prdicats dASSERT LOCAL_ OPERATIONS

Clauses de MN

Constituants de MB Paramtres formels Ensembles, numrs littraux, constantes concrtes Constantes abstraites Variables concrtes Variables abstraites Oprations visible visible visible visible

visible

visible

visible

visible visible visible visible modifiable visible non modifiable

visible visible visible

visible visible modifiable visible modifiable visible modifiable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Restrictions de lAtelier B

221

ANNEXE D RESTRICTIONS DE LATELIER B VERSION 3.7


Cette annexe prsente les restrictions de lAtelier B version 3.7 par rapport au langage B dcrit dans ce manuel. On donne la fin de chaque restriction sa rfrence dans la base de donnes des anomalies et volutions de lAtelier B gre par ClearSy. 10.1. Le contrle sur les tableaux est parfois trop restrictif : (rf. 878.2 et 878.3) 11.2. Il est possible dcrire et de lire une mme variable dans deux substitutions en parallle : (rf. 936) 14.3. Les identificateurs, hors de la clause DEFINITIONS, doivent comporter plus dune lettre : (rf. 845) 16.4. Obligation dinclure plusieurs fois une mme instance de machine : (rf. 843) si dans un module B, une mme instance de machine est incluse ou importe par deux composants, alors on impose tort que linstance soit incluse nouveau par tous les niveaux de raffinement compris entre les deux raffinements. 29.5. Les paramtres de sortie dopration tableaux sont refuss : (rf. 1249) 31.6. Certains mots rservs (plus, minus, ) dfinis dans le [B-Book], mais non utilis dans le langage B support par lAtelier B sont dun usage rserv : (rf. 1267) 37.7. Le renommage multiple est inutilisable : (rf. 1612) 38.8. Loprateur $0 ne prend pas en compte les variables renommes : (rf. 1613) 9. La bijection partielle nest pas supporte : (rf. 2156) 10. On ne peut pas raffiner par homonymie une constante abstraite dans un premier raffinement, puis la raffiner nouveau avec une constante concrte homonyme dans un deuxime raffinement : (rf. 2104) 11. Une machine ne peut pas faire plusieurs USES sur plusieurs instances dune mme machine : (rf. 1115) 12. Typage avec des paramtres ensembles de machines utilises : (rf. 1091) si une machine utilise un paramtre ensemble dune machine utilise (USES), pour typer des donnes, alors, le type reprsent par ce paramtre nest pas mis jour lorsque la machine et la machine utilises sont incluses par une mme machine. 13. Il y a incompatibilit des types abstraits paramtres de machine entre une machine et une machine utilise : (rf. 1091) 14. Il est interdit dutiliser en paramtre effectif dentre dun appel dune opration locale une variable de limplmentation ou dune machine importe : (rf. 2229) 15. Loutil ne contrle pas les cycles dans les fichiers de dfinitions : (rf. 2901) 16. Loutil ne vrifie pas quun fichier de dfinition ne contient quune clause DEFINITIONS et pas dautres clauses B : (rf. 2904)

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

Glossaire

223

ANNEXE E GLOSSAIRE

Abstraction notion symtrique du raffinement. Si le composant Mn est un raffinement du composant Mn-1, alors Mn-1 est une abstraction de Mn. B0 partie du langage B qui sert directement produire un programme informatique partir dun module B. Le B0 est constitu de certains constituants du module et du corps associ ces constituants. Les constituants B0 d'un module sont dclars dans la machine abstraite du module (la machine abstraite, ses paramtres, ses oprations), dans ses raffinements (les ensembles abstraits et numrs, les lments numrs, les constantes concrtes et les variables concrtes) ou dans son implantation (liens IMPORTS et SEES de l'implantation). Les corps des constituants sont uniquement prsents dans l'implantation. Ils sont situs dans les clauses IMPORTS, VALUES, INITIALISATION, PROMOTES et OPERATIONS. Les prdicats, expressions et substitutions B0, sont appels respectivement des conditions, des termes et des instructions. Clause les composants sont constitus de clauses. Chaque clause permet de dclarer une partie spcifique du composant. Clause de visibilit ensemble des clauses dun composant qui dclarent les liens entre ce composant et des instances de machines. Les clauses de visibilit sont au nombre de cinq : IMPORTS, SEES, INCLUDES, USES et EXTENDS. Composant dsigne indiffremment une machine, un raffinement ou une implantation. Constante dsigne indiffremment une constante concrte ou une constante abstraite. Constante concrte donne de valeur constante appartenant un composant qui reprsente soit un scalaire, soit un tableau, soit un intervalle fini dentiers ou dlments densemble abstrait. Une constante concrte est automatiquement conserve au cours du raffinement. Constante abstraite donne de valeur constante, dont le type est quelconque, appartenant un composant et qui pourra tre raffine au cours du raffinement du composant. Constituant un constituant dsigne tout ce qui peut tre nomm dans un composant. Il peut sagir dun ensemble, dune constante, dune variable, dune variable muette, dune variable

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

224

Manuel de rfrence du langage B - Version 1.8.6 locale, dun paramtre de machine, dun paramtre dopration ou dune opration.

Dmonstration cf. Preuve Donne objet mathmatique possdant un nom et une valeur. Le type dune donne B doit correspondre aux types dfinis dans la bibliothque mathmatique. Implantation dernier raffinement dun module dvelopp. Une implantation est constitue principalement de B0. Initialisation linitialisation dune instance dun composant est dcrite dans la clause INITIALISATION. Elle permet notamment de donner une valeur initiale aux variables de linstance du composant. Instance de machine copie dont le modle est une machine abstraite. Une instance de machine abstraite possde un espace de donnes qui contient les valeurs des donnes modifiables de la machine (les variables et les paramtres de machine). Instance de machine abstraite instance cre en phase de spcifications par inclusion. Elle constitue un espace de donnes abstrait. Instance de machine concrte instance cre en phase dimplantation par importation. Elle constitue un espace de donnes concret du programme informatique associ au projet. Instance de machine importe instance de machine figurant dans la clause IMPORTS ou EXTENDS. Instance de machine incluse instance de machine figurant dans la clause INCLUDES ou EXTENDS. Instance de machine utilise instance de machine figurant dans la clause USES dune machine. Instance de machine vue instance de machine figurant dans la clause SEES. Invariant prdicat exprimant des proprits portant sur les donnes dun composant. On distingue deux sortes dinvariants dans le langage B : linvariant de la clause INVARIANT, qui porte sur les donnes du composant et linvariant de boucle WHILE qui porte sur les donnes

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Glossaire utilises dans une boucle tant que .

225

Invariant de liaison invariant particulier de la clause INVARIANT dun composant, qui exprime une relation de raffinement entre les variables du composant et les variable de son abstraction. Lexme chane de caractre qui appartient une unit lexicale dun langage. Le rsultat de la phase danalyse lexicale dun texte est une suite de lexmes. Machine cf. Machine abstraite Machine abstraite Spcification dun module B. Une machine abstraite est constitue de clauses qui permettent de dclarer les liens de la machine abstraite, sa partie statique (ensembles, paramtres, constantes, variables et leurs proprits) et sa partie dynamique (initialisation des variables et oprations sur les donnes). Machine de base cf. Module de base Machine principale machine particulire dun projet qui sert de point dentre pour lexcution du code dun projet B. Machine requise machine qui est vue, incluse, utilise, importe ou raffine. Module Un module B permet de modliser un sous-systme ; il constitue une partie dun projet B. La spcification dun module est formalise en langage B dans une machine abstraite. Il existe trois sortes de modules, les modules dvelopps par raffinements successifs dune machine abstraite, les modules abstraits et les modules de base. Par abus de langage, on confond souvent le module et sa spcification, la machine abstraite. Module abstrait dsigne un module B compos dune machine abstraite qui nest pas raffine et qui ne possde pas de code associ. Un module abstrait sert principalement tre inclus dans une machine ou un raffinement. Module de base dsigne un module B compos dune machine abstraite qui nest pas raffine et qui possde un code associ manuellement, implmentant directement les donnes et les services de la machine. Module dvelopp un module dvelopp est un module entirement dvelopp en langage B. Il est

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

226

Manuel de rfrence du langage B - Version 1.8.6 constitu dune machine abstraite, de ses ventuels raffinements et de son implantation.

Non libert une variable est dite non libre dans un prdicat ou dans une expression si elle nest pas prsente dans la formule ou si elle est prsente dans des sous formules qui sont sous la porte de certains quantificateurs introduisant une variable quantifie de mme nom. Obligation de preuve lemme mathmatique constitu dune liste de prdicats appels hypothses et dun prdicat appel but qui doit tre prouv sous ces hypothses. Opration service offert par un module B. Les oprations constituent la partie dynamique dun module. Par dfaut, lorsque lon parle dopration sans ajouter de qualificatif, il sagit dune opration non locale, cest--dire dune opration dfinie dans un module B, utilisable par les utilisateurs du module. Opration propre opration (non locale) dun composant dont le corps est donn dans le composant, au sein de la clause OPERATIONS. Opration promue opration dun composant dont les paramtres et la spcification est identique une opration dune instance de machine incluse ou importe. Opration locale opration locale une implantation : elle est spcifie et implmente dans une implantation et utilisable seulement par cette implantation. Les oprations locales sont spcifies dans la clause LOCAL_OPERATIONS et sont implantes dans la clause OPERATIONS. Opration de consultation opration dont la spcification dans une machine abstraite ne modifie pas les variables de la machine. Paramtre en B, il est possible de paramtrer les machines abstraites, les dfinitions et les oprations. Les paramtres formels sont des noms donns lors de la dclaration dun constituant paramtr ses paramtres. Lors de lutilisation dun constituant, on attribue chaque paramtre une valeur appele paramtre effectif. Condition prdicat implmentable utilis dans les instructions IF et WHILE. Preuve activit mathmatique consistant dmontrer la vracit dObligations de Preuve. Le dveloppement dun projet comporte principalement deux grandes activits : lcriture de composants et la preuve des Obligations de Preuves associes ces composants.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Glossaire

227

Projet dsigne un ensemble complet et autosuffisant de modules permettant de spcifier de manire formelle un systme et ventuellement dengendrer un programme informatique conforme aux spcifications formelles. Raffinement le raffinement not Mn dun composant not Mn-1 est une nouvelle formulation de Mn, dans laquelle certains constituants de Mn sont raffins (les constantes abstraites et les variables abstraites, linitialisation, les oprations). Raffiner raffiner un constituant possdant certaines proprits, cest offrir une nouvelle formulation de ce constituant laide dun ou de plusieurs nouveaux constituants qui ne doivent pas contredire les proprits du constituant raffin et diminuer le niveau dabstraction et dindterminisme du constituant. Raffiner permet galement denrichir un composant par rapport sa spcification. Renommage le renommage en B permet de crer des instances de machines abstraites. Une instance de machine est dsigne par le nom de la machine prcd dun prfixe de renommage. Le prfixe de renommage est constitu dun identificateur suivi dun point. Les variables, les oprations et les paramtres dune instance de machine renomme sont dsigns de lextrieur laide du mme prfixe de renommage. Signature dune opration liste ordonnes des types des paramtres dentre et de sortie dune opration. Substitution notation mathmatique permettant de modliser la transformation de formules mathmatiques. Instruction Substitution faisant partie du B0. Tableau fonction totale dun ensemble simple, ou dun produit cartsien densembles simple (si le tableau est multidimensionnel), vers un ensemble simple. Typage mcanisme de vrification statique des donnes. Le type dune donne d est le plus grand ensemble (parmi les ensembles dfinis dans le langage B) auquel appartient une donne. Valuation mcanisme qui consiste donner des valeurs aux constantes concrtes et aux ensembles abstraits dclars dans un module B, au sein de limplantation du module. La valuation est dcrite dans la clause VALUES.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

228

Manuel de rfrence du langage B - Version 1.8.6

Variable dsigne indiffremment une variable concrte ou une variable abstraite. Variable concrte donne appartenant un composant et conserve au cours du raffinement qui reprsente soit un scalaire, soit un tableau. Variable abstraite donne appartenant un composant dont le type est quelconque et qui est raffine au cours du raffinement du composant.

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Index

229

ANNEXE F INDEX
#
-, 39, 48 !, 29 &, 28 (, 28 ), 28 =>, 28 <=>, 28 #, 29 =, 30 /=, 30 /:, 31 <:, 32 <<:, 32 /<:, 32 /<<:, 32 <=, 33 <, 33 >=, 33 >, 33 ., 36 $0, 36 (, 36 ), 36 ", 36 +, 39 *, 39 /, 39 **, 39 |->, 43 {}, 44 *, 46 {, 46 }, 46 .., 46 \/, 48 /\, 48 , 51 <->, 53 -1, 54 ;, 54 ><, 54 ||, 54 [, 59 ], 59 <|, 60 <<|, 60 |>, 60 |>>, 60 <+, 60 +->, 62 -->, 62 >+>, 62 >->, 62 +->>, 62 -->>, 62 >->>, 62 %, 64 [], 66 [, 66 ], 66 ^, 70 ->, 70 <-, 70 /|\, 70 \|/, 70 :=, 86 ::, 99 :( ), 100 ;, 102 <--, 103 ||, 107 <--, 164 <--, 172

A
ABSTRACT_CONSTANTS, 140 ABSTRACT_VARIABLES, 154 abstraction, 223 addition, 39 analyse lexicale, 3 smantique, 3 syntaxique, 3 anticollision, 3 anticollision didentificateurs, 181 ANY, 96 appartenance, 31 arbre aplatissement infix, 79 arit, 77 binaire en extension, 79 ensemble darbres, 72 rang, 77 sous arbre, 77 sous arbre droit, 79 sous arbre gauche, 79 arbre

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

230

Manuel de rfrence du langage B - Version 1.8.6


commentaires, 6 composant, 109, 223 composition, 54 conc, 70 CONCRETE_CONSTANTS, 138 CONCRETE_VARIABLES, 152 condition, 179 conjonction, 28 constante, 142, 223 abstraite, 140, 223 concrte, 20, 138, 145, 223 liaison, 143 typage, 143 CONSTANTS, 138 constituant, 223 CONSTRAINTS, 116 couple, 43

ensemble darbres binaires, 72 arbre construction, 74 arbre racine, 74 arbre fils, 74 arbre aplatissement prfix, 74 arbre aplatissement postfix, 74 arbre taille, 74 arbre symtrie, 74 arbre pre, 77 arbre me i fils, 77 architecture, 185 arity, 77 ASSERT, 89 ASSERTIONS, 160 associativit, 195 Atelier B, 1, 221

D
dfinition, 8 appel, 10 DEFINITIONS, 8 dmonstration, 224 dterminisme, 83 dveloppement, 185 diffrence, 48 Diffrence, 39 disjonction, 28 division entire, 39 DO, 105 dom, 59 domaine, 59 donne, 36, 37, 224

B
B0, 223 BE, 97 BEGIN, 84 bijection totale, 62 bijection, 221 bin, 79 bool, 38 BOOL, 44 boolen, 17 btree, 72

E
galit, 30 EITHER, 94 ELSE, 91, 93, 94 ELSIF, 91 END, 84, 88, 89, 90, 91, 93, 94, 96, 97, 101, 105, 109, 112, 114 ensemble abstrait, 135, 145 de relation, 53 de relations, 53 des boolens, 44 des chanes de caractres, 44 des entiers, 44 des entiers non nuls, 44 des entiers relatifs, 44 des parties, 15 en comprhension, 46 en extension, 46 numr, 135 vide, 44 ensemble

C
caractres despacement, 6 card, 41 cardinal, 41 CASE, 94 chanes de caractres, 6 chanes de caractres, 36 champ de record accs, 51 CHOICE, 90 clause, 223 de visibilit, 223 closure, 57 closure1, 57 codomaine, 59

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Index
abstrait, 17 ensemble numr, 17 ensemble de records, 51 entier concret, 17 entier littral, 40 entiers littraux, 6 quivalence, 28 tendre, 132 expression, 35 arithmtique, 39, 41 boolenne, 38 cartsienne, 43 densembles, 44 EXTENDS, 132, 189 implantation, 224 IMPLEMENTATION, 114 implication, 28 importer, 119 IMPORTS, 188 IN, 97, 101 INCLUDES, 126, 189 inclure, 126 inclusion, 32 stricte, 32 indterminisme, 170 ingalit, 30 infrieur ou gal, 33 infix, 79 initialisation, 224 INITIALISATION, 161 injection partielle, 62 totale, 62 instance, 187 de machine, 224 de machine importe, 224 de machine incluse, 224 de machine utilise, 224 de machine vue, 224 instance de machine abstraite, 224 instance de machine concrte, 224 instruction, 180, 227 INT, 44 INTEGER, 44 inter, 48 INTER, 48 intersection, 48 gnralise, 48 quantifie, 48 intervalle, 46 invariant, 156, 224 de liaison, 225 INVARIANT, 105, 156 inverse, 54 iseq, 66 iseq1, 66 iterate, 57 itration, 57

231

F
FALSE, 38 father, 77 fermeture transitive, 57 transitive et rflexive, 57 FIN, 46 FIN1, 46 first, 68 top, 74 fnc, 64 fonction valuation, 64 partielle, 62 totale, 62 transforme en, 64 front, 68

H
homonymie, 127 constante abstraite, 140 constante concrte, 138, 152, 154 initialisation, 162 invariant, 156 proprits des constantes, 142 valuation des constantes, 145 variable abstraite, 154 homonymie, 127

I
id, 54 identificateur, 221 identificateurs, 5 identit, 54 IF, 91 image, 59 implantation, 186 lambda-expression, 64 last, 68 sons, 74 left, 79 LET, 97 lexme, 225 lexmes, 3

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

232

Manuel de rfrence du langage B - Version 1.8.6


OPERATIONS, 165 or, 28 OR, 90, 94

librairie, 190 lien, 188 rgles, 190 littral numr, 135 LOCAL_OPERATIONS, 172

P
paire ordonne, 15, 43 paramtre dentre dopration, 23, 166 dopration, 166 de machine, 24, 116 de sortie dopration, 167 parenthse, 36 parenthses, 28 perm, 66 permutations, 66 PI, 41 porte, 3 postfix, 74 POW, 46 POW1, 46 PRE, 88 prcondition, 170 pred, 39 prdcesseur, 39 prdicat, 27 B0, 226 de typage, 15 prefix, 74 priorit, 195 prj1, 54 prj2, 54 produit, 39 dexpressions, 41 direct, 54 parallle, 54 produit cartsien, 46 projection deuxime, 54 premire, 54 projet, 187, 227 PROMOTES, 130 promotion, 120, 128 promouvoir, 130 PROPERTIES, 142 propositions, 28 puissance, 39

M
machine, 185, 225 de base, 187, 225 principale, 225 requise, 225 MACHINE, 109 machine abstraite, 185, 225 max, 41 maximum, 41 MAXINT, 39 min, 41 minimum, 41 MININT, 39 mirror, 74 mod, 39 module, 185 abstrait, 187, 225 de base, 187 dvelopp, 186, 225, 226 modulo, 39 moins unaire, 39 mots rservs, 5

N
NAT, 44 NAT1, 44 NATURAL, 44 NATURAL1, 44 ngation, 28 non appartenance, 31 non inclusion, 32 stricte, 32 not, 28

O
obligation de preuve, 226 OF, 94 oprateur arithmtique, 178 opration, 165 corps, 168, 170 de consultation, 226 dveloppe, 226 en-tte, 166 locale, 226 promue, 226 raffinement, 169 opration, 172

Q
quantificateur existentiel, 29 universel, 29

R
raffinement, 186

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Index
ran, 59 rank, 77 rec, 51 record, 18 en extension, 51 REFINEMENT, 112 REFINES, 117 regroupement, 128 rel, 64 relation transforme en, 64 renommage, 36, 187, 227 SEES, 122 restriction codomaine, 60 domaine, 60 smantique, 3 rev, 68 sizet, 74 right, 79 simultane, 107 tant que, 105 subtree, 77 succ, 39 successeur, 39 suite concatnation gnralise, 70 dernier lment, 68 en extension, 66 insertion en queue, 70 insertion en tte, 70 inverse, 68 premier lment, 68 queue, 68 restriction la queue, 70 restriction la tte, 70 taille, 68 tte, 68 vide, 66 suites, 66 bijectives, 67 injectives, 66 injectives non vide, 66 non vide, 66 suprieur ou gal, 33 surcharge, 60 surjection partielle, 62 totale, 62 syntaxe, 7

233

S
SEES, 189 SELECT, 93 seq, 66 seq1, 66 SETS, 135 SIGMA, 41 size, 68 const, 74 skip, 85 somme dexpressions, 41 son, 77 sous-ensemble, 46 fini, 46 fini non vide, 46 non vide, 46 soustraction codomaine, 60 domaine, 60 strictement infrieur, 33 strictement suprieur, 33 STRING, 44 struct, 51 substitution, 81, 227 appel dopration, 103 assertion, 89 choix born, 90 concrte, 170 devient gal, 87 devient tel que, 100 devient un lment de, 99 gnralise, 82 identit, 85 prcondition, 88 squencement, 102

T
tableau, 227 tableau, 18 concret, 18, 176 contrle en B0, 176 tail, 68 terme, 177 THEN, 88, 89, 91, 93, 94, 96 tree, 72 TRUE, 38 typage, 3, 13 type de base, 14

U
union, 48 gnralise, 48 quantifie, 48 union, 48 UNION, 48 USES, 133, 189 utiliser, 133

V
valuation, 145, 156, 227

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de CLEARSY

234

Manuel de rfrence du langage B - Version 1.8.6


visibilit, 3 voir, 122

VALUES, 145 VAR, 101 variable, 228 abstraite, 154, 228 concrte, 152, 228 initialiser, 161 liaison, 157 typage, 156 VARIABLES, 154 VARIANT, 105

W
WHEN, 93 WHERE, 96 WHILE, 105

Toute reproduction, mme partielle, tout transfert un tiers sous quelque forme que ce soit, sont strictement interdits sans autorisation de ClearSy

Você também pode gostar