• Aucun résultat trouvé

Dans cette section, on d´efinit formellement la s´emantique de r´eduction du S π-calcul. On suppose donn´ee une relation ⇓ telle que pour tout symbole de fonction f et pour toutes valeurs v1, . . . ,vn,

bien typ´ees, il existe une unique valeur v telle que f (v1, . . . ,vn) ⇓ v. On suppose de plus que cette

valeur peut ˆetre calcul´ee en temps polynomial en la taille des valeurs v1, . . . ,vn. Comme mentionn´e

pr´ec´edemment, les techniques pour d´efinir des programmes fonctionnels du premier ordre satisfaisant `

a ces conditions ont ´et´e bien ´etudi´ees. La relation d’´evaluation ⇓ est ´etendue aux expressions de mani`ere standard par :

s ⇓ s

ei ⇓ vi, i = 1, . . . , n

c(e1, . . . ,en) ⇓c(v1, . . . ,vn)

ei⇓ vi, i = 1, . . . , n f (v1, . . . ,vn) ⇓ v

f (e1, . . . ,en) ⇓ v

Par la suite, on notera plus simplement e ⇓ v pour e1 ⇓ v1, . . . ,en⇓ vn

Le comportement (interne) d’un programme est donn´e par

• un syst`eme de r´eduction → d´ecrivant les r´eductions possibles du programme pendant un instant,

• une relation d’´evaluation 7→ d´ecrivant la fac¸on dont un programme ´evolue `a la fin de chaque

instant.

Ces d´efinitions reposent sur une relation d’´equivalence structurelle ≡ que l’on commence par intro- duire.

3.7. S ´EMANTIQUE FORMELLE 35

´

Equivalence structurelle. L’´equivalence structurelle ≡ est la plus petite relation sur les programmes

qui identifie les programmes `a α-renommage pr`es et qui satisfait les ´equations standards suivantes :

P | 0 ≡ P P1| P2≡ P2| P1 (P1| P2) | P3≡ P1| (P2| P3)

νs P ≡ P if s < f n(P) νs P1| P2 ≡ νs P1| P2if s < f n(P2)

R´eduction dans l’instant. De mani`ere standard, on se base sur la notion de contexte statique pour

d´efinir la relation de r´eduction. La relation de r´eduction → est alors d´efinie, `a l’aide de la relation auxiliaire −. , par les r`egles de la figure 3.1 o`u un contexte statique C est d´efini par C ::= [] || νs C |

| (C | P) e ⇓ v se | s(x).P, K −. se | [v/x]P A(x) = P e ⇓ v A(e) −. [v/x]P [s = s] · P1, P2−. P1 s , s0 [s = s0] · P 1, P2−. P2 match(v, p) = σ [v = p] · P1, P2−. σP1 match(v, p) =↑ [v = p] · P1, P2−. P2 P ≡ C[P0] P0−. Q0 C[Q0] ≡ Q P → Q

F. 3.1 – R´eduction dans l’instant

Calcul de fin d’instant. On note P ↓ si ¬∃Q.(P → Q) et on dit alors que le programme P est sus-

pendu. Lorsque P est suspendu l’instant termine et un calcul additionnel a lieu pour passer `a l’instant suivant. Ce calcul pr´esente trois ´etapes :

1. collecter sous forme de listes les ensembles de valeurs ´emises sur chacun des signaux 2. Extruder les noms de signaux contenus dans des valeurs visibles `a la fin de l’instant 3. initialiser les continuations des op´erateurs present.

On commence par introduire plusieurs notations, en notant qu’un programme suspendu est structurel- lement ´equivalent `a

νs (S | In) (3.1)

o`u les noms de signaux s sont tous distincts et o `u pour m, n ≥ 0 :

S = s1e1| . . . | snen In = t1(x1).P1,A1(r1) | . . . | tm(xm).Pm,Am(rm)

Par convention, une composition parall`ele vide est ´egale au programme 0. On note se ∈ S si se apparaˆıt dans la composition parall`ele S . Les ´etapes 1 `a 3 sont alors formalis´ees de la mani`ere suivante :

1. Soit V une fonction des noms de signaux vers les listes de valeurs. On dit que V repr ´esente

S et on note V |= S si, pour tout signal s, si {v1, . . . ,vn} = {v | se ∈ S , e ⇓ v} alors V(s) =

36 CHAPITRE 3. LE π-CALCUL SYNCHRONE 2. On d´efinit Free(νs S ) comme le plus petit ensemble de noms de signaux tel que Free(νs S ) ⊇

f n(νs S ) et si s ∈ Free(νs S ), se ∈ S , e ⇓ v et s0 ∈ f n(v) alors s0 ∈ Free(νs S ). Par exemple,

Free(νs1,s2(ss1| s1s2)) = {s, s1,s2}.

3. Si r est une expression avec d´er´ef´erenciation alors V(r) est l’expression r´esultant du remplace- ment de tout signal d´er´ef´erenc´e !s par V(s). Si A(r) est la continuation d’un op´erateur present, o`u r est une liste d’expressions closes, alors Eval(A(r), V) = A(v) si V(r) ⇓ v. Finalement, si In est d´efini comme dans (3.1) alors Eval(In, V) = Eval(A1(r1), V) | . . . | Eval(Am(rm), V).

