La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)

Présentations similaires


Présentation au sujet: "Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)"— Transcription de la présentation:

1 Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)

2 Notation lambda ( ) But : une notation pour les fonctions Ex. : la fonction qui met au carré (sqr en Pascal) x. x * x est une déclaration de paramètre qui suit les règles de visibilité : x. x + sqr (( x. x + x) (x + 2)) On peut simplifier grâce aux règles : : ( x. E) (A) se simplifie en E [A x] E où toutes les occurrences libres de x sont remplacées par A : ( x. E(x)) se simplifie en E, si E na aucune occurrence libre de x

3 Exemple de simplification x. x + sqr (( x. x + x) (x + 2)) portée : x. x + ( x. x * x) (( x. x + x) (x + 2)) Il y a deux endroit où sapplique : 1, 2 1 x. x + (( x. x + x) (x + 2)) * ( x. x + x) (x + 2) 3 x. x + (( x + 2) + (x + 2)) * ( x. x + x) (x + 2)) 4 x. x + (((x+ 2) + (x + 2)) * ((x + 2) + (x + 2))) = x. 4x 2 + 9x + 16 si on emploie les simplifications arithmétiques. On pourrait aussi appliquer les règles dans un autre ordre : on arrive au même résultat (Théorème de Church-Rosser) Ex. : 2 x. x + ( x. x * x) (x+2 + x+2) 1 x. x + (x+2 + x+2) * (x+2 + x+2) 12 def

4 Domaines sémantiques Quel objet mathématique représente le sens dun programme ? Ceci dépend du langage considéré, et du sens quon lui accorde. Ex. : Pour Pascal, on convient habituellement que : - il devrait être déterministe (OK si on évite les effets de bord dans les fonctions) - on ne considère que les états initiaux et finaux des fichiers le sens est une fonction des états initiaux vers les états finaux. Ex. : Pour les langages concurrents (Ada, LOTOS, CSP, CCS,...) les opérations intermédiaires visibles comptent aussi : le sens est un objet plus compliqué (p.ex. des arbres)

5 Compositionnalité On veut donner un sens à chaque partie de façon à ce que le sens dun composé se déduise du sens de ses composants. Avantages : Si deux composants ont le même sens, on peut toujours remplacer lun par lautre (p.ex. compilateur optimisant) La définition de la sémantique suivra la structure de la syntaxe.

6 Exemple : séquence en Pascal Le sens d'une instruction S, noté [[ S ]], est une fonction de l'état initial vers l'état final Alors le sens d'une séquence est la composition fonctionnelle du sens de ses composants: [[ S 1 ; S 2 ]] = x. [[S 2 ]] ([[ S 1 ]] (x)) = [[ S 2 ]] ° [[ S 1 ]]

7 Non-terminaison Certains programmes bouclent pour certaines données Ex. : la fonction factorielle pour les nombres négatifs pour représenter cela, on ajoute une valeur spéciale « bouclage » ou « bottom » à lensemble des résultats. Comme ce résultat peut être largument dun autre appel, il faut aussi lajouter dans les données.

8 Strict Si un paramètre est nécessaire pour évaluer une fonction, dès que l'évaluation du paramètre ne termine pas, l'appel de fonction ne termine pas non plus. Def. : une fonction F est stricte dans son ième argument si F(x 1,, …, x i-1,, x i+1,...) =

9 Exemple: Pascal Presque toutes les fonctions de la sémantique de Pascal sont strictes, parce qu'on évalue tous les paramètres avant un appel. Exception: le sens de l'instruction if ne nécessite pas d'évaluer une des deux parties.

10 Etat On représente ici l'état d'un programme par une fonction des variables vers leur valeur

11 Sémantique des instructions Pascal [[ S 1 ; S 2 ]] = [[ S 2 ]] ° [[ S 1 ]] [[ skip ]] = x. x [[ if E then S 1 else S 2 ]] = x. if ([[ E ]] (x) = true) then [[ S 1 ]] (x) else [[ S 2 ]] (x) [[ V := E ]] = x. i. if i = V then [[ E ]] (x) else x(i) [[ while E do S ]] = x. if ([[ E ]] (x) = true) then [[while E do S]] ° [[ S ]](x) else x

12 Récursivité la définition du while est récursive, mais pas bien fondée. Comment calculer son sens ? Ce doit être une solution de: W = x. if [[ E ]] (x) then W ° [[ S ]](x) else x. Cette équation peut avoir plusieurs solutions, mais une seule est intuitive. Les solutions sont appellées points fixes de: F = W. x. if [[ E ]] (x) then W ° [[ S ]](x) else x.

13 Ordre dinformation Pour comparer les solutions et choisir la plus naturelle, on définit un ordre partiel X Y se lit « Y contient au moins linfo de X » ou « X approxime Y »

