Semantics and Verification of Software Summer Semester 2019 Lecture - - PowerPoint PPT Presentation

semantics and verification of software
SMART_READER_LITE
LIVE PREVIEW

Semantics and Verification of Software Summer Semester 2019 Lecture - - PowerPoint PPT Presentation

Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics) Thomas Noll Software Modeling and Verification Group RWTH Aachen University


slide-1
SLIDE 1

Semantics and Verification of Software

Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics) Thomas Noll Software Modeling and Verification Group RWTH Aachen University

https://moves.rwth-aachen.de/teaching/ss-19/sv-sw/

slide-2
SLIDE 2

Recap: Operational Semantics of Blocks and Procedures Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

2 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-3
SLIDE 3

Recap: Operational Semantics of Blocks and Procedures Extending the Syntax Syntactic categories: Category Domain Meta variable Procedure identifiers PVar = {P, Q, . . .} P Procedure declarations PDec p Variable declarations VDec v Commands (statements) Cmd c Context-free grammar: p ::= proc P is c end;p | ε ∈ PDec v ::= var x;v | ε ∈ VDec c ::= skip | x := a | c1;c2 | if b then c1 else c2 end | while b do c end |

call P | begin v p c end ∈ Cmd

  • All used variable/procedure identifiers have to be declared
  • Identifiers declared within a block must be distinct

3 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-4
SLIDE 4

Recap: Operational Semantics of Blocks and Procedures Locations and Stores

  • So far: states Σ = {σ | σ : Var → Z}
  • Now: explicit control over all (nested) instances of a variable:

– variable environments VEnv := {ρ | ρ : Var Loc} (partial function to maintain declaredness information) – locations Loc := N – stores Sto := {σ | σ : Loc Z} (partial function to maintain allocation information)

⇒ Two-level access to a variable x ∈ Var:

  • 1. determine current memory location of x:

l := ρ(x)

  • 2. reading/writing access to σ at location l
  • Thus: previous state information represented as σ ◦ ρ

4 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-5
SLIDE 5

Recap: Operational Semantics of Blocks and Procedures Procedure Environments and Declarations

  • Effect of procedure call determined by its body and variable and procedure environment of

its declaration: PEnv := {π | π : PVar Cmd × VEnv × PEnv} denotes the set of procedure environments

  • Effect of declaration: update of environment (and store)
  • updv. : VDec × VEnv × Sto → VEnv × Sto

updvvar x;v(ρ, σ) := updvv(ρ[x → lx], σ[lx → 0]) updvε(ρ, σ) := (ρ, σ)

  • updp. : PDec × VEnv × PEnv → PEnv

updpproc P is c end;p(ρ, π) := updpp(ρ, π[P → (c, ρ, π)]) updpε(ρ, π) := π where lx := min{l ∈ Loc | σ(l) = ⊥}

5 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-6
SLIDE 6

Recap: Operational Semantics of Blocks and Procedures Execution Relation I Definition (Execution relation) For c ∈ Cmd, σ, σ′ ∈ Sto, ρ ∈ VEnv, and π ∈ PEnv, the execution relation

(ρ, π) ⊢ c, σ → σ′ (“in environment (ρ, π), statement c transforms store σ into σ′”)

is defined by the following rules:

(skip) (ρ, π) ⊢ skip, σ → σ (asgn)

a, σ ◦ ρ → z (ρ, π) ⊢ x := a, σ → σ[ρ(x) → z]

(seq) (ρ, π) ⊢ c1, σ → σ′

(ρ, π) ⊢ c2, σ′ → σ′′ (ρ, π) ⊢ c1;c2, σ → σ′′

(if-t) b, σ ◦ ρ → true

(ρ, π) ⊢ c1, σ → σ′ (ρ, π) ⊢ if b then c1 else c2 end, σ → σ′

6 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-7
SLIDE 7

Recap: Operational Semantics of Blocks and Procedures Execution Relation II Definition (Execution relation; continued)

(if-f) b, σ ◦ ρ → false

(ρ, π) ⊢ c2, σ → σ′ (ρ, π) ⊢ if b then c1 else c2 end, σ → σ′

(wh-f)

b, σ ◦ ρ → false (ρ, π) ⊢ while b do c end, σ → σ

(wh-t) b, σ ◦ ρ→true

