programming languages and compiler design
TRANSCRIPT
![Page 1: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/1.jpg)
Programming Languages and CompilerDesign
Programming Language SemanticsCompiler Design Techniques
Yassine Lakhnech & Laurent Mounier
{lakhnech,mounier}@imag.fr
http://www-verimag.imag.fr/ lakhnech
http://www-verimag.imag.fr/ mounier.
Master of Sciences in Informatics at Grenoble (MoSIG)
Grenoble Universites
(Universite Joseph Fourier, Grenoble INP)
Yassine Lakhnech, Semantique Start C3 C4 – p.1/??
![Page 2: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/2.jpg)
Teachers
Lecture sessions
• Yassine Lakhnech
• Laurent Mounier
Exercice sessions (TD)
• Yliés Falcone
Web page:http://www-verimag.imag.fr/ lakhnech
Office location:Verimag Lab, CTL building, av. de Vignate, Gières
Yassine Lakhnech, Semantique Start C3 C4 – p.2/??
![Page 3: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/3.jpg)
Course objectives
• Programming languages, and their description
• General compiler architecture
• Some more detailed compiler techniques
Yassine Lakhnech, Semantique Start C3 C4 – p.3/??
![Page 4: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/4.jpg)
References
A. Aho, R. Sethi and J. Ullman Compilers: Principles,techniques and tools InterEditions, 1989
H. R. Nielson and F. Nielson. Semantics with Applications: AnAppetizer. Springer, March 2007. ISBN 978-1-84628-691-9
W. Waite and G. Goos. Compiler Construction Springer Verlag,1984
R. Wilhelm and D. Maurer. Compilers - Theory, construction,generation Masson 1994
Yassine Lakhnech, Semantique Start C3 C4 – p.4/??
![Page 5: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/5.jpg)
Compiler: what do we expect ?
Compilersource pgm S
langage Ls
target pgm T
language Lt
Expected Properties ?
•
•
•
Yassine Lakhnech, Semantique Start C3 C4 – p.5/??
![Page 6: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/6.jpg)
Compiler: what do we expect ?
Compilersource pgm S
langage Ls
target pgm T
language Lt
Expected Properties ?
•• correctness:execution of T should preserve the semantics of S
• efficiency:T should be optimized w.r.t. some execution resources(time, memory, energy, etc.)
• “user-friendness”: errors in S should be accurately reported• completeness: any correct Ls-program should be accepted
Yassine Lakhnech, Semantique Start C3 C4 – p.5/??
![Page 7: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/7.jpg)
Many programming langage paradigms . . .
Imperative langagesFortran, Algol-xx, Pascal, C, Ada, Java, etccontrol structure, explicit memory assignment, expressions
Functional languagesML, CAML, LISP, Scheme, etcterm reduction, function evaluation
Object-oriented langagesJava, Ada, Eiffel, ...objets, classes, types, heritage, polymorphism, . . .
Logical languagesPrologresolution, unification, predicate calculus, . . .
etc.
Yassine Lakhnech, Semantique Start C3 C4 – p.6/??
![Page 8: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/8.jpg)
. . . and many architectures to target !
• CISC• RISC• VLIW, multi-processor architectures• dedicated processors (DSP, . . . ).• etc.
Yassine Lakhnech, Semantique Start C3 C4 – p.7/??
![Page 9: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/9.jpg)
We will mainly focus on:
Imperative languages
• data structures• basic types (integers, characters, pointers, etc)• user-defined types (enumeration, unions, arrays, . . . )
• control structures• assignements• iterations, conditionals, sequence• nested blocks, sub-programs
“Standart” general-purpose machine architecture: (e.g. ARM, iX86)• heap, stack and registers• arithmetic and logical binary operations• conditional branches
Yassine Lakhnech, Semantique Start C3 C4 – p.8/??
![Page 10: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/10.jpg)
Language Description
For a programming language P
Lexicon L: words of P→ a regular language over P alphabet
Syntax S: sentences of P→ a context-free language over L
Static semantic (e.g., typing): “meaningful” sentences of P→ subset of S, defined by inference rules or attributegrammars
Dynamic semantic: the meaning of P programs→ transition relation, predicate transformers, partialfunctions
Yassine Lakhnech, Semantique Start C3 C4 – p.9/??
![Page 11: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/11.jpg)
Compiler architecture
source pgm lexical analysis
syntactic analysis
semantic analysis
optimisation
code generation target pgm
intermediate code
AST + symbol table
AST + symbol table
tokens
Yassine Lakhnech, Semantique Start C3 C4 – p.10/??
![Page 12: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/12.jpg)
Lexical analysis
Input: sequence of characters
Output: sequence of lexical unit classes
1. compute the longest sequence ∈ a given lexical classlexical classes (token): constants, identifiers, keywords,operators, separators, . . .
2. skip the comments
3. special token: error
Formal tool: regular languages
(deterministic) finite automata ⇔ regular expressions
Yassine Lakhnech, Semantique Start C3 C4 – p.11/??
![Page 13: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/13.jpg)
Syntactic Analysis (parsing)
Input: sequence of tokens
Output: abstract syntax tree (AST) + symbol table
1. syntactic analysis of the input sequence
2. AST construction (from a derivation tree)
3. insert the identifiers in a symbol table
Formal tools: context-free languages (CFG)Pushdown automata, context-free grammars
deterministic pushdown automata ⇔ strict subset of CFG
Yassine Lakhnech, Semantique Start C3 C4 – p.12/??
![Page 14: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/14.jpg)
Semantic analysis
Input: : Abstract syntax tree (AST)
Output: : enriched AST
• name identification:→ bind use-def occurrences
• type verification and/or type inference
⇒ traversals and modifications of the AST
Yassine Lakhnech, Semantique Start C3 C4 – p.13/??
![Page 15: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/15.jpg)
Code generation
Input: AST
Output: intermediate code, machine code
• based on a systematic translation functions f
• should ensure that:
Semsource(P) = Semcible(f(P))
• in practice: several intermediate code levels(to ease the optimisation steps)
Yassine Lakhnech, Semantique Start C3 C4 – p.14/??
![Page 16: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/16.jpg)
Optimisation
Input/Output: intermediate code
• several criteria: execution time, size of the code, energy
• several optimization levels (source level vs machine level)
• several techniques:• data-flow analysis• abstract interpretation• typing systems• etc.
Yassine Lakhnech, Semantique Start C3 C4 – p.15/??
![Page 17: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/17.jpg)
Programming language semantics
Yassine Lakhnech, Semantique Start C3 C4 – p.16/??
![Page 18: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/18.jpg)
Motivation
Why do we need to study programming language semantics ?Semantics is essential to:
• understand programming languages• validate programs• write program specifications• write compilers (and program transformers)• classify programming languages
Why do we need to formalise this semantics ?
Yassine Lakhnech, Semantique Start C3 C4 – p.17/??
![Page 19: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/19.jpg)
Example: static vs. dynamic binding
Program Static_Dynamicvar a := 1;
proc p(x);
begin
a := x + 1;write(a)
end;
proc q
var a := 2;
begin
p(a)
end;
Yassine Lakhnech, Semantique Start C3 C4 – p.18/??
![Page 20: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/20.jpg)
Example: static vs. dynamic binding
Program Static_Dynamicvar a := 1;
proc p(x);
begin
a := x + 1;write(x)
end;
proc q
var a := 2;
begin
p(a)
end;
what value is printed ?Yassine Lakhnech, Semantique Start C3 C4 – p.18/??
![Page 21: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/21.jpg)
Example: parameters
Program value_referencevar a;
proc p(x);
begin
a := x + 1;write(a);write(x)
end;
begin
a := 2; p(a);write(a)
end;
Yassine Lakhnech, Semantique Start C3 C4 – p.19/??
![Page 22: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/22.jpg)
Example: parameters
Program value_referencevar a;
proc p(x);
begin
x := x + 1;write(a);write(x)
end;
begin
a := 2; p(a);write(a)
end;
What values are printed ?
Yassine Lakhnech, Semantique Start C3 C4 – p.19/??
![Page 23: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/23.jpg)
Example: parameters
Program value_referencevar a;
proc p(x);
begin
x := x + 1;write(a);write(x)
end;
begin
a := 2; p(a);write(a)
end;
2 3 2 , if call-by-value
3 3 3, if call-by-reference
Yassine Lakhnech, Semantique Start C3 C4 – p.19/??
![Page 24: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/24.jpg)
Course overview
• Semantic styles• Natural operational semantic• Axiomatic semantics (Hoare logic)• Denotational semantics
• Languages considered:• imperative• functional
Yassine Lakhnech, Semantique Start C3 C4 – p.20/??
![Page 25: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/25.jpg)
TheWhile language
x : variableS : statementa : arithmetic expressionb : boolean expression
S ::= x := a | skip | S1;S2 |
if b then S1 else S2
while b do S od
Yassine Lakhnech, Semantique Start C3 C4 – p.21/??
![Page 26: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/26.jpg)
syntactic categories 1
• Numbersn ∈ Num = {0, · · · , 9}+
• Variables
x ∈ Var
• Arithmetic expressions
a ∈ Aexp
a := n | x | a1 + a2 | a1 ∗ a2 | a1 − a2
Yassine Lakhnech, Semantique Start C3 C4 – p.22/??
![Page 27: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/27.jpg)
Syntactic categories 2
• Boolean expressions
b ∈ Bexp
b := true | false | a1 = a2 | a1 ≤ a2 | ¬b | b1 ∧ b2
• Statements
S ∈ Stm
S ::= x := a | skip | S1;S2 |
if b then S1 else S2
while b do S od
Yassine Lakhnech, Semantique Start C3 C4 – p.23/??
![Page 28: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/28.jpg)
Concrete vs. abstract syntax
• The term S1;S2 represents the tree those root is ;, left childis S1 tree, and right child is S2 tree.
• Parenthesis shall be used to avoid ambiguities. Example :
S1, (S2;S3) and (S1;S2);S3
Yassine Lakhnech, Semantique Start C3 C4 – p.24/??
![Page 29: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/29.jpg)
Semantic domains
Integers : Z
Booleans : B
States :State = Var → Z
Let v ∈ Z. Then σ[y 7→ v] denotes state σ′ such that:
σ′(x) =
{
σ(x) if x 6= y
v otherwise
Yassine Lakhnech, Semantique Start C3 C4 – p.25/??
![Page 30: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/30.jpg)
Semantic functions 1
• Digits : integersN : Num → Z
• Arithmetic expressions: for each state, a value in ZA : Aexp → (State → Z)
Yassine Lakhnech, Semantique Start C3 C4 – p.26/??
![Page 31: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/31.jpg)
Semantic functions 2
• Boolean expressions: for each state, a value in BB : Bexp → (State → B)
• Statements:
S : Stm → (Statepart.−→ State)
Yassine Lakhnech, Semantique Start C3 C4 – p.27/??
![Page 32: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/32.jpg)
Arithmetic expressions semantics
N (n1 · · ·nk) = Σki=1ni · 10
k−i
A[n]σ = N [n]
A[x]σ = σ(x)
A[a1 + a2]σ = A[a1]σ +I A[a2]σ
A[a1 ∗ a2]σ = A[a1]σ ∗I A[a2]σ
A[a1 − a2]σ = A[a1]σ −I A[a2]σ
The semantics of arithmetic expressions is inductively defined
over their structure. It is a compositional semantics.
Yassine Lakhnech, Semantique Start C3 C4 – p.28/??
![Page 33: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/33.jpg)
Boolean expressions semantics
Exercice : define the semantics of boolean expressions . . .
Yassine Lakhnech, Semantique Start C3 C4 – p.29/??
![Page 34: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/34.jpg)
Various semantic styles
• Operational semantics tells how a program is executed. Ithelps to write interpreters or code generators.
• Axiomatic semantics allows to prove program properties.• Denotational semantics describes the effect of program
execution (from a given state), without telling how theprogram is executed.
Another important feature is compositionality : the semantics of a
compound program is a function of the semantics of its compo-
nents.
Yassine Lakhnech, Semantique Start C3 C4 – p.30/??
![Page 35: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/35.jpg)
Operational Semantic
An operational semantics defines a transition system.A transition system is given by:
(Γ, T,→)where
• Γ is the configuration set.• T ⊆ Γ is the set of final configurations.• →⊆ Γ × Γ is the transition relation.
Yassine Lakhnech, Semantique Start C3 C4 – p.31/??
![Page 36: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/36.jpg)
Natural semantic 1
Goal: to describe how the result of a program execution isobtained.Semantic defined by an inference system: axioms and rules.
(x := a, σ) → σ[x 7→ A[a]σ]
(skip, σ) → σ
(S1, σ) → σ′, (S2, σ′) → σ′′
(S1;S2, σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.32/??
![Page 37: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/37.jpg)
Natural semantic 2
If B[b]σ = tt then
(S1, σ) → σ′
(if b then S1 else S2, σ) → σ′
If B[b]σ = ff then
(S2, σ) → σ′
(if b then S1 else S2, σ) → σ′
If B[b]σ = tt then
(S, σ) → σ′, (while b do S od , σ′) → σ′′
(while b do S od , σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.33/??
![Page 38: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/38.jpg)
Natural semantic 3
If B[b]σ = tt then
(S, σ) → σ′, (while b do S od , σ′) → σ′′
(while b do S od , σ) → σ′′
If B[b]σ = ff then
(while b do S od , σ) → σ
Yassine Lakhnech, Semantique Start C3 C4 – p.34/??
![Page 39: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/39.jpg)
Derivation tree
• Leaves correspond to axioms• Nodes corresponds to inference rules.
Example : what is the semantic of:
1. x := 2; while x > 0 do x := x − 1 od
2. x := 2; while x > 0 do x := x + 1 od
Yassine Lakhnech, Semantique Start C3 C4 – p.35/??
![Page 40: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/40.jpg)
The natural semantics is deterministic
Théorème for all statement S ∈ Stm , for all states σ, σ′ and σ′′:
1. If (S, σ) → σ′ and (S, σ) → σ′′ then σ′ = σ′′.
2. If (S, σ) → σ′ then it does not exist an infinite derivation tree.
Preuve by induction on the structure of the derivation tree. 2
Yassine Lakhnech, Semantique Start C3 C4 – p.36/??
![Page 41: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/41.jpg)
The semantic functionSns
Sns[S]σ =
{
σ′ ; If (S, σ) → σ′
undef ; otherwise
Yassine Lakhnech, Semantique Start C3 C4 – p.37/??
![Page 42: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/42.jpg)
Blocks and procedures
Yassine Lakhnech, Semantique Start C3 C4 – p.38/??
![Page 43: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/43.jpg)
Blocks and variable declarations
S ∈ Stm
S ::= x := a | skip | S1;S2 |
if b then S1 else S2
while b do S od | begin DV ; S end
The syntactic category DecV
DV ::= var x := a; DV | ǫ
Yassine Lakhnech, Semantique Start C3 C4 – p.39/??
![Page 44: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/44.jpg)
Example
begin var y := 1;
(x := 1;
begin var x := 2; y := x + 1 end
x := y + x)
end
Yassine Lakhnech, Semantique Start C3 C4 – p.40/??
![Page 45: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/45.jpg)
Example
begin var y := 1;
(x := 1;
begin var x := 2; y := x + 1 end
x := y + x)
end
Questions:
1. Are the declaration actives during declaration execution ?
2. which order to choose when executing the declarations?
3. How to restore the initial state?
Yassine Lakhnech, Semantique Start C3 C4 – p.40/??
![Page 46: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/46.jpg)
Natural operational semantics
Notation:
• DV(DV ) denotes the set of variables declared in DV .
• σ′[X 7→ σ] = λx · if x ∈ X then σ(x) else σ′(x).
To define the semantics we define a transition system for thedeclarations and a transition system for the statements.Declarations :Configurations of the form (Dv, σ) or σ.
(DV , σ[x 7→ A[a]σ]) →D σ′
(var x := a; DV , σ) →D σ′
(ǫ, σ) →D σ
Yassine Lakhnech, Semantique Start C3 C4 – p.41/??
![Page 47: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/47.jpg)
Transition rules for the blocks
(DV , σ) →D σ′ (S, σ′) → σ′′
(begin DV ; S end, σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.42/??
![Page 48: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/48.jpg)
Transition rules for the blocks
(DV , σ) →D σ′ (S, σ′) → σ′′
(begin DV ; S end, σ) → σ′′[DV(DV ) 7→ σ]
Yassine Lakhnech, Semantique Start C3 C4 – p.42/??
![Page 49: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/49.jpg)
Transition rules for the blocks
(DV , σ) →D σ′ (S, σ′) → σ′′
(begin DV ; S end, σ) → σ′′[DV(DV ) 7→ σ]
Rule for sequential composition
(S1, σ) → σ′ (S2, σ′) → σ′′
(S1;S2, σ′) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.42/??
![Page 50: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/50.jpg)
Procedure
S ∈ Stm
S ::= x := a | skip | S1;S2 |
if b then S1 else S2
while b do S od | begin DV DP ; S end | call p
DV ::= var x := a; DV | ǫ
DP ::= proc p is S; DP | ǫ
Procedure declarations are a syntactic category called DecP .
Yassine Lakhnech, Semantique Start C3 C4 – p.43/??
![Page 51: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/51.jpg)
Example
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call q; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.44/??
![Page 52: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/52.jpg)
Example 2
Dynamic binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call q; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.45/??
![Page 53: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/53.jpg)
Example 2
Dynamic binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call p; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.45/??
![Page 54: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/54.jpg)
Example 2
Dynamic binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
x := x + 1; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.45/??
![Page 55: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/55.jpg)
Exemple 3
Dynamic binding for the variables and static binding for theprocedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call q; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.46/??
![Page 56: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/56.jpg)
Exemple 3
Dynamic binding for the variables and static binding for theprocedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call p; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.46/??
![Page 57: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/57.jpg)
Exemple 3
Dynamic binding for the variables and static binding for theprocedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
x := x ∗ 2; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.46/??
![Page 58: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/58.jpg)
Exemple 4
Static binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call q; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.47/??
![Page 59: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/59.jpg)
Exemple 4
Static binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
call p; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.47/??
![Page 60: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/60.jpg)
Exemple 4
Static binding for variables and procedures.
begin var x := 0;
proc p is x := x ∗ 2;
proc q is call p;
begin var x := 5;
proc p is x := x + 1;
x := x ∗ 2; y := x;
end;
end
Yassine Lakhnech, Semantique Start C3 C4 – p.47/??
![Page 61: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/61.jpg)
Semantics: dynamic bindings
A state associates a value (an integer) to a variable.An environment associates a value to a procedure.
EnvP = Pnamepart.−→ Stm
Configurations: (EnvP × Stm × State) ∪ State.
Yassine Lakhnech, Semantique Start C3 C4 – p.48/??
![Page 62: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/62.jpg)
Transition rules
(DV , σ) →D σ′ (upd(env,DP ), S, σ′) → σ′′
(env, begin DV DP ; S end, σ) → σ′′[DV(DV ) 7→ σ]
where• upd(env, ǫ) = env et
• upd(env, proc p is S;DP ) = upd(env[p 7→ S],DP ).
(env, env(p), σ) → σ′
(env, call p, σ) → σ′
Yassine Lakhnech, Semantique Start C3 C4 – p.49/??
![Page 63: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/63.jpg)
Rule for sequential composition
(env, S1, σ) → σ′ (env, S2, σ′) → σ′′
(env, S1;S2, σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.50/??
![Page 64: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/64.jpg)
Semantics: static binding for procedures
EnvP = Pnamepart.−→ Stm × EnvP
Configurations: (EnvP × Stm × State) ∪ State.
• upd(env, ǫ) = env and
• upd(env, proc p is S;DP ) = upd(env[p 7→ (S, env)],DP ).
begin var x := 2;
proc p is x := 0;
proc q is begin x := 1; (proc p is call p); call p end;
call q
end
Yassine Lakhnech, Semantique Start C3 C4 – p.51/??
![Page 65: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/65.jpg)
Semantics: static binding for procedures
EnvP = Pnamepart.−→ Stm × EnvP
Configurations: (EnvP × Stm × State) ∪ State.
• upd(env, ǫ) = env and
• upd(env, proc p is S;DP ) = upd(env[p 7→ (S, env)],DP ).
begin var x := 2;
proc p is x := 0;
proc q is begin x := 1; (proc p is call p); call p end;
call q
end
Yassine Lakhnech, Semantique Start C3 C4 – p.51/??
![Page 66: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/66.jpg)
Semantics: static binding for procedures
EnvP = Pnamepart.−→ Stm × EnvP
Configurations: (EnvP × Stm × State) ∪ State.
• upd(env, ǫ) = env and
• upd(env, proc p is S;DP ) = upd(env[p 7→ (S, env)],DP ).
begin var x := 2;
proc p is x := 0;
proc q is begin x := 1; (proc p is call p); call p end;
call q
end
Yassine Lakhnech, Semantique Start C3 C4 – p.51/??
![Page 67: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/67.jpg)
Transition rules
Two alternatives:
[call](env′, S, σ) → σ′
(env, call p, σ) → σ′où env(p) = (S, env′).
[callrec](env′[p 7→ (S, env′)], S, σ) → σ′
(env, call p, σ) → σ′où env(p) = (S, env′).
Yassine Lakhnech, Semantique Start C3 C4 – p.52/??
![Page 68: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/68.jpg)
Transition rules
Two alternatives:
[call](env′, S, σ) → σ′
(env, call p, σ) → σ′où env(p) = (S, env′).
[callrec](env′[p 7→ (S, env′)], S, σ) → σ′
(env, call p, σ) → σ′où env(p) = (S, env′).
Rule for sequential composition
(env, S1, σ) → σ′ (env, S2, σ′) → σ′′
(env, S1;S2, σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.52/??
![Page 69: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/69.jpg)
Semantics: static bindings
States are replaced by a symbol table and a memory:• a symbol table associates a variable (an identifier) with a
memory address.• a memory associates an address with a value.
Symbol table: variable environment:
EnvV = Varpart.→ Loc = Z
Memory : Store = Locpart.→ Z
We denote by new(sto) the smallest integer n such that sto(n) isnot defined.Intuition: function state corresponds to sto ◦ envV .
Yassine Lakhnech, Semantique Start C3 C4 – p.53/??
![Page 70: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/70.jpg)
Configurations
• Variable declarations:(DecV × Envv × Store ) ∪ (Envv × Store ).
• EnvP = Pnamepart.−→ Stm × EnvV × EnvP .
• upd(envV , envP , ǫ) = envP and• upd(envV , envP , proc p is S;DP ) =
upd(envV , envP [p 7→ (S, envV , envP )],DP ).
• Statements: (EnvV × EnvP × Stm × Store ) ∪ (EnvV × Store ).
Yassine Lakhnech, Semantique Start C3 C4 – p.54/??
![Page 71: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/71.jpg)
Semantic rules for variable declarations
(DV , envV [x 7→ new(sto)], sto[new(sto) 7→ v]) →D (env′V , sto′)
(var x := a; DV , envV , sto) →D (env′V , sto′)
where v = A[a](sto ◦ envV ).
(ǫ, envV , sto) →D (envV , sto)
Yassine Lakhnech, Semantique Start C3 C4 – p.55/??
![Page 72: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/72.jpg)
Semantic rules for statements
(envV , envP , x := a, sto) → (envV , sto[envV (x) 7→ A[a](sto◦envV )])
[call](env′V , env′P , S, sto) → (env′V , sto′)
(envV , envP , call p, sto) → (envV , sto′).
[callrec](env′V , env′P [p 7→ (S, env′V , env′P )], S, sto) → (env′V , sto′)
(envV , envP , call p, sto) → (envV , sto′)
où envP (p) = (S, env′V , env′P ).
Yassine Lakhnech, Semantique Start C3 C4 – p.56/??
![Page 73: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/73.jpg)
Semantic rules for statements
(envV , envP , x := a, sto) → (envV , sto[envV (x) 7→ A[a](sto◦envV )])
[call](env′V , env′P , S, sto) → (env′V , sto′)
(envV , envP , call p, sto) → (envV , sto′).
[callrec](env′V , env′P [p 7→ (S, env′V , env′P )], S, sto) → (env′V , sto′)
(envV , envP , call p, sto) → (envV , sto′)
où envP (p) = (S, env′V , env′P ).Rule for sequential composition
(envV , envP , S1, σ) → σ′ (envV , envP , S2, σ′) → σ′′
(envV , envP , S1;S2, σ) → σ′′
Yassine Lakhnech, Semantique Start C3 C4 – p.56/??
![Page 74: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/74.jpg)
Correct Code Generation
• Define the operational semantics of an abstract machine.More specifically a stack machine.
• Specify a code generator for the While language byinduction on the structure of programs.
• Use the operational semantics to prove correctness of thespecified code generator.
Yassine Lakhnech, Semantique Start C3 C4 – p.57/??
![Page 75: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/75.jpg)
The abstract machine AM
The operational semantics of the abstract machine AM is definedas a transition system whose configurations are triplesconsisting of:
• A list instr1, · · · , instrn of instructions. This is the code thathas to be executed.
• A stack that is used to evaluate expressions.• The memory of the machine, that is described as a mapping
from variables to Z.
The machine AM has neither registers nor accumulators. The
head of the stack plays the role of an accumulator and the rest of
the stack as registers.
Yassine Lakhnech, Semantique Start C3 C4 – p.58/??
![Page 76: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/76.jpg)
The instruction set
Instruction Effect
push-n,True,False push the constant n,tt ,ff
fetch(x) push the current value of x
store(x) pop the head of the stack and save it in x
add replace the head of the stack andthe next element by their sum
sub,mult.and,le,equal,neg similarbranch(c1,c2) if the head of the stack is tt execute c1
if it is ff , execute c2, otherwise stoploop(c1,c2) execute c1, then if the head is tt
execute c2 followed by loop(c1,c2))if it is ff stop
noop skipYassine Lakhnech, Semantique Start C3 C4 – p.59/??
![Page 77: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/77.jpg)
The transition relation
A program of the abstract machine is a sequence of instructions.The set of all programs is denoted Code .A configuration of Am is a triple (c, p,m), where c is a program, pis the content of the stack in (Z ∪B)∗ and m is a memory inState .The transition relation ⊲ is defined as follows :
(push-n · c, p,m) ⊲(c, n · p,m)
(True · c, p,m) ⊲(c, tt · p,m)
(False · c, p,m) ⊲(c, ff · p,m)
(fetch(x) · c, p,m) ⊲(c,m(x) · p,m)
(store(x) · c, v · p,m) ⊲(c, p,m[x 7→ v]) if v ∈ Z
(add · c, v1 · v2 · p,m)⊲(c, (v1 + v2) · p,m) if v1, v2 ∈ Z
(sub · c, v1 · v2 · p,m)⊲(c, (v1 − v2) · p,m) if v1, v2 ∈ Z
Yassine Lakhnech, Semantique Start C3 C4 – p.60/??
![Page 78: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/78.jpg)
The transition relation cnt.
(mult · c, v1 · v2 · p,m) ⊲(c, (v1 ∗ v2) · p,m) if v1, v2 ∈ Z(le · c, v1 · v2 · p,m) ⊲(c, (v1 ≤ v2) · p,m) if v1, v2 ∈ Z(equal · c, v1 · v2 · p,m) ⊲(c, (v1 = v2) · p,m) if v1, v2 ∈ Z
(and · c, b1 · b2 · p,m) ⊲(c, (b1 ∧ b2) · p,m) if b1, b2 ∈ B
(neg · c, b · p,m) ⊲(c, (¬b) · p,m) if b ∈ B
(branch(c1, c2) · c, tt · p,m)⊲(c1 · c, p,m)
(branch(c1, c2) · c, ff · p,m)⊲(c2 · c, p,m)
(loop(c1, c2) · c, p,m) ⊲
(c1 · branch(c2 · loop(c1, c2), noop) · c, p,m)
(noop · c, p,m) ⊲(c, p,m)
Yassine Lakhnech, Semantique Start C3 C4 – p.61/??
![Page 79: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/79.jpg)
Some properties ofAM
• The transition relation ⊲ is deterministic:
(c, p,m)⊲(c1, p1,m1)∧(c, p,m)⊲(c2, p2,m2) ⇒ (c1, p1,m1) = (c2, p2,m2)
Proof by induction on the length of c.• Extentionality of the code and the stack:
(c1, p1,m1) ⊲ (c2, p2,m2) ⇒ (c1 · c, p1 · p,m1) ⊲ (c2 · c, p2 · p,m2)
• Composability of the code :if (c1 · c2, p,m) ⊲k (ǫ, p2,m2) then there exists k′ ∈ N and aconfiguration (ǫ, p′,m′) such that (c1, p,m) ⊲k′
(ǫ, p′,m′) and(c2, p
′,m′) ⊲k−k′
(ǫ, p2,m2).
Yassine Lakhnech, Semantique Start C3 C4 – p.62/??
![Page 80: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/80.jpg)
The semantic function associated to AM
M : Code → (State → State).
M[c]m =
{
m′ ,(c, ǫ,m) ⊲∗ (ǫ, p,m′)
undef, sinon
Yassine Lakhnech, Semantique Start C3 C4 – p.63/??
![Page 81: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/81.jpg)
Code Generation
We need to define three fonctions :
1. CA : Aexp → Code
2. CB : Bexp → Code
3. CS : Stm → Code
such that for any program c ∈ Stm , we have
Sns[ ] = M◦ CS
We require that CA, CB and CS have the following properties:
1. (CA[a], ǫ, σ) ⊲∗ (ǫ,A[a]σ, σ)
2. (CB[b], ǫ, σ) ⊲∗ (ǫ,A[b]σ, σ)
3. (CS[S], ǫ, σ) ⊲∗ (ǫ, p, σ′) ssi (S, σ) → σ′
Yassine Lakhnech, Semantique Start C3 C4 – p.64/??
![Page 82: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/82.jpg)
Code Generation
Some examples for defining CA, CB et CS :• CA[n] = push-n.
• CA[x] = fetch(x)
• CA[a1 + a2] = CA[a2] · CA[a1] · add
• CB[true] = True
• CS[x := a] = CA[a] · store(x)
• CS[S1;S2] = CS[S1] · CS[S2]
Yassine Lakhnech, Semantique Start C3 C4 – p.65/??
![Page 83: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/83.jpg)
Exemple
Yassine Lakhnech, Semantique Start C3 C4 – p.66/??
![Page 84: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/84.jpg)
Axiomatic Semantics: Hoare Logic
Yassine Lakhnech, Semantique Start C3 C4 – p.67/??
![Page 85: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/85.jpg)
Partial and Total Program Correctness
The aim is to specify the behavior of a program as aninput/output relation.Example :
Fact:y := 1;
while ¬(x = 1) do (y := y ∗ x;x := x − 1) od
Partial correctnessIf the initial value of x is n > 0 and if the program terminatesthen the final value of y has to be n!.Total correctness
If the initial value of x is n > 0 then the program must terminate
and the final value of y has to be n!.
Yassine Lakhnech, Semantique Start C3 C4 – p.68/??
![Page 86: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/86.jpg)
Semantic verification
Fact:y := 1;
while ¬(x = 1) do (y := y ∗ x;x := x − 1) od
(Fact, σ) → σ′
⇓
σ′(y) = σ(x)! et σ(x) > 0
Three steps
1. Correctness of the body of the loop
2. Correction of the loop
3. Correction of the program
Each time, we have to investigate the semantic derivation tree.Yassine Lakhnech, Semantique Start C3 C4 – p.69/??
![Page 87: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/87.jpg)
Hoare’s triple
Example :
{x = n ∧ n > 0}
y := 1;
while ¬(x = 1) do (y := y ∗ x;x := x − 1) od
{y = n! ∧ n > 0}
• Precondition: {x = n ∧ n > 0}
• Postcondition: {y = n! ∧ n > 0}.
We will use first-order logic to express pre- and post-conditions.
Yassine Lakhnech, Semantique Start C3 C4 – p.70/??
![Page 88: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/88.jpg)
Total and partial correctness
The Hoare triple{P}S{Q}
i svalied, denoted by |= {P}S{Q}, if for every states σ, σ′:
• if σ |= P and (S, σ) → σ′ then
• σ′ |= Q.
We say S is partially correct with respect to P and Q.The Hoare triple
[P ]S[Q]
is valied, denoted by |= [P ]S[Q], if for every σ:
• if σ |= P then the program terminates and
• for every state σ′: if (S, σ) → σ′ then σ′ |= Q.
We say S is totally correct eith respect to P and Q.Yassine Lakhnech, Semantique Start C3 C4 – p.71/??
![Page 89: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/89.jpg)
Hoare calculus
Axioms:{P [a/x]}x := a{P}
{P}skip{P}
Inference rulesComposition:
{P}S1{Q} {Q}S2{R}
{P}S1;S2{R}
Conditional:{b ∧ P}S1{Q}
{¬b ∧ P}S2{Q}
{P}if b then S1 else S2{Q}
Yassine Lakhnech, Semantique Start C3 C4 – p.72/??
![Page 90: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/90.jpg)
Hoare Logic for partial correctness
While:{b ∧ P}S{P}
{P}while b do S od {¬b ∧ P}
Consequence:
{P ′}S{Q′}
{P}S{Q}Si |= P ⇒ P ′ et |= Q′ ⇒ Q
Notation:We write
⊢ {P}S{Q}
when {P}S{Q} is derivable from the axioms and inference rules.
Yassine Lakhnech, Semantique Start C3 C4 – p.73/??
![Page 91: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/91.jpg)
An example
We can derive• {x = n ∧ n > 0}y := 1{x = n ∧ n > 0 ∧ y = 1}
• {x = n ∧ n > 0 ∧ y = 1}while ¬(x = 1) do y := y ∗ x;x := x − 1 od
{y = n! ∧ n > 0}.
and conclude{x = n ∧ n > 0}y := 1; while ¬(x = 1) do y := y ∗ x;x := x − 1 od
{y = n! ∧ n > 0}
Yassine Lakhnech, Semantique Start C3 C4 – p.74/??
![Page 92: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/92.jpg)
The greates common divisor example
Let pgcd denote the following program:Example :
while ¬(x = y) do (if x > y then x := x − y else y := y − x) od ;
z := x
We can show
{x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.75/??
![Page 93: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/93.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 94: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/94.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
{pre}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 95: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/95.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.pre ⇒ I {I}pgcd{z = pgcd(n,m)}
{pre}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 96: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/96.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.pre ⇒ I {I}pgcd{z = pgcd(n,m)}
{pre}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 97: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/97.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
{I}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 98: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/98.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.{I}S′{x = pgcd(n,m)} {x = pgcd(n,m)}z := x{z = pgcd(n,m)}
{I}S′; z := x{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 99: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/99.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.{I}S′{x = pgcd(n,m)} {x = pgcd(n,m)}z := x{z = pgcd(n,m)}
{I}S′; z := x{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 100: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/100.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
{I}S′{x = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 101: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/101.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.{I ∧ x 6= y}S′′{I} I ∧ x = y ⇒ x = pgcd(n,m)
{I}S′{x = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 102: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/102.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.{I ∧ x 6= y}S′′{I} I ∧ x = y ⇒ x = pgcd(n,m)
{I}S′{x = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 103: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/103.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
{I ∧ x 6= y}if x > y then x := x − y else y := y − x{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 104: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/104.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.{I ∧ x 6= y ∧ x > y}x := x − y{I} {I ∧ x 6= y ∧ ¬(x > y)}y := y − x{I}
{I ∧ x 6= y}if x > y then x := x − y else y := y − x{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 105: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/105.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.(I ∧ x 6= y ∧ x > y) ⇒ I[x − y/x]
{I ∧ x 6= y ∧ x > y}x := x − y{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 106: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/106.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.(I ∧ x 6= y ∧ x > y) ⇒ I[x − y/x]
{I ∧ x 6= y ∧ x > y}x := x − y{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 107: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/107.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.(I ∧ x 6= y ∧ ¬(x > y)) ⇒ I[y − x/x]
{I ∧ x 6= y ∧ ¬(x > y)}y := y − x{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 108: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/108.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.(I ∧ x 6= y ∧ ¬(x > y)) ⇒ I[y − x/x]
{I ∧ x 6= y ∧ ¬(x > y)}y := y − x{I}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 109: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/109.jpg)
Proof in Hoare logic
Let S′′ : if x > y then x := x − y else y := y − xS′ : while ¬(x = y) do S′′ od
I : x ≥ 0 ∧ y ≥ 0 ∧ pgcd(x, y) = pgcd(m,n).pre : x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0.
{pre}pgcd{z = pgcd(n,m)}
Yassine Lakhnech, Semantique Start C3 C4 – p.76/??
![Page 110: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/110.jpg)
Soundness and Completeness
Soundness:
if ⊢ {P}S{Q} then |= {P}S{Q}, i.e.,
we can derive only valid statements.Completeness
if |= {P}S{Q} then ⊢ {P}S{Q}, i.e.,
all valid statements are derivable.
Yassine Lakhnech, Semantique Start C3 C4 – p.77/??
![Page 111: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/111.jpg)
Soundness of Hoare Logic
Théorème Hoare logic for partial correctness is sound
If ⊢ {P}S{Q} then |= {P}S{Q}
The proof is by induction on the derivation tree.
Yassine Lakhnech, Semantique Start C3 C4 – p.78/??
![Page 112: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/112.jpg)
Completeness of Hoare Logic
Théorème Hoare logic for partial correctness is complete
If |= {P}S{Q} then ⊢ {P}S{Q}
Yassine Lakhnech, Semantique Start C3 C4 – p.79/??
![Page 113: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/113.jpg)
The plan of the proof
We introduce wlp(S,Q) as follows :
• |= {P}S{Q} iff |= P ⇒ wlp(S,Q) and
• ⊢ {wlp(S,Q)}S{Q}
wlp(S,Q) describes the following set:
{σ | ∀σ′ · (S, σ) → σ′ ⇒ σ′ |= Q}
For now, we assume that we can express wlp(S,Q) in first-orderlogic.The proof of the first item is immediate.The second item can be proved by induction of the structure ofprograms.
Yassine Lakhnech, Semantique Start C3 C4 – p.80/??
![Page 114: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/114.jpg)
Case of the While-statement
S ≡ while b do S′ od
To prove⊢ {wlp(S,Q)}S{Q}
it is enough to prove:
1. |= ¬b ∧ wlp(S,Q) ⇒ Q
2. |= b ∧ wlp(S,Q) ⇒ wlp(S′, wlp(S,Q)).
since2. {wlp(S′, wlp(S,Q))}S′{wlp(S,Q)} (I.H.)
{b ∧ wlp(S,Q)}S′{wlp(S,Q)}
{wlp(S,Q)}S{¬b ∧ wlp(S,Q)} 1.
{wlp(S,Q)}S{Q}
Yassine Lakhnech, Semantique Start C3 C4 – p.81/??
![Page 115: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/115.jpg)
Expressiveness and Decidability
We made the assumption that wlp(S,Q) is expressible in1st-order logic. Is this assumption reasonable?It is, if our 1st-order logic includes Peano arithmetic (N,+, ∗).Reason: this allows to encode sequences of integers asintegers.This is called Gëdelisation.Consequence: Hoare logic is undecidable {P}S{Q}.The complement of
{{P}S{false} | |= {P}S{Q}}
is recursively enumerable but not recursive.
Yassine Lakhnech, Semantique Start C3 C4 – p.82/??
![Page 116: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/116.jpg)
Termination Proofs
Recall that[P ]S[Q]
is valied, denoted by |= [P ]S[Q], if for every state σ:
• if σ |= P then the program terminates and
• for evry state σ′: if (S, σ) → σ′ then σ′ |= Q.
Notice that |= [P ]S[Q] iff |= {P}S{Q} and |= [P ]S[true]In other words,Total correctness = Partical correction ∧ termination.
Yassine Lakhnech, Semantique Start C3 C4 – p.83/??
![Page 117: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/117.jpg)
Well-founded ordering
Let ≤ be a relation on A.≤ is an ordering on A, if
1. ≤ is reflexive: ∀a ∈ A · a ≤ a.
2. ≤ is anti-symmetric: ∀a, b ∈ A · a ≤ b ∧ b ≤ a ⇒ a = b.
3. ≤ is transitive: ∀a, b, c ∈ A · a ≤ b ∧ b ≤ c ⇒ a ≤ c.
A total (also called linear) ordering, is an ordering such that aa ≤ b or b ≤ a, for every a, b ∈ A.Let a < b iff a ≤ b ∧ a 6= b.
An ordering ≤ is well-founded if it does not include an infinitely
decreasing chain a0 > a1 > a2 · · ·. A well-order est well-founded
linear ordering.
Yassine Lakhnech, Semantique Start C3 C4 – p.84/??
![Page 118: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/118.jpg)
Examples
• (N,≤) is well-order.
• (Σ∗,�) is a well-founded ordering.
• (2A,⊆) is a well-founded ordering.
• Let (P,≤) be an ordering. We define≤L on P ∗ × P ∗ asfollows:u ≤L v iff• u is prefixe of v or• there i < min(|u|, |v|) such that u(i) < v(i) and∀j ∈ [0, i) · u(j) = v(j).
if (P,≤) is an ordering then (P ∗,≤L) is an ordering.
Yassine Lakhnech, Semantique Start C3 C4 – p.85/??
![Page 119: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/119.jpg)
Examples
• Let (P,≤) be an ordering. We define ≤nlex on Pn × Pn as
follows:u ≤n
lex v iff• u is prefix of v or• there is i < n such that u(i) < v(i) and∀j ∈ [0, i) · u(j) = v(j).
If (P,≤) is well-founded ordering then (Pn,≤nlex) is also
well-founded ordering.• We extend ≤n
lex to words of any length u ≤lex v iff• u is prefixe of v or
• |u| = |v| and u ≤|u|lex v.
If (P,≤) is a well-founded ordering then (P ∗,≤lex) is also awell-founded ordering.
• (N∗,≤lex) is a well-founded ordering.Yassine Lakhnech, Semantique Start C3 C4 – p.86/??
![Page 120: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/120.jpg)
Loop Termination
Théorème[P ]while b do S′ od [true] est vrai
iff there is a well-founded ordering (W,≤), a functionf : State → W (ranking) and an assertion I such that
1. |= b ∧ P ⇒ I and |= {I ∧ B}S′{I}, i.e., I is an invariant ofthe loop and
2. |= [b ∧ I ∧ f = z]S′[f < z], i.e., the ranking functiondecreases at each iteration.
Yassine Lakhnech, Semantique Start C3 C4 – p.87/??
![Page 121: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/121.jpg)
Example
while ¬(x = y) do (if x > y then x := x − y else y := y − x) od ;
z := x
We showed
{x = n ∧ y = m ∧ m ≥ 0 ∧ n ≥ 0}pgcd{z = pgcd(n,m)}.
And termination?
Yassine Lakhnech, Semantique Start C3 C4 – p.88/??
![Page 122: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/122.jpg)
Denotational Semantics
Yassine Lakhnech, Semantique Start C3 C4 – p.89/??
![Page 123: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/123.jpg)
Motivation
• The operational semantics describes how a program isexecuted.
• The axiomatic semantics allows us to reason aboutprograms while abstracting the details of its execution.
• The denotational semantics describes the meaning(denotation) of a programs without describes how it isexecuted.Denotational semantics is compositional.
Yassine Lakhnech, Semantique Start C3 C4 – p.90/??
![Page 124: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/124.jpg)
Semantic clauses
Sd : Stm → (Statepart.−→ State)
Sd[[x := a]]σ = σ[x 7→ A[a]σ]
Sd[[skip]] = id
Sd[[S1;S2]] = Sd[[S2]] ◦ Sd[[S1]]
Sd[[if b then S1 else S2]] = cond(B[b],Sd[[S1]],Sd[[S2]]) where
cond(p, f, g)σ =
{
f(σ); if p(σ) = tt
g(σ); otherwise
Yassine Lakhnech, Semantique Start C3 C4 – p.91/??
![Page 125: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/125.jpg)
Denotation of Loops
We should have
Sd[[while b do S od ]] = cond(B[B],Sd[[while b do S od ]] ◦ Sd[[S]], id)
Hence, Sd[[while b do S od ]] is a solution of the equation:
f = cond(B[B], f ◦ Sd[[S]], id)
Let F (f) = cond(B[B], f ◦ Sd[[S]], id).Does this equation has solutions? several?We shall see that this equation has always solutions and that theleast one is the one we are interested in:For every f such that f = F (f), we have:
Sd[[while b do S od ]]σ = σ′ ⇒ f(σ) = σ′.
Yassine Lakhnech, Semantique Start C3 C4 – p.92/??
![Page 126: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/126.jpg)
Fixpoints
when does F (X) = X has a solution?To answer this question we rely on
fixpoint theory
Yassine Lakhnech, Semantique Start C3 C4 – p.93/??
![Page 127: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/127.jpg)
Upper bound, lower bound and limits
Let (D,⊑) be an ordered set and X ⊆ D.
• d is a lower bound of X, if d ⊑ x, for every x ∈ X.• d is a upper bound of X, if x ⊑ d, for every x ∈ X.• d is a greatest lower bound (g.l.b.) of X, denoted by ⊓X, if d
is a lower bound X and for every lower bound y: y ⊑ x.• d is least upper bound (l.u.b.) of X, denoted by ⊔X, if d is
an upper bound of X and for every upper bound y: x ⊑ y.
Let ⊥ denote ⊓D and ⊤ denote ⊔D, when they exist.Example:
Let (2A,⊆). Then, ⊓X =⋂
x∈X
x and ⊔X =⋃
x∈X
x.
Yassine Lakhnech, Semantique Start C3 C4 – p.94/??
![Page 128: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/128.jpg)
Lattice
An ordered set (D,⊑) is a lattice, if ⊓X and ⊔X exist for everyfinite X ⊆ D.It is a complete lattice, if ⊓X and ⊔X exist for every X ⊆ D.Examples:
1. (2A,⊆) is a complete lattice.
2. ({X | X ⊆ A,X finite},⊆) is lattice that is not complte,when A is infinite.
3. Let Σ be a finite alphabet. Then, (Σ∗,�) is lattice which isnot complete
Yassine Lakhnech, Semantique Start C3 C4 – p.95/??
![Page 129: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/129.jpg)
Continuous functions
Let (D,⊑) be an ordered set. A chain (ω-chain) is anenumerable subset X ⊆ D such that ⊑ is total on X. I.e., theelements of X can be ordered x0 ⊑ x1 · · ·.Definition: Let (D,⊑) and (D′,⊑′) be ordered sets.A function f : D → D′ is continuous, if
1. it is monotonic: d1 ⊑ d2 implies f(d1) ⊑′ f(d2) and
2. it is ⊔-additive: f(⊔X) = ⊔′f(X), for every chain X.
Yassine Lakhnech, Semantique Start C3 C4 – p.96/??
![Page 130: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/130.jpg)
The Theorems of Knaster-Tarski and Kleene
Théorème Let (D,⊑) be a complete lattice and f : D → D.
• Knaster-Tarski. If f is monotonic then ⊓{x | f(x) ⊑ x} is theleast fixpoint of f .
• Kleene. If f is continuous then⊔
i≥0
f i(⊥) is the least fixpoint
of f , where⊔
i≥0
f i(⊥) =⊔
{f i(⊥) | i ≥ 0}.
Yassine Lakhnech, Semantique Start C3 C4 – p.97/??
![Page 131: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/131.jpg)
Proof of Knaster-Tarski’s Theorem
Let (D,⊑) be a complete lattice and f : D → D be a monotonicfunction. Let A = {x | f(x) ⊑ x} and x0 = ⊓A.
1. x0 is a fixpoint(a) we show that x ∈ A implies f(x) ∈ A. Let x ∈ A. Then,
f(x) ⊑ x. Since f is monotonic, f(f(x)) ⊑ f(x). Hence,f(x) ∈ A.
(b) We show x0 ∈ A. By definition of x0, for every x ∈ A wehave x0 ⊑ x. Hence,since f is monotonic, for everyx ∈ A we have f(x0) ⊑ f(x) ⊑ x. Therefore, f(x0) is alower bound of A. Since x0 is the greatest lower boundof A, we have f(x0) ⊑ x0. That is, x0 ∈ A.
(a) and (b) together imply f(x0) ∈ A. Hence, x0 ⊑ f(x0) andf(x0) = x0.
2. x0 is the least fixpoint. For every fixpoint of f is in A et x0 isa lower bound of A.
Yassine Lakhnech, Semantique Start C3 C4 – p.98/??
![Page 132: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/132.jpg)
Proof of Kleene’s Theorem
Let (D,⊑) be a complete lattice and f : D → D continuous.
1.⊔
i≥0
f i(⊥) is a fixpoint
f(⊔
i≥0
f i(⊥)) =⊔
i≥0
f i+1(⊥) =⊔
i≥1
f i(⊥) = ⊥⊔⊔
i≥1
f i =⊔
i≥0
f i(⊥)
2.⊔
i≥0
f i(⊥) is lower than any fixpoint f .
Let x be a fixpoint. We show by induction on i:∀i ≥ 0 · f i(⊥) ⊑ x. This implies
⊔
i≥0
f i(⊥) ⊑ x.
Yassine Lakhnech, Semantique Start C3 C4 – p.99/??
![Page 133: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/133.jpg)
Ordre sur les états
Let (Statepart.→ State ,⊑) be defined by: f ⊑ g iff for every σ, if f(σ)
is defined then g(σ) is also defined and f(σ) = g(σ).Then, ⊓X exists for every X but not ⊔X.For this reason, let
State⊤⊥ = State ∪ {⊤} ∪ {⊥}
equipped with the following order: σ ⊑ σ′ iff
1. σ′ = ⊤ or
2. σ = ⊥ or
3. σ = σ′
We can show that
(State⊤⊥,⊑) is a complete lattice.
Yassine Lakhnech, Semantique Start C3 C4 – p.100/??
![Page 134: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/134.jpg)
Ordering Functions
Let D be the set of total continuous functions from State⊤⊥ to
State⊤⊥.
We define the following ordering D:f ⊑ g iff f(σ) ⊑ g(σ), for every σ.
Théorème (D,⊑) is a complete lattice.
Yassine Lakhnech, Semantique Start C3 C4 – p.101/??
![Page 135: Programming Languages and Compiler Design](https://reader033.vdocument.in/reader033/viewer/2022051319/586bc3f31a28ab237a8bb289/html5/thumbnails/135.jpg)
Denotation of Loops
Notation: Let f : A → A. We denote by µf , resp. νf , the least,resp. greatest, fixpoint of f , if it exists.We define
Sd[[while b do S od ]] = µ(λf.cond(B[B], f ◦ Sd[[S]], id)).
Fixpoint theory tells us that Sd[[while b do S od ]] exists, ifλf.cond(B[B], f ◦ Sd[[S]], id)) is monotonic.
We can show that this functional is even continuous.
Yassine Lakhnech, Semantique Start C3 C4 – p.102/??