14 Bouclage Considérons le programme f(x) = f(x)+1 Cette équation na pas de solution dans les nombres Le programme boucle à lexécution On ajoute une valeur spéciale qui représente le fait quun programme boucle. = +1 est alors la seule solution.

15 Ordre partiel Un ordre partiel est une relation: Réflexive: X X Transitive: X Y et Y Z implique X Z Antisymétrique: X Y et Y X implique X=Y

16 Supremum Un majorant de Y est un élément b plus grand que tous ceux d'Y: b Maj(Y) = y Y, y b Un majorant plus petit que les autres est le supremum de Y s=sup(Y) ssi s Maj(Y) et m Maj(Y), s m

17 Chaîne Une chaîne est une suite croissante (x i ) i N telle que x i x i+1

18 Domaine Un domaine ou ordre partiel complet (CPO) est un ensemble X muni d'un ordre partiel X contient un minorant Toute chaîne de X a un supremum Intuition: Un programme qui boucle ne fournit aucune info: X On peut représenter linfo accumulée par un programme par le supremum de ses calculs partiels

19 CPO plat Pour les valeurs classiques, on ajoute juste en dessous: x y ssi x = ou x =y Z Par exemple: les entiers avec, noté Z, est obtenu ainsi Exercice: est-ce bien un CPO?

20 CPO Union disjointe Si on a deux CPOs A, B on forme le type union disjointe de A et B en rajoutant encore un en-dessous: A+B B A Indique une valeur inconnue Indique une valeur inconnue de B AB

21 Ordre ponctuel Pour les fonctions, on emploie lordre ponctuel: f D C g ssi x D, f(x) C g(x) Lélément minimum est la fonction qui renvoie toujours.

22 Fonction monotone Une application entre CPOs est monotone si elle préserve l'ordre : Si x y alors f(x) f(y)

23 Théorème de Tarski Si F est une application monotone dun CPO dans lui-même, elle a un plus petit point fixe, noté fix(F).

24 Continuité pour lordre Une fonction f est continue si elle préserve les suprémums: Pour toute chaîne C: f(sup (C) ) =sup(f (C)) Attention cette continuité nest pas celle de la topologie usuelle sur les nombres rééls! Avec cette déf, toute fonction continue est monotone.

25 Théorème de Scott Si f est une application continue dun CPO dans lui-même, son plus petit point fixe peut se calculer en itérant f à partir de, f( ), f(f( )), f(f(f( ))), … et en prenant le supremum fix(f) = sup i (f i ( )) où f i (x) note f(f(…f(x)))

26 Preuve 1.Ce supremum est un point fixe = f 0 ( ) f( ) puisque CPO f i ( ) f i+1 ( ) par monotonie (f i ( )) i N est une chaîne, donc a un supremum s = sup i (f i ( )) f(s) =f(sup i (f i ( ))) = sup i (f(f i ( ))) = s

27 Preuve (2) Il est le plus petit: Soit v un autre point fixe v puisque CPO f i ( ) f i (v) = v par monotonie càd v majorant s v def. supremum

28 Exemple Quel est le sens de la fonction récursive ML: f b = if b then 3 else 2*f(b) f : bool int Cest le plus petit point fixe de H: H f b = if b then 3 else 2*f(b) On le calcule par la chaîne: H = if b then 3 else H(H ) = if b then 3 else Donc, i>0, H i = if b then 3 else = fix H = [[f]]

29 Continuité Pour appliquer le théorème de Scott, il faut que la fonction soit « continue » En pratique: toute fonction écrite en ML, Pascal, … est continue. Schéma de preuve: Les fonctions de base sont continues La composition préserve la continuité Un point fixe dune fonctionnelle continue est continu.