(ρ, π)⊢c, σ→σ′ (ρ, π)⊢while b do c end, σ′→σ′′ (ρ, π) ⊢ while b do c end, σ → σ′′

(call) (ρ′, π′[P → (c, ρ′, π′)]) ⊢ c, σ → σ′

(ρ, π) ⊢ call P, σ → σ′

if π(P) = (c, ρ′, π′)

(block)

updvv(ρ, σ) = (ρ′, σ′) updpp(ρ′, π) = π′

(ρ′, π′) ⊢ c, σ′ → σ′′ (ρ, π) ⊢ begin v p c end, σ → σ′′

7 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-8
SLIDE 8

Denotational Semantics of Blocks and Procedures Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

8 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-9
SLIDE 9

Denotational Semantics of Blocks and Procedures The Approach Operational semantics: “syntactic” approach

  • procedure environment holds code of procedure body
  • semantics of call = “inlining”

9 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-10
SLIDE 10

Denotational Semantics of Blocks and Procedures The Approach Operational semantics: “syntactic” approach

  • procedure environment holds code of procedure body
  • semantics of call = “inlining”

Denotational semantics: “semantic” approach

  • procedure environment holds (partial) storage transformations
  • semantics of call = function application
  • variables handled as in operational semantics (by environment and stores)
  • declarations of recursive procedures handled by fixpoint approach

9 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-11
SLIDE 11

Handling Variable Declarations Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

10 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-12
SLIDE 12

Handling Variable Declarations Handling Variable Declarations Exactly as in operational semantics:

  • Variable environments keep location information:

VEnv := {ρ | ρ : Var Loc} with Loc := N

11 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-13
SLIDE 13

Handling Variable Declarations Handling Variable Declarations Exactly as in operational semantics:

  • Variable environments keep location information:

VEnv := {ρ | ρ : Var Loc} with Loc := N

  • Effect of variable declaration: update of environment and store
  • updv. : VDec × VEnv × Sto → VEnv × Sto

updvvar x;v(ρ, σ) := updvv(ρ[x → lx], σ[lx → 0]) updvε(ρ, σ) := (ρ, σ) where lx := min{l ∈ Loc | σ(l) = ⊥}

11 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-14
SLIDE 14

Handling Variable Declarations Statement Semantics Using Variable Environments

  • First step: reformulation of Definition 6.3 using variable environments and locations

(initially disregarding procedures)

  • So far: C. : Cmd → (Σ Σ)

12 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-15
SLIDE 15

Handling Variable Declarations Statement Semantics Using Variable Environments

  • First step: reformulation of Definition 6.3 using variable environments and locations

(initially disregarding procedures)

  • So far: C. : Cmd → (Σ Σ)

Definition 15.1 (Denotational semantics using locations) The (denotational) semantic functional for statements,

C′. : Cmd → VEnv → (Sto Sto),

is given by:

C′skipρ := idSto C′x := aρ σ := σ[ρ(x) → Aa(lookup ρ σ)] C′c1;c2ρ := (C′c2ρ) ◦ (C′c1ρ) C′if b then c1 else c2 endρ := cond(Bb ◦ (lookup ρ), C′c1ρ, C′c2ρ) C′while b do c endρ := fix(Φ)

where lookup : VEnv → Sto → Σ with lookup ρ σ := σ ◦ ρ and

Φ : (Sto Sto) → (Sto Sto) : f → cond(Bb ◦ (lookup ρ), f ◦ C′cρ, idSto)

12 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-16
SLIDE 16

Handling Procedures Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

13 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-17
SLIDE 17

Handling Procedures Procedure Environments

  • Procedure environments now store semantic information:

– So far: PEnv := {π | π : PVar Cmd × VEnv × PEnv} – Now: PEnv′ := {π | π : PVar (Sto Sto)}, to be used in

C′′. : Cmd → VEnv → PEnv′ → (Sto Sto)

14 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-18
SLIDE 18

Handling Procedures Procedure Environments

  • Procedure environments now store semantic information:

– So far: PEnv := {π | π : PVar Cmd × VEnv × PEnv} – Now: PEnv′ := {π | π : PVar (Sto Sto)}, to be used in

C′′. : Cmd → VEnv → PEnv′ → (Sto Sto)

  • Procedure declarations (“proc P is c end”) update procedure environment:
  • updp. : PDec × VEnv × PEnv′ → PEnv′

