Principes des lang. de progr.
INE 11
Michel Mauny
Inria-Paris
prénom.nom@inria.fr
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 1 / 24
Sémantique dénotationnelle
1 Sémantique dénotationnelle directe Domaines
Fonctions sémantiques
Instructions et aspects impératifs
2 Sémantique dénotationnelle à continuations
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 2 / 24
Sémantique
Syntaxe / sémantique notation
sens, dénotation Le sens d’un programme
ce qu’il calcule
l’objet mathématique qu’il représente comment il le calcule
Sur quoi faire reposer le sens d’un programme ? une description en langue naturelle
interprète : le langage d’implémentation de l’interprète
compilateur (traducteur) : langage cible, langage d’implémentation du compilateur
un formalisme mathématique
Le sens d’un langage doit (devrait) être
complet, cohérent, précis, non ambigu, concis, compréhensible Sémantique formelle
standardisation (non ambigu, précis, concis)
référence pour implémenteurs, contre les implémentations divergences du même langage
implémentation automatique : sémantique exécutable
référence pour programmeurs : savoir «ce que ça fait» sans le tester preuves de correction de programmes : raisonnement mathématique impossible sans sémantique formelle
meilleure compréhension de la conception des langages (distinguer ce qui est compliqué de ce qui ne l’est pas)
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 4 / 24
Sémantique(s)
Sémantique dénotationnelle[C. Strachey, D. Scott, ˜1960]
définir l’objet mathématique représenté par un programme syntaxe→domaines mathématiques
Sémantique axiomatique[T. Hoare, 1969]
définir l’action d’une construction par les propriétés de la mémoire avant et après son exécution
{p}S{q}, préconditions, postconditions Sémantique opérationnelle[G. Plotkin, 1981]
décrire le mécanisme d’évaluation/d’exécution des programmes plus précise que la sémantique dénotationnelle
⇒ présentation de la S.O. dans un des cours suivants
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 5 / 24
PCF
Catégories
c∈Const Constantes, incluant les fonctions primitives x∈Id Identificateurs
e∈Exp Expressions
Expressions e ::= c|x
| e1+e2|e1=e2|ife1 thene2 elsee3
| letx=e1 ine2|let rec x=e1 ine2
| (funx → e)|e1e2
Exemple
letrec fact=funn→ if n≤0 then1else n∗ fact(n−1) in fact(5)
Domaines
Domainespour les valeurs,etc.: ordres partiels complets (CPO) éléments partiellement indéfinis, voire totalement indéfini (⊥) relation d’ordre partiel «moins défini que»
toute chaîne croissante a une borne sup.
Autorise quelques définitions récursives «osées»
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 7 / 24
Domaines pour PCF
DomaineD
• INT : le domaine des entiers
• BOOL = {true,false}
• D = INT + BOOL + FUN: le domaine des valeurs
• FUN = D→D : les fonctions sur D
Environnements: fonctions associant des valeurs de D à des identificateurs de Id
• ENV = Id→D
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 8 / 24
Fonctions sémantiques
Sémantique des expressions
E : Exp→ENV→D Définition
E[[c]]ρ=dc pour chaquec∈Const E[[x]]ρ=ρ[[x]], pour x∈Id
E[[e1+e2]]ρ=E[[e1]]ρ+DE[[e2]]ρ E[[e1e2]]ρ= (E[[e1]]ρ)(E[[e2]]ρ)
E[[e1=e2]]ρ=true siE[[e1]]ρ=E[[e2]]ρ
=false dans le cas contraire E[[ife1 thene2 elsee3]]ρ=
siE[[e1]]ρ=truealorsE[[e2]]ρsinonE[[e3]]ρ
Sémantique des expressions(suite)
E[[let x=e1 ine2]]ρ=E[[e2]](ρ⊕[x 7→ E[[e1]]ρ]) E[[let rec f =e1 ine2]]ρ=E[[e2]]ρ0
oùρ0=ρ⊕[f 7→ E[[e1]]ρ0]
E[[funx → e]]ρ=f telle que f(v) =E[[e]](ρ⊕[x7→v])
Récursion: construction récursive de la valeur sémantique
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 10 / 24
PCF avec affectations
Langage enrichi par
des références (locations) correspondant aux variables une mémoire qui fait correspondre des valeurs à des locations Syntaxe
e∈Exp,défini pare ::= . . . |s;e s∈Stm,défini pars ::= x:=e|s1;s2
Domaines sémantiques
D = INT + BOOL + FUN
avec FUN = (D×STORE)→(D×STORE) et STORE = LOC→D
ENV = ID→LOC LOC
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 11 / 24
PCF avec affectations
Fonctions sémantiques
E : Exp→ENV→STORE→(D× STORE) S : Stm→ENV→STORE→STORE Définitions
E[[c]]ρσ= (dc, σ)pour chaquec∈Const
E[[x]]ρσ= (σ(ρ[[x]]), σ), pour x∈Id
E[[e1+e2]]ρσ=
soit(n1, σ1) =E[[e1]]ρσ soit(n2, σ2) =E[[e2]]ρσ1 (n1+n2, σ2)
PCF avec affectations
Définitions(suite)
E[[e1e2]]ρσ=
soit(f, σ1) =E[[e1]]ρσ soit(v, σ2) =E[[e2]]ρσ1 (f(v), σ2)
E[[e1=e2]]ρσ=
soit(v1, σ1) =E[[e1]]ρσ soit(v2, σ2) =E[[e2]]ρσ1
siv1=v2alors (true,σ2) sinon (false,σ2)
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 13 / 24
PCF avec affectations
Définitions(suite)
E[[ife1 thene2 elsee3]]ρσ= soit(v1, σ1) =E[[e1]]ρσ
ifv1=truethenE[[e2]]ρσ1elseE[[e3]]ρσ1
E[[let x=e1 ine2]]ρσ= soit(v1, σ1) =E[[e1]]ρσ soitl1une nouvelle référence E[[e2]](ρ⊕[x7→l1])(σ1⊕[l17→v1])
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 14 / 24
PCF avec affectations
Définitions(fin)
E[[let rec x=e1 ine2]]ρσ= soitl1une nouvelle référence
soit(v1, σ1) =E[[e1]](ρ⊕[x7→l1])(σ) E[[e2]](ρ⊕[x7→l1])(σ1⊕[l17→v1])
σ(l1)est indéfinie : le calcul dee1ne doit pas utiliserx
E[[funx → e]]ρσ=f telle quef(v, σ0) =
soitlx une nouvelle référence E[[e]](ρ⊕[x 7→lx])(σ0⊕[lx7→v])
Définitions(fin) E[[s;e]]ρσ=
soitσ0=S[[s]]ρσ E[[e]]ρσ0
S[[x:=e]]ρσ= soitlx =ρ[[x]]
soit(v, σ0) =E[[e]]ρσ σ0⊕[lx 7→v]
S[[s1;s2]]ρσ= soitσ1=S[[s1]]ρσ S[[s2]]ρσ1
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 16 / 24
PCF avec affectations et goto
Modéliser le calcul en identifiant le reste du calcul: la continuation goto:changer le reste du calcul
étiquette : identifier ce point de programme comme continuation potentielle
C’est quoi, le calcul ?
c’est transformer le «résultat» courant en résultat final l’état courant de la mémoire
la valeur courante Continuation
continuation d’instructions : Cc = STORE→STORE continuation d’expression :
Ec = (D×STORE)→(D×STORE)
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 17 / 24
PCF avec affectations et goto
Domaines et fonctions sémantiques
E : Exp→ENV→STORE→Ec→(D×STORE) S : Stm→ENV→STORE→Cc→STORE
Valeurs fonctionnellesreçoivent une continuation
FUN = (D×STORE)→Ec→(D×STORE)
Les labels sont de simples identificateurs dont les valeurs (dans la mémoire) sont des continuations d’instructions. On aura donc :
D = INT + BOOL + FUN + Cc
PCF avec affectations et goto
Syntaxe
s∈Stm ets::=x:=e|s1;s2|lab:s |gotolab où
lab∈Id
dans “lab:s”,sest la portée delab, et peut donc contenir “gotolab”.
Définition
E[[c]]ρσk=k (dc, σ)pourc∈Const
E[[x]]ρσk=k (σ(ρ[[x]]), σ), pourx∈Id
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 19 / 24
PCF avec affectations et goto
Définition(suite)
E[[e1+e2]]ρσk = E[[e1]]ρσk1
oùk1 est définie park1(n1, σ1) =E[[e2]]ρσ1(k2 n1) oùk2 n1(n2, σ2) =k(n1+n2, σ2)
E[[e1e2]]ρσk = E[[e1]]ρσk1
oùk1(v1, σ1) =E[[e2]]ρσ1(k2v1) oùk2 v1 (v2, σ2) =v1(v2, σ2)k
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 20 / 24
PCF avec affectations et goto
Définition(suite)
E[[e1=e2]]ρσk =... laissé en exercice
E[[ife1 thene2 elsee3]]ρσk =... laissé en exercice E[[let x=e1 ine2]]ρσk =... laissé en exercice E[[let rec x=e1 ine2]]ρσk=... laissé en exercice
E[[funx → e]]ρσk = k(f, σ)
oùf est définie par
f (v, σ0)k0=E[[e]](ρ⊕[x7→lx])(σ0⊕[lx 7→v])k0 oùlx est une nouvelle référence
Définition(suite)
E[[s;e]]ρσk=
soitk0 définie park0(σ0) =E[[e]]ρσ0k S[[s]]ρσk0
S[[lab:s]]ρσk=
soitl une nouvelle référence soitk0 définie récursivement par
k0(σ0) =S[[s]](ρ⊕[lab7→l])(σ0⊕[l7→k0])k k0σ
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 22 / 24
PCF avec affectations et goto
Définition(fin) S[[x:=e]]ρσk=
soitk0 définie park0(v0, σ0) =k(σ0⊕[ρ[[x]]7→v0]) E[[e]]ρσk0
S[[s1;s2]]ρσk = S[[s1]]ρσk0
oùk0est définie park0(σ0) =S[[s2]]ρσ0k
S[[goto lab]]ρσk= k0σ
oùk0=σ(ρ[[lab]])
Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 23 / 24
Conclusion
Vision mathématique Ignore le calcul
Styles fonctionnels fonctions sémantiques continuations
À mettre en œuvre dans un langage fonctionnel de programmation