30 Exemple de point fixe Quel est le sens de f n = n+(if n=0 then 0 else f(f(n-1)) R: le plus petit point fixe de H f n = n+(if n=0 then 0 else f(f(n-1)) H 0 n = H 1 n = n+(if n=0 then 0 else ) = if n=0 then 0 else H 2 n = n+(if n=0 then 0 else H 1 (if n-1=0 then 0 else )) = n+(if n=0 then 0 else if n=1 then 0 else ) = if n=0 then 0 else if n=1 then 1 else …

31 Exemple de point fixe H 3 n = H(H 2 ) n = n+(if n=0 then 0 else H 2 (H 2 (n-1)) = n+(if n=0 then 0 else H 2 (if n-1=0 then 0 else if n- 1=1 then 1 else )) = if n=0 then n+0 else if n=1 then n+ H 2 0 else if n=2 then n+ H 2 1 else = if n=0 then 0 else if n=1 then 1 else if n=2 then 2+ H 2 1 else = if n=0 then 0 else if n=1 then 1 else if n=2 then 3 else

32 Exemple de point fixe H 4 n = H(H 3 ) n = n+(if n=0 then 0 else H 3 (H 3 (n-1)) = n+(if n=0 then 0 else H 3 (if n-1=0 then 0 else if n- 1=1 then 1 else if n-1=2 then 3 else )) = if n=0 then 0 else if n=1 then n+ H 3 0 else if n=2 then n+ H 3 1 else if n=3 then n+ H 3 3 else = if n=0 then 0 else if n=1 then 1 else if n=2 then 3 else if n=3 then else = if n=0 then 0 else if n=1 then 1 else if n=2 then 3 else = H 3 n : le point fixe est atteint

33 Interprétation Abstraite Linterprétation abstraite est une technique pour calculer des propriétés dun programme. En principe ces propriétés se déduisent de la sémantique du programme, mais celle-ci est trop coûteuse à calculer. On ne calcule donc que les propriétés qui nous intéressent; Le plus souvent ceci amène à faire des approximations. La sémantique sert à trouver et prouver ces approximations. W447

34 Interprétation Abstraite: cadre 1. Une sémantique dénotationnelle compositionnelle [[. ]] : programme Domaine standard A Chaque construction f du langage a sa sémantique f A 2. On veut construire une sémantique abstraite compositionnelle qui retient les propriétés à calculer Abs : programme Domaine abstrait B avec une relation «est représenté par » entre les deux domaines : - compatible : si a b, alors f A (a) f B (b) N - continue : si sup i (a i ) = a, sup i (b i ) = b, i N a i b i, alors a b W470

35 Exemple: Signe On veut que le compilateur calcule, si possible, le signe des expressions entières Z Domaine standard = Z Domaine abstrait = {0, p, n, ?} 0 représente 0: 0 p représente les nombres positifs: z p ssi z>0 n représente les nombres négatifs: z n ssi z<0 ? représente tout le domaine abstrait: z n0p?n0p?

36 Exemple: Signe: fonctions abstraites On construit les meilleures approximations des 4 opérations: *p0 n? pp0 n ? n n0p? ??0?? +p0n? ppp?? 0p0n? n nn? ????? p0n ? p?pp? 0n0p? n nn?? ????? /p0 n ? pperr n ? 00err00 n n errp? ??err?? est continue (les chaînes sont finies).

37 Exemple: Signe: point fixe i := 1; f := 1; while i

38 Dautres applications de linterprétation abstraite Linterprétation abstraite permet au compilateur de calculer des réponses approchées à des questions comme: Des variables sont-elles synonymes ? Des structures de pointeurs ont-elles des cellules partagées ? Une fonction est-elle stricte ? Une fonction a-t-elle des effets de bord ? Une variable a-t-elle un effet sur une autre ? Combien de temps prend un programme ? Calculs sur les grammaires (voir plus loin)

39 Sémantique des grammaires non contextuelles Le sens dun non-terminal X dans une grammaire G = (S, V N, V T, P) est lensemble des textes corrects pour X, càd {w V T * | X * w }. Les règles d'une grammaire sont récursives: la théorie du point fixe convient donc pour leur donner un sens. Si on suppose qu'on a donné un sens à chaque non-terminal (càd on a une fonction de V N P (V T *) ) alors on peut l'utiliser dans les règles de la grammaire pour calculer un nouveau sens. Le plus petit point fixe donne la sémantique de chaque non-terminal. La sémantique du symbole initial donne le langage de la grammaire.L'ordre utilisé est l'ordre sur les vecteurs d'ensembles: A 1 (X) A 2 (X) ssi X V N, A 1 (X) A 2 (X)

40 Continuité Toutes les grammaires définissent une fonction "continue" pour l'inclusion. En effet, le supremum pour l'inclusion est simplement l'union (infinie). Les grammaires BNF sont écrites avec les 4 opérateurs: union,. suivi de, a symbole terminal, chaîne vide. On peut montrer qu'ils sont continus, p.ex.: Donc ( i L i ).M = {x.y | i. x L i et y M} = i ( L i.M) Donc le langage peut se calculer par point fixe.

41 Exemple La grammaire P A ::= a A c | B B ::= b B | C C ::= | C = {A=, B=, C= } [[P]] = {A=, B=, C= } [[P]] 2 = {A=, B=, C= } [[P]] 3 = {A=, B= {,b}, C= } [[P]] 4 = {A= {ac,,b}, B= {,b,bb}, C= } On généralise: [[P]] n = { A = {a i b j c i | i+j n-3}, B = { b j | j n-2}, C= si n 1, C= sinon } On fait la preuve par induction Puis le passage à la limite: fix [[P]] = { A = {a i b j c i }, B = { b j }, C= }

42 Interprétation abstraite de grammaires Le calcul des k premiers symboles terminaux (voir chap.2) est une interprétation abstraite. L'opérateur. (suivi de) est donc abstrait en une concaténation bornée à k symboles. Les autres sont inchangés. Le domaine abstrait des langages bornés à k caractères a des chaînes finies, donc le calcul du point fixe converge finiment.


Télécharger ppt "Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)"

Présentations similaires


Annonces Google