– non-recursive case: P not (indirectly) called within c

⇒ π(P) immediately given by C′′cρ π:

updpproc P is c end;p(ρ, π) := updpp(ρ, π[P → C′′cρ π]) – recursive case: π(P) must be a solution of equation f = C′′cρ π[P → f] (cf. fixpoint semantics of while loop – Slide 6.12): updpproc P is c end;p(ρ, π) := updpp(ρ, π[P → fix(Ψ)]) where Ψ : (Sto Sto) → (Sto Sto) : f → C′′cρ π[P → f]

14 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-19
SLIDE 19

Handling Procedures Procedure Environments

  • Procedure environments now store semantic information:

– So far: PEnv := {π | π : PVar Cmd × VEnv × PEnv} – Now: PEnv′ := {π | π : PVar (Sto Sto)}, to be used in

C′′. : Cmd → VEnv → PEnv′ → (Sto Sto)

  • Procedure declarations (“proc P is c end”) update procedure environment:
  • updp. : PDec × VEnv × PEnv′ → PEnv′

– non-recursive case: P not (indirectly) called within c

⇒ π(P) immediately given by C′′cρ π:

updpproc P is c end;p(ρ, π) := updpp(ρ, π[P → C′′cρ π]) – recursive case: π(P) must be a solution of equation f = C′′cρ π[P → f] (cf. fixpoint semantics of while loop – Slide 6.12): updpproc P is c end;p(ρ, π) := updpp(ρ, π[P → fix(Ψ)]) where Ψ : (Sto Sto) → (Sto Sto) : f → C′′cρ π[P → f] – updpε(ρ, π) := π – Remark: non-recursive is special instance of recursive case

14 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-20
SLIDE 20

Handling Procedures Statement Semantics Including Procedures

So far: C′. : Cmd → VEnv → (Sto Sto)

15 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-21
SLIDE 21

Handling Procedures Statement Semantics Including Procedures

So far: C′. : Cmd → VEnv → (Sto Sto)

Definition 15.2 (Denotational semantics with procedures)

C′′. : Cmd → VEnv → PEnv′ → (Sto Sto)

is given by

C′′skipρ π := idSto C′′x := aρ π σ := σ[ρ(x) → Aa(lookup ρ σ)] C′′c1;c2ρ π := (C′′c2ρ π) ◦ (C′′c1ρ π) C′′if b then c1 else c2 endρ π := cond(Bb ◦ (lookup ρ), C′′c1ρ π, C′′c2ρ π) C′′while b do c endρ π := fix(Φ) C′′call Pρ π := π(P) C′′begin v p c endρ π σ := C′′cρ′ π′ σ′

where updvv(ρ, σ) = (ρ′, σ′) updpp(ρ′, π) = π′ lookup ρ σ := σ ◦ ρ

Φ(f) := cond(Bb ◦ (lookup ρ), f ◦ C′′cρ π, idSto)

15 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-22
SLIDE 22

Two Examples Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

16 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-23
SLIDE 23

Two Examples Example: Non-Recursive Case Example 15.3 (Non-recursive procedure call) (also demonstrates static scoping principle) c = begin

var x; proc P is x := x - 1 end; x := 2; } c1 begin var x; x := 3; call P; end;

        

c2

end

  • Initial environments/store: ρ∅ ∈ VEnv, π∅ ∈ PEnv′, σ∅ ∈ Sto
  • Computation of C′′cρ∅ π∅ σ∅: on the board

17 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-24
SLIDE 24

Two Examples Example: Recursive Case Example 15.4 (Recursive procedure call) c = begin

proc F is if x = 1 then skip; else y := x * y; x := x - 1; call F end

                

c1

end

                        

p

y := 1; call F;

  • c2

end

  • Initial environments/store:

– ρ1 := ρ∅[x → 0, y → 1] ∈ VEnv – π∅ ∈ PEnv′ – σ1 ∈ Sto (with σ1(0) = ⊥ = σ1(1))

  • Computation of C′′cρ1 π∅ σ1:
  • n the board

18 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-25
SLIDE 25

Justification of Fixpoint Semantics Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

19 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-26
SLIDE 26

Justification of Fixpoint Semantics Justification of Fixpoint Semantics Lemma 15.5

  • 1. (cf. Lemma 7.9)