En suivant ces conventions, la r`egle d’´evaluation `a la fin de l’instant est donn´ee par :

P ↓ P ≡ νs (S | In) V |= S {s0} = {s}\Free(νs S ) P0≡ νs0Eval(In, V)

P 7→ P0

F. 3.2 – ´Evaluation `a la fin de l’instant

Intuitivement, si le programme est suspendu, i.e. P ↓ alors on proc `ede de la mani`ere suivante : 1. dans P, on distingue les ´emissions S des programmes suspendus en attente d’un signal In, 2. on calcule une repr´esentation V des ´emissions S

3. on calcule les noms de signaux extrud´es

Chapitre 4

Le S π-calcul `a contrˆole fini

Dans le paradigme r´eactif, un programme doit r´eagir (ou ´emettre des signaux de sortie) `a une collec- tion d’´ev´enements (o `u signaux d’entr´ee) `a chaque instant. Cette sp´ecification intuitive repose sur une notion bien fond´ee d’instant ; en d’autres termes, cela suppose que les r ´eactions d’un programme ter- minent toujours. Pour des programmes ´ecrits dans un langage suffisamment expressif, cette hypoth`ese n’est pas, en g´en´eral, satisfaite ce qui conduit `a l’introduction d’une notion sp´ecifique de correction que l’on appelle r´eactivit´e. Intuitivement, on dit qu’un programme est r ´eactif si chaque r´eaction cal- cul´ee par ce programme termine. Dans ce chapitre on s’int´eresse plus particuli`erement `a une notion plus effective de r´eactivit´e que l’on appelle r´eactivit´e efficace. D’apr`es [33],

Reactivity means the ability to react to external events, and, quite obviously, requires bounded memory and reaction time

On consid`ere ici un sous ensemble du S π-calcul pour lequel on d´eveloppe des m´ethodes d’analyse statique permettant de garantir qu’un programme calcule ses r´eactions en temps et espace polyno- miaux en la taille de ses entr´ees. Comme nous l’avons d´ej`a not´e, une complexit´e polynomiale est g´en´eralement consid´er´ee comme une bonne approximation de la notion de complexit´e raisonnable.

Une r´eaction produit des sorties en r´eponse `a des entr´ees fournies par l’environnement. En pratique, si l’on consid`ere des langages de programmation suffisamment expressifs, le calcul d’une r ´eaction peut d´ependre de l’histoire du calcul (les instants pr´ec´edents) et non seulement des entr´ees fournies par l’environnement pour cette r´eaction. De mani`ere ´evidente, un programme n´ecessitant de conser- ver une trace compl`ete de l’histoire du calcul n’est pas raisonnable. Dans des travaux pr ´ec´edents [4] nous avons d´evelopp´e des m´ethodes d’analyse statique permettant de garantir que la quantit´e de res- sources n´ecessaire au calcul des r´eactions d’un programme est polyn ˆomiale en la taille de ses entr´ees. Bien que le langage pr´esent´e dans ces travaux dispose de valeurs de types de donn´ees dynamiques, le calcul sur celles-ci ´etait fortement confin´e dans l’instant ; l’histoire du calcul (plus pr´ecis´ement l’histoire des communications) devant ˆetre repr´esent´ee par des valeurs de types de donn´ees finis. Un exemple typique est celui d’un bool´een d´enotant la pr´esence d’un signal `a l’instant pr´ec´edent (`a noter que les entiers 32-bits, les flottants,... sont ´egalement des types de donn´ees finis). De nombreux pro- grammes synchrones supportent cette restriction. Cependant, d’autres programmes ont besoin de plus d’un instant pour r´ealiser certains calculs n´ecessitant un acc`es `a l’histoire du calcul plus complexe. Par exemple, on peut consid´erer un serveur recevant une liste de requˆetes auquel celui-ci doit r´epondre lors du premier instant au cours duquel un signal donn´e est ´emis.

Dans ce chapitre, on consid`ere un sous-ensemble du S π-calcul dans lequel la r´ecursion est restreinte 37

38 CHAPITRE 4. LE S π-CALCUL `A CONTR ˆOLE FINI de mani`ere `a ne pas passer sous la composition parall`ele (intuitivement, cela revient `a dire que l’on n’autorise pas la cr´eation dynamique de threads).

Documents relatifs