sémantique dénotationnelle idée : le sens dun programme est un objet mathématique (souvent, une...
TRANSCRIPT
![Page 1: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/1.jpg)
Sémantique dénotationnelleSémantique dénotationnelle
Idée :
Le sens d’un programme est un objet mathématique(souvent, une fonction)
![Page 2: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/2.jpg)
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 sontremplacées par A
: ( x . E(x)) se simplifie en E, si E n’a aucune occurrence libre de x
![Page 3: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/3.jpg)
Exemple de simplificationx. 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ù s’applique : 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. 4x2 + 9x + 16 si on emploie les simplifications arithmétiques.
On pourrait aussi appliquer les règles dans un autre ordre : on arrive aumê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)
1 2def.
3 4
4
1
![Page 4: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/4.jpg)
Domaines sémantiques
Quel objet mathématique représente le sens d’un programme ?
Ceci dépend du langage considéré, et du sens qu’on 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)
![Page 5: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/5.jpg)
CompositionnalitéOn veut donner un sens à chaque partie de façon à ce que le
sens d’un composé se déduise du sens de ses composants.
Avantages :
• Si deux composants ont le même sens, on peut toujours remplacer l’un par l’autre (p.ex. compilateur optimisant)
• La définition de la sémantique suivra la structure de la syntaxe.
![Page 6: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/6.jpg)
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:
• [[ S1 ; S2 ]] = x. [[S2]] ([[ S1]] (x)) = [[ S2 ]] ° [[ S1 ]]
![Page 7: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/7.jpg)
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 »
à l’ensemble des résultats.Comme ce résultat peut être l’argument d’un autre appel, il
faut aussi l’ajouter dans les données.
![Page 8: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/8.jpg)
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(x1, , …, xi-1, , xi+1, ...) =
![Page 9: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/9.jpg)
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.
![Page 10: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/10.jpg)
Etat
• On représente ici l'état d'un programme par une fonction des variables vers leur valeur
![Page 11: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/11.jpg)
Sémantique des instructions Pascal• [[ S1 ; S2 ]] = [[ S2 ]] ° [[ S1 ]]
• [[ skip ]] = x. x
• [[ if E then S1 else S2 ]] = x.
if ([[ E ]] (x) = true) then [[ S1 ]] (x)
else [[ S2 ]] (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
![Page 12: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/12.jpg)
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.
![Page 13: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/13.jpg)
Ordre d’information
• Pour comparer les solutions et choisir la plus naturelle, on définit un ordre partiel
• X Y se lit
« Y contient au moins l’info de X »
ou
« X approxime Y »
![Page 14: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/14.jpg)
Bouclage
Considérons le programme f(x) = f(x)+1
Cette équation n’a pas de solution dans les nombres
Le programme boucle à l’exécution
On ajoute une valeur spéciale qui représente le fait qu’un programme boucle.
= +1 est alors la seule solution.
![Page 15: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/15.jpg)
Ordre partiel
Un ordre partiel est une relation:• Réflexive: X X • Transitive: X Y et YZ implique X Z• Antisymétrique: XY et YX implique X=Y
![Page 16: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/16.jpg)
Supremum
• Un majorant de Y est un élément b plus grand que tous ceux d'Y:
bMaj(Y) = yY, yb• Un majorant plus petit que les autres est le
supremum de Ys=sup(Y)
ssi s Maj(Y) et m Maj(Y), sm
![Page 17: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/17.jpg)
Chaîne
Une chaîne est une suite croissante
(xi)i N telle que xixi+1
![Page 18: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/18.jpg)
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 supremumIntuition:• Un programme qui boucle ne fournit aucune info:
X• On peut représenter l’info accumulée par un
programme par le supremum de ses calculs partiels
![Page 19: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/19.jpg)
CPO plat
Pour les valeurs classiques, on ajoute juste en dessous: x y ssi x = ou x =y
Par exemple: les entiers avec , noté ZZ, est obtenu ainsi.-4 -3 -2 -1 0 1 2 3 4
Exercice: est-ce bien un CPO?
![Page 20: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/20.jpg)
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
BA
Indique une valeur inconnue
Indique une valeur inconnue de B
A B
![Page 21: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/21.jpg)
Ordre ponctuel
Pour les fonctions, on emploie l’ordre ponctuel:
f DC g ssi xD, f(x) Cg(x)
L’élément minimum est la fonction qui renvoie toujours .
![Page 22: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/22.jpg)
Fonction monotone
• Une application entre CPOs est monotone si elle préserve l'ordre :
Si x y alors f(x) f(y)
![Page 23: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/23.jpg)
Théorème de Tarski
Si F est une application monotone d’un CPO dans lui-même, elle a un plus petit point fixe, noté fix(F).
![Page 24: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/24.jpg)
Continuité pour l’ordre
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é n’est pas celle de la topologie usuelle sur les nombres rééls!
Avec cette déf, toute fonction continue est monotone.
![Page 25: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/25.jpg)
Théorème de Scott
Si f est une application continue d’un 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) = supi(fi())
où fi(x) note f(f(…f(x)))
![Page 26: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/26.jpg)
Preuve
1. Ce supremum est un point fixe
= f0() f() puisque CPO
fi() fi+1() par monotonie
(fi()) i N est une chaîne, donc a un supremum s = supi(fi())
f(s) =f(supi(fi())) = supi(f(fi())) = s
![Page 27: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/27.jpg)
Preuve (2)
Il est le plus petit: Soit v un autre point fixe v puisque CPO
fi() fi(v) = v par monotonie càd v majorant
s v def. supremum
![Page 28: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/28.jpg)
Exemple
Quel est le sens de la fonction récursive ML:f b = if b then 3 else 2*f(b) f : bool intC’est 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, Hi = if b then 3 else = fix H = [[f]]
![Page 29: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/29.jpg)
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 d’une fonctionnelle continue est
continu.
![Page 30: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/30.jpg)
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 deH f n = n+(if n=0 then 0 else f(f(n-1))
H0 n = H1 n = n+(if n=0 then 0 else )
= if n=0 then 0 else H2 n = n+(if n=0 then 0 else H1 (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
…
![Page 31: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/31.jpg)
Exemple de point fixe
H3 n = H(H2 ) n = n+(if n=0 then 0 else H2 (H2 (n-1))
= n+(if n=0 then 0 else H2 (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+ H2 0 else if n=2 then n+ H2 1 else
= if n=0 then 0 else if n=1 then 1 else if n=2 then 2+ H2 1 else
= if n=0 then 0 else if n=1 then 1 else if n=2 then 3 else
![Page 32: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/32.jpg)
Exemple de point fixeH4 n = H(H3 ) n = n+(if n=0 then 0 else H3 (H3 (n-1))
= n+(if n=0 then 0 else H3 (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+ H3 0 else if n=2 then n+ H3 1 else if n=3 then n+ H3 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 = H3 n : le point fixe est atteint
![Page 33: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/33.jpg)
Interprétation Abstraite
L’interprétation abstraite est une technique pour calculer des propriétés d’un 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
![Page 34: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/34.jpg)
Interprétation Abstraite: cadre1. Une sémantique dénotationnelle compositionnelle
[[ . ]] : programme Domaine standard A
Chaque construction f du langage a sa sémantique fA
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 fA(a) fB(b)
- continue : si supi(ai) = a, supi(bi) = b, iNN ai bi, alors a b
W470
![Page 35: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/35.jpg)
Exemple: Signe
On veut que le compilateur calcule, si possible, le signe des expressions entières
Domaine standard = ZZ
Domaine abstrait = {0, p, n, ?}
0 représente 0: 0 p représente les nombres positifs: z p ssiz>0
n représente les nombres négatifs: z n ssi z<0
? représente tout le domaine abstrait: z
n 0 p
?
![Page 36: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/36.jpg)
Exemple: Signe: fonctions abstraites
On construit les meilleures approximations des 4 opérations:
* p 0 n ?
p p 0 n ?
0 0 0 0 0
nn 0 p ?
? ? 0 ? ?
+ p 0 n ?
p p p ? ?
0 p 0 n ?
nn n ?
? ? ? ? ?
p 0 n ?
p ? p p ?
0 n 0 p ?
nn n ? ?
? ? ? ? ?
/ p 0 n ?
p p err n ?
0 0 err 0 0
nn err p ?
? ? err ? ?
est continue (les chaînes sont finies).
![Page 37: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/37.jpg)
Exemple: Signe: point fixe
i := 1;
f := 1;
while i<v do begin
f := i*f;
i := i+1;
end
Le compilateur utilise des états abstraits
Si n est positif à l’entrée de ce programme, il calcule que f et n seront positifs à la sortie.
Avant la boucle:
Après la boucle, par point fixe:
i f v
p p p
i f v
p p p
![Page 38: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/38.jpg)
D’autres applications de l’interprétation abstraite
L’interpré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)
![Page 39: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/39.jpg)
Sémantique des grammaires non contextuelles
Le sens d’un non-terminal X dans une grammaire G = (S, VN, VT, P)
est l’ensemble des textes corrects pour X, càd {w VT* | 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 VN
P(VT*) ) 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:
A1 (X) A2 (X) ssi X VN, A1 (X) A2 (X)
![Page 40: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/40.jpg)
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 Li ).M = {x.y | i. xLi et yM} = i ( Li .M)
Donc le langage peut se calculer par point fixe.
![Page 41: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/41.jpg)
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 = {ai bj ci | i+j n-3},
B = { bj | j n-2}, C= si n 1, C= sinon }
On fait la preuve par inductionPuis le passage à la limite:fix [[P]] = { A = {ai bj ci }, B = { bj }, C= }
![Page 42: Sémantique dénotationnelle Idée : Le sens dun programme est un objet mathématique (souvent, une fonction)](https://reader034.vdocuments.pub/reader034/viewer/2022051819/551d9db9497959293b8dd014/html5/thumbnails/42.jpg)
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.