(Sto Sto, ⊑) is a CCPO where f ⊑ g iff for all σ, σ′ ∈ Sto: f(σ) = σ′ ⇒ g(σ) = σ′

20 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-27
SLIDE 27

Justification of Fixpoint Semantics Justification of Fixpoint Semantics Lemma 15.5

  • 1. (cf. Lemma 7.9)

(Sto Sto, ⊑) is a CCPO where f ⊑ g iff for all σ, σ′ ∈ Sto: f(σ) = σ′ ⇒ g(σ) = σ′

  • 2. (cf. Lemmata 7.13 and 7.16)

Let b ∈ BExp, c ∈ Cmd, ρ ∈ VEnv, π ∈ PEnv′, and Φ : (Sto Sto) → (Sto Sto) with Φ(f) := cond(Bb ◦ (lookup ρ), f ◦ C′′cρ π, idSto). Then Φ is monotonic and continuous w.r.t. (Sto Sto, ⊑).

20 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-28
SLIDE 28

Justification of Fixpoint Semantics Justification of Fixpoint Semantics Lemma 15.5

  • 1. (cf. Lemma 7.9)

(Sto Sto, ⊑) is a CCPO where f ⊑ g iff for all σ, σ′ ∈ Sto: f(σ) = σ′ ⇒ g(σ) = σ′

  • 2. (cf. Lemmata 7.13 and 7.16)

Let b ∈ BExp, c ∈ Cmd, ρ ∈ VEnv, π ∈ PEnv′, and Φ : (Sto Sto) → (Sto Sto) with Φ(f) := cond(Bb ◦ (lookup ρ), f ◦ C′′cρ π, idSto). Then Φ is monotonic and continuous w.r.t. (Sto Sto, ⊑).

  • 3. Let proc P is c end ∈ PDec, ρ ∈ VEnv, π ∈ PEnv′, and

Ψ : (Sto Sto) → (Sto Sto) with Ψ(f) := C′′cρ π[P → f].

Then Ψ is monotonic and continuous w.r.t. (Sto Sto, ⊑).

Proof.

  • mitted

20 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-29
SLIDE 29

Summary: Blocks and Procedures in Operational/Denotational Semantics Outline of Lecture 15 Recap: Operational Semantics of Blocks and Procedures Denotational Semantics of Blocks and Procedures Handling Variable Declarations Handling Procedures Two Examples Justification of Fixpoint Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

21 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-30
SLIDE 30

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-31
SLIDE 31

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures
  • Requires concept of locations to support instantiation of variables

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-32
SLIDE 32

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures
  • Requires concept of locations to support instantiation of variables
  • Static scoping: meaning of identifier determined by declaration (rather than calling) context

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-33
SLIDE 33

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures
  • Requires concept of locations to support instantiation of variables
  • Static scoping: meaning of identifier determined by declaration (rather than calling) context
  • Meaning of variable declaration: storage allocation

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-34
SLIDE 34

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures
  • Requires concept of locations to support instantiation of variables
  • Static scoping: meaning of identifier determined by declaration (rather than calling) context
  • Meaning of variable declaration: storage allocation
  • Meaning of procedure call:

– operationally: execution of procedure body

⇒ procedure environment holds body statement (“symbol table”)

– denotationally: application of procedure meaning

⇒ procedure environment holds (partial) store transformation

– recursive behaviour again handled by fixpoint approach

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)

slide-35
SLIDE 35

Summary: Blocks and Procedures in Operational/Denotational Semantics Summary: Blocks and Procedures in Operational/Denotational Semantics

  • Blocks allow to declare local variables and recursive procedures
  • Requires concept of locations to support instantiation of variables
  • Static scoping: meaning of identifier determined by declaration (rather than calling) context
  • Meaning of variable declaration: storage allocation
  • Meaning of procedure call:

– operationally: execution of procedure body

⇒ procedure environment holds body statement (“symbol table”)

– denotationally: application of procedure meaning

⇒ procedure environment holds (partial) store transformation

– recursive behaviour again handled by fixpoint approach

  • Further extensions:

– axiomatic semantics of procedures (see following lecture) – procedure parameters and higher-order procedures

22 of 22 Semantics and Verification of Software Summer Semester 2019 Lecture 15: Extension by Blocks and Procedures II (Denotational Semantics)