Program Syntax; Operational Semantics

Similar documents
Types, Expressions, and States

Forward Assignment; Strongest Postconditions

Shared Variables and Interference

Note that in this definition, n + m denotes the syntactic expression with three symbols n, +, and m, not to the number that is the sum of n and m.

Shared Variables and Interference

Lecture #13: Type Inference and Unification. Typing In the Language ML. Type Inference. Doing Type Inference

Formal Specification and Verification

3.7 Denotational Semantics

Repetition Structures

Semantics of programming languages

Denotational semantics

axiomatic semantics involving logical rules for deriving relations between preconditions and postconditions.

Introduction to the Java Basics: Control Flow Statements

Qualifying Exam Languages

Condition-Controlled Loop. Condition-Controlled Loop. If Statement. Various Forms. Conditional-Controlled Loop. Loop Caution.

Application: Programming Language Semantics

Software Engineering using Formal Methods

Lecture #23: Conversion and Type Inference

Conversion vs. Subtyping. Lecture #23: Conversion and Type Inference. Integer Conversions. Conversions: Implicit vs. Explicit. Object x = "Hello";

Program Analysis: Lecture 02 Page 1 of 32

Iteration Preview of Coming Attractions The Need to Get Your Act Together A Process for Developing While Statements

Programming Languages Third Edition

Lectures 20, 21: Axiomatic Semantics

Handout 9: Imperative Programs and State

6.001 Notes: Section 6.1

printf( Please enter another number: ); scanf( %d, &num2);

Software Engineering using Formal Methods

Applications of Formal Verification

Relation Overriding. Syntax and Semantics. Simple Semantic Domains. Operational Semantics

Definition: A data structure is a way of organizing data in a computer so that it can be used efficiently.

Chapter Goals. Contents LOOPS

Principle of Complier Design Prof. Y. N. Srikant Department of Computer Science and Automation Indian Institute of Science, Bangalore

Flow Control. CSC215 Lecture

Computer Programming. Basic Control Flow - Loops. Adapted from C++ for Everyone and Big C++ by Cay Horstmann, John Wiley & Sons

Program Verification & Testing; Review of Propositional Logic

Formal Semantics. Prof. Clarkson Fall Today s music: Down to Earth by Peter Gabriel from the WALL-E soundtrack

Control Structures. Code can be purely arithmetic assignments. At some point we will need some kind of control or decision making process to occur

Program Abstractions, Language Paradigms. CS152. Chris Pollett. Aug. 27, 2008.

Applications of Formal Verification

Applications of Formal Verification

School of Computer Science CPS109 Course Notes 5 Alexander Ferworn Updated Fall 15

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages

Goals: Define the syntax of a simple imperative language Define a semantics using natural deduction 1

Subtyping (cont) Lecture 15 CS 565 4/3/08

PROGRAM ANALYSIS & SYNTHESIS

Operational Semantics 1 / 13

CISC-124. Casting. // this would fail because we can t assign a double value to an int // variable

6.001 Notes: Section 15.1

Semantics of programming languages

Controls Structure for Repetition

Semantics of programming languages

Introduction to Denotational Semantics. Class Likes/Dislikes Survey. Dueling Semantics. Denotational Semantics Learning Goals. You re On Jeopardy!

Control Flow. COMS W1007 Introduction to Computer Science. Christopher Conway 3 June 2003

Programming Language Concepts, cs2104 Lecture 04 ( )

CS164: Midterm I. Fall 2003

CS 112 Introduction to Computing II. Wayne Snyder Computer Science Department Boston University

Math Modeling in Java: An S-I Compartment Model

CS422 - Programming Language Design

CSC 7101: Programming Language Structures 1. Operational Semantics. Winskel, Ch. 2 Slonneger and Kurtz Ch 8.4, 8.5, 8.6. Operational vs.

Assignment 4: Semantics

Lecture Transcript While and Do While Statements in C++

Finite Automata Theory and Formal Languages TMV027/DIT321 LP4 2018

CSCI 1260: Compilers and Program Analysis Steven Reiss Fall Lecture 4: Syntax Analysis I

Program development plan

CS 440: Programming Languages and Translators, Spring 2019 Mon

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Induction and Semantics in Dafny

COMP 202 Recursion. CONTENTS: Recursion. COMP Recursion 1

CS422 - Programming Language Design

x = 3 * y + 1; // x becomes 3 * y + 1 a = b = 0; // multiple assignment: a and b both get the value 0

5 The Control Structure Diagram (CSD)

Compilers CS S-01 Compiler Basics & Lexical Analysis

Formal Semantics of Programming Languages

Recursively Enumerable Languages, Turing Machines, and Decidability

Module 4: Decision-making and forming loops

School of Computer Science CPS109 Course Notes 6 Alexander Ferworn Updated Fall 15. CPS109 Course Notes 6. Alexander Ferworn

An Interesting Way to Combine Numbers

Introduction; Parsing LL Grammars

CS 370 The Pseudocode Programming Process D R. M I C H A E L J. R E A L E F A L L

General Syntax. Operators. Variables. Arithmetic. Comparison. Assignment. Boolean. Types. Syntax int i; float j = 1.35; int k = (int) j;

Control Structures. Lecture 4 COP 3014 Fall September 18, 2017

Formal Semantics of Programming Languages

If you don t, it will return the same thing as == But this may not be what you want... Several different kinds of equality to consider:

Operational Semantics. One-Slide Summary. Lecture Outline

CS251 Programming Languages Handout # 29 Prof. Lyn Turbak March 7, 2007 Wellesley College

Slide 1 CS 170 Java Programming 1 The Switch Duration: 00:00:46 Advance mode: Auto

CGS 3066: Spring 2015 JavaScript Reference

Project 2: How Parentheses and the Order of Operations Impose Structure on Expressions

CS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Dan Grossman Spring 2011

CS1 Lecture 5 Jan. 25, 2019

, has the form T i1i 2 i m. = κ i1i 2 i m. x i1. 1 xi2 2 xim m (2)

Compilers CS S-01 Compiler Basics & Lexical Analysis

CS S-01 Compiler Basics & Lexical Analysis 1

PROFESSOR: Last time, we took a look at an explicit control evaluator for Lisp, and that bridged the gap between

Types and Static Type Checking (Introducing Micro-Haskell)

Principles of Program Analysis: A Sampler of Approaches

Formal Methods. CITS5501 Software Testing and Quality Assurance

From the λ-calculus to Functional Programming Drew McDermott Posted

FRAC: Language Reference Manual

Last class. CS Principles of Programming Languages. Introduction. Outline

Transcription:

9/5 Solved Program Syntax; Operational Semantics CS 536: Science of Programming, Fall 2018 A. Why Our simple programming language is a model for the kind of constructs seen in actual languages. Step-by-step program evaluation involves a sequence of program / state snapshots. B. Outcomes At the end of today, you should be able to Describe he syntax of our simple deterministic programming language. Translate programs in our language to and from C / C++ / Java. Use operational semantics to describe step-by-step execution of programs in our language. C. Our Simple Programming Language As mentioned before, we re going to use the simplest programming language we can get away with. This is because having fewer language constructs makes it easier to analyze how a language works (E.g., we ll ignore declarations.) Notation: We ll typically use e, e for expressions, B for boolean expressions, S for statements. Our initial programming language has five kinds of statements. (We ll add more as we go along.) No-op statement The no-op statement does nothing. Syntax: skip Assignment statement Syntax: v := e or b[e₁][ ][e n ] := e For an n-dimensional array, n indexes must appear. (We can t slice arrays as in C.) Sequence statement Syntax: S ; S (semicolon is a separator) S can be a sequence, so you can get longer sequences like S₁ ; S₂ ; S₃. Longer sequences get read left-to-right. Conditional statement Syntax 1: if B then S₁ else S₂ fi Syntax 2: if B then S₁ fi is an abbreviation for if B then S₁ else skip fi. Iterative statement Syntax: while B do S₁ od We'll omit for loop and do-while loops, since we can fake them using while loops. Programs: A program is just a statement (typically a sequence statement). CS 536: Science of Programming 1 James Sasaki, 2018

Example 1: A Sample Program: The program below calculates powers of 2. When it finishes, (n < 0 y = 1) (n 0 x = n y = 2 n ). if n < 0 then " " y := 1 else " " x := 0; " " y := 1; " " while x < n " " do " " " x := x+1; " " " y := y+y " " od fi When we discuss the semantics and correctness of a program, we ll have to look at not only a whole program statement but also all its embedded sub-statements. ( All embedded sub-statements here meaning the statement, its sub-statements, its sub-sub-statements, etc.) The program in Example 1 contains 10 embedded sub-statements. In no particular order: 1. y := 1 (in the true branch of the if-else) 2. x := 0 3. y := 1 (in the false branch of the if-else) 4. x := x+1 5. y := y+y 6. x := x+1; y := y+y 7. while x < n do x := x+1; y := y+y od 8. x := 0; y := 1 (reading sequences left to right) 9. x := 0; y := 1; while x < n do x := x+1; y := y+y od 10. (The entire statement): if n < 0 then y := 1 else S fi, where S is statement 9 above. D. Relationship to Actual Languages Converting between a typical language like C or C++ or Java and our programming language is pretty straightforward. The only real issue is that since our language doesn't include assignment expressions, they have to be rewritten as assignment statements. In C, C++, and Java, As statements, z++ and ++z are identical. As an expression, ++z does z=z+1 and yields the new value of z. As an expression, z++ does z=z+1 but yields the old value of z. CS 536: Science of Programming 2 James Sasaki, 2018

Example 2 The C statement: x = a * ++z; is equivalent to our z := z+1; x := a * z Example 3 The C statement: x = a * z++; is equivalent to our temp := z; z := z+1; x := a * temp [this how compilers treat this C code]. Another equivalent: x := a * z; z := z+1 Example 4 The C loop statement: while (--x >= 0) z*=x; is equivalent to our x := x-1; while x 0 do z := z*x; x := x-1 od The decrement of x before the loop is for the first execution of --x >= 0 (it has to be done before the while test). The decrement of x at the end of the loop body is for all the other executions of --x >= 0, where we jump to the top of the loop, decrement x, and test against 0. Example 5 The C loop: while (x-- > 0) z*=x; Our equivalent: while x > 0 do x := x-1; z := z*x od; x := x-1 The decrement of x after the do is for all the x-- > 0 tests that evaluate to true. The decrement of x after the od is for the x-- > 0 test that evaluates to false. Example 6 In C: p = 1; for (x = 2 ; x < n ; ++x) p = p * x; /* Calculates p = n! for n 0 */ Our equivalent: p := 1; x := 2; while x < n do p = p * x; x := x+1 od In C, with a for loop, the increment / decrement clause gets done at the end of the loop body, as a statement, before jumping up to do the test, so this C program is equivalent to other C programs p = 1; x = 2; while (x < n) {p = p * x; ++x;) p = 1; x = 2; while (x < n) {p = p * x; x++;) p = 1; x = 2; while (x < n) p = p * x++; // Can t use ++x here Notes on Translations There can be more than one possible translation, especially for complicated programs. For the loop translation examples above, if you really have trouble believing the given equivalences, the easiest way to convince yourself that they work is to write them up as C programs and run them. Either trace their execution or toss in a bunch of print statements to show you how the variables change. E. Operational Semantics of Programs To model how our programs work, let s look at an operational semantics: We ll model execution as a sequence of configurations snapshots of the program and memory state over time. The semantics rules describe how step-by-step execution of the program changes memory. When the program is complete, we have the final memory state of execution. Definition: A configuration S, σ is an ordered pair of a program and state. CS 536: Science of Programming 3 James Sasaki, 2018

Definition: S, σ S₁, σ₁ means that executing S in state σ for one step yields S₁, σ₁. We say S₁ is the continuation of S. The exact change indicated by the arrow depends on the program. Example 1: x := x+1; y := x, {x = 5} y := x, {x = 6} because execution of the first assignment changes the value of x and leaves us with one more assignment to execute. Definition: Execution of S starting in state σ ends in (or terminates in) state τ if there is a sequence of executions steps S, σ E, τ where E is the empty program, the program that indicates there is nothing left to execute. (Think of it as like an empty string.) Example 2: x := x+1;y := x; z := y+3, {x = 5} y := x; z := y+3, {x = 6} z := y+3, {x = 6, y = 6} E, {x = 6, y = 6, z = 9}, so execution of our initial threeassignment program starting in the state where x is 5 ends with a state where x and y are 6 and z is 9. Note: Converges to is equivalent to Terminates in. If we re not particularly interested in what the terminating state is, we may leave it out: (Starting) in σ, S converges or S terminates in τ when run in σ. F. Operational Semantics Rules There is an operational semantics rule for each kind of statement. The skip and assignment statements complete in one step; the sequence and conditional statements require multiple steps; the iterative statement may complete in any number of steps or loop forever. Skip Statement The skip statement completes execution and does nothing to the state. skip, σ E, σ Simple Assignment Statement To execute v := e in state σ, update σ so that the value of v is the value of e in σ. v := e, σ E, σ[v σ(e)]. Example 3: x := x+1, σ = E, σ[x σ(x+1)] = E, σ[x σ(x)+1]. Example 4: x := 2*x*x + 5*x + 6, σ = E, σ[x α] where α = σ(2*x*x + 5*x + 6) = 2β² + 5β + 6 where β = σ(x). For complicated expressions, it can be helpful to introduce new symbols like α and β, but it s also correct to write E, σ[x σ(2*x*x + 5*x + 6)] = E, σ[x 2 σ(x) σ(x) + 5 σ(x) + 6)] = E, σ[x 2 σ(x)² + 5 σ(x) + 6)] Array Element Assignment Statements To execute b[e₁] := e in σ, evaluate the index e₁ to get some value α; update the function denoted by b at index α with the value of e. b[e₁] := e, σ E, σ[b[α] β] where α = σ(e₁) and β = σ(e). Example 5: If σ(x) = 8, then b[x+1] := x*5, σ = E, σ[b[α] β] = E, σ[b[9] 40] where α = σ(x+1) = σ(x)+1 = 8+1= 9 and β = σ(x*5) = σ(x)*5 = 8*5 = 40. The multi-dimensional versions of array assignment are similar; we'll omit them. CS 536: Science of Programming 4 James Sasaki, 2018

Conditional Statements For an if-then-else statement, our one step is to evaluate the test and jump to the beginning of the appropriate branch. If σ(b) = T then if B then S₁ else S₂ fi, σ S₁, σ If σ(b) = F then if B then S₁ else S₂ fi, σ S₂, σ For an if-then statement, the missing else clause defaults to else skip, so our continuation is never empty. (Though, granted, the execution of skip, σ is pretty trivial.) If σ(b) = T then if B then S₁ fi, σ S₁, σ If σ(b) = F then if B then S₁ fi, σ = if B then S₁ else skip fi, σ skip, σ Example 6: Let S if x > 0 then y := 0 fi. (Don t forget the implicit else skip here.) Then S, σ[x 5] y := 0, σ[x 5] E, σ[x 5][y 0]. (The first arrow is for the if-then; the second is for the assignment to y.) Similarly, S, σ[x -1] skip, σ[x -1] E, σ[x -1]. (The first arrow is for the if-else; the second is for the skip.) Iterative Statements For a while statement, our one step is to evaluate the test and jump either to the end of the loop or to the beginning of the loop body. (After the body we'll continue by jumping to the top of the loop.) Let W while B do S od; then If σ(b) = F, then W, σ E, σ If σ(b) = T, then W, σ S ;W, σ This last case is the only operational semantics rule that produces a continuation that's textually larger than the starting statement (which is why we can get infinite loops). We ll look at a detailed example of a while loop in a bit. Sequence Statements [9/5 composition " sequence] To execute a sequence S₁ ; S₂, for one step, we execute S₁ for one step. This one step may or may not complete all of S₁. If it does, then we continue by executing S₂. If one step of execution takes S₁ to some statement T₁, then we continue by executing T₁ ; S₂. If S₁, σ E, σ₁ then S₁ ; S₂, σ S₂, σ₁ If S₁, σ T₁, σ₁ then S₁ ; S₂, σ T₁ ; S₂, σ₁ The rule for executing sequences is somewhat different from the other execution rules because it is a rule of inference if some program executes this way, then our program will execute that way. All the other execution rules are axiomatic they do not involve a recursive use of the relation. Example 7: Since x := y, σ E, σ[x σ(y)], we know x := y ; y := 2, σ y := 2, σ[x σ(y)] (Note execution isn t complete; we d need to continue with E, σ[x σ(y)][y 2].) CS 536: Science of Programming 5 James Sasaki, 2018

G. Examples of Loops Let s look at a couple of examples of loop execution to see how their semantics can be worked out. As part of that, we ll find that it involves writing a fair amount of formal manipulation using our notations. We ll do something about that in the following section. Example 8: Let W while x 0 do x := x-1 od, then (in lots of detail) W, σ[x 1] x := x-1; W, σ[x 1] (Since σ[x 1](x 0) = T) W, σ[x 0] (Evaluate assignment of x) x := x-1; W, σ[x 0] (Since σ[x 0](x 0) = T) W, σ[x -1] (Evaluate assignment of x) E, σ[x -1] (Since σ[x -1](x 0) = F) Example 9: Let S s := 0 ; i := 0 ; W, where W while i < n do S₁ od, where S₁ s := s+i+1; i := i+1. Let σ(n) = 2, then (in lots of detail) S, σ = s := 0 ; i := 0 ; W, σ i := 0 ;W, σ[s 0] (Evaluate first statement of conditional) W, σ₀ (Where σ₀ = σ[s 0][i 0]) S₁ ;W, σ₀ (Since σ₀(i < n) = T) = s := s+i+1 ; i := i+1 ; W, σ₀ (By defn of S₁ note this step is =, not ) i := i+1;w, σ₀[s 1] (Evaluate assignment of s) W, σ₁ (Let σ₁ = σ₀[s 1][i 1] and evaluate asgt of i) S₁ ;W, σ₁ (Since σ₁(i < n) = T) i := i+1 ;W, σ₁[s 3] (By defn of S₁) W, σ₂ (Where σ₂ = σ₁[s 3][i 2]) E, σ₂ (Since σ₂(i < n) = F) H. Using Multi-Step Execution to Abbreviate Executions With long executions, we often summarize multiple steps of execution to concentrate on the most interesting configurations. Definition: We say S₀, σ₀ evaluates to S n, σ n in n steps and write S₀, σ₀ n S n, σ n if there are n+1 [9/5] configurations [9/5] S₀, σ₀,, S n-1, σ n-1 such that S₀, σ₀ S₁, σ₁ S n-1, σ n-1 S n, σ n. For n = 0 we define S₀, σ₀ ⁰ S₀, σ₀. Definition: We say S₀, σ₀ evaluates to T, τ and write S₀, σ₀ * T, τ if S₀, σ₀ n T, τ for some n. An equivalent way to say all of this is that n is the n-fold composition of and * is the reflexive transitive closure of. Definition: Execution of S starting in σ terminates in (the final state) τ if S, σ * E, τ. Execution of S starting in σ terminates if it terminates in some τ. CS 536: Science of Programming 6 James Sasaki, 2018

Example 10: Let S be s := 0 ; i := n+1 ; W, where W while i > 0 do S₁ od and S₁ i := i-1; s := s+i. Since we re going to execute the body S multiple times, it will be helpful to look at a generic execution of S in an arbitrary state τ[i α][s β]. We find S₁, τ[i α][s β] [9/5] = i := i-1; s := s+i, τ[i α][s β] s := s+i, τ[s β][i α-1] E, τ[i α-1][s β + α -1]) Combining the two steps gives us S₁, τ[i α][s β] ² E, τ[i α-1][s β +α-1]. Adding the test at the top of the loop (for when α > 0) lets us give behavior of an arbitrary loop iteration: W, τ[i α][s β] ³ W, τ[i α-1][s β +α-1] Let's evaluate S when n is 2; if σ(n) = 2, then S, σ = s := 0 ; i := n+1 ; W, σ ² W, σ[s 0][i 3] ³ W, σ[i 2][s 2] ³ W, σ[i 1][s 3] ³ W, σ[i 0][s 3] E, σ[i 0][s 3] (After loop initialization) (After one iteration of the loop) (After two iterations) (After three iterations) (And now we stop, since i > 0 is false) CS 536: Science of Programming 7 James Sasaki, 2018

Illinois Institute of Technology Activity 5 Program Syntax; Operational Semantics CS 536: Science of Programming, Fall 2018 A. Why Our simple programming language is a model for the kind of constructs seen in actual languages. Step-by-step program evaluation can be described using a sequence of program / state snapshots. B. Outcomes At the end of today, you should be able to Read and write simple programs in our programming language. Translate simple programs in our language to and from C / C++ / Java. Describe the step-by-step execution of a program in our language by giving its operational semantics. C. Problems Part I: Program Syntax 1. In our simple language, if x < 0 then x := 0 fi is (syntactically) equivalent to what other statement? 2. How are if B then S₁ else S₂ fi and if B then e₁ else e₂ fi different? For Questions 3 8, translate the given C / C++ / Java program fragments into our simple programming language. 3. ++x; if (x < y) { x = y = y+1; } 4. y = z * ++x; z = z+x; 5. y = z * x++; z = z+x; >6. x = z = 0; while (x++ < n) z = z+x; 7. z = 1; for (x = n ; x >= 1 ; --x) z = z * x; 8. x = 0; while (x++ <= n) { y = (++x)*y;} Part II: Operational Semantics 9. Evaluate each of the following configurations to completion. If there are multiple steps, show each step individually. a. x := x+1, {x = 5} b. y := 2*x, {x = 6} c. x := x+1, σ (Your answer will be symbolic you'll need to include σ(x).) d. x := x+1; y := 2*x, {x = 5} CS 536-05: Science of Programming 8 James Sasaki, 2018

Illinois Institute of Technology Activity 5 10. Let S if x > 0 then x := x+1 else y := 2*x fi. a. Let σ(x) = 8 and evaluate S, σ [to completion, showing the individual steps]. What is the final state? b. Repeat, if σ(x) = 0. c. Repeat, if we don t know what σ(x) is. (Your answer will be symbolic.) 11. Let S if x > 0 then x := x/z fi. Evaluate S (starting) in σ, for each the σ below: a. σ = {x = 8, z = 3} (and don't forget, integer division truncates) b. σ = {x = -2, z = 3} 12. Let W while x < 3 do S od where S x := x+1; y := y*x. a. Show what evaluation of the body S in an arbitrary state τ does. b. Use your answer from part a to evaluate W in σ where σ x = 4 y = 1. c. Repeat part b where σ x = 1 y = 1. CS 536-05: Science of Programming 9 James Sasaki, 2018

Illinois Institute of Technology Activity 5 CS 536: Solution to Activity 5 (Program Syntax; Operational Semantics) Part I: Syntax 1. if x < 0 then x := 0 else skip fi 2. if B then S₁ else S₂ fi is a statement; its evaluation can change the state. if B then e₁ else e₂ fi is an expression; its evaluation produces a value. 3. x:=x+1; if x < y then y:=y+1; x:=y fi 4. x:=x+1; y:=z*x; z:=z+x 5. y:=z*x; x:=x+1; z:=z+x 6. z:=0; x:=z; while x < n do x:=x+1; z:=z+x od; x:=x+1 7. z:=1; x:=n; while x >= 1 do z:=z*x; x:=x-1 od 8. In the solution below, the increment of x after the od is for the x++ of the test that breaks out of the loop. For the body of the loop, the first increment of x is for the x++ in x++ <= n after testing x <= n. The immediately following increment of x is for the ++x in y = (++x)*y because the increment occurs before calculating y = x*y. You could certainly combine the two x := x+1 to just one x := x+2. x := 0; while x<= n do x := x+1; x := x+1; y := x*y od; x := x+1 Part II: Operational Semantics 9. (Calculate meanings of programs) a. x := x+1, {x = 5} E, τ where τ = {x = 5}[x {x = 5}(x+1)] = {x = 5}[x 6] = {x = 6}. b. y := 2*x, {x = 6} E, τ where τ = {x = 6}[y {x = 6}(2*x)] = {x = 6}[y 12] = {x = 6, y = 12} c. x := x+1, σ E, σ[x σ(x+1)] = E, σ[x σ(x)+1] d. x := x+1; y := 2*x, {x = 5} y := 2*x, {x = 5}[x α] where α = {x = 5}(x+1) = 6 = y := 2*x, {x = 5}[x 6] = y := 2*x, {x = 6} E, {x = 6}[y β] where β = {x = 6}(2*x) = 12 = E, {x = 6, y = 12} CS 536-05: Science of Programming 10 James Sasaki, 2018

Illinois Institute of Technology Activity 5 10. Let S if x > 0 then x := x+1 else y := 2*x fi. a. If σ(x) = 8, then σ(x > 0) = T, so S, σ x := x+1, σ E, σ[x σ(x+1)] = E, σ[x 9]. b. If σ(x) = 0, then σ(x > 0) = F, so S, σ y := 2*x, σ E, σ[y σ(2*x)] = E, σ[y 0] c. If σ(x) > 0 then S, σ x := x+1, σ = E, σ[x σ(x)+1]. If σ(x) 0 then S, σ y := 2*x, σ = E, σ[y 2 σ(x)]. 11. Let S if x > 0 then x := x/z fi if x > 0 then x := x/z else skip fi a. If σ = {x = 8, z = 3}, then σ(x > 0) = T so S, σ x := x/z, σ E, σ[x α] where α = σ(x/z) = σ[x 8/3] = σ[x 2], since integer division truncates. b. If σ = {x = -2, z = 3} then σ(x > 0) = F, so S, σ skip, σ E, σ. 12. Let W while x < 3 do S od where S x := x+1; y := y*x. a. For arbitrary τ, S, τ x := x+1; y := y*x, τ y := y*x, τ[x τ(x)+1] E, τ[x τ(x)+1][y α] where α = τ[x τ(x)+1](y*x) = τ(y) (τ(x)+1). b. If σ x = 4 y = 1, then σ(x < 3) = F so W, σ E, σ. c. If σ x = 1 y = 1, then σ(x < 3) = T so we have at least one iteration to do. Let σ₀ = σ, let σ₁ = σ₀(y) (σ₀(x)+1), and let σ₂ = σ₁(y) (σ₁(x)+1). Then σ₀ = σ[x 1][y 1] σ₁ = σ₀[x σ₀(x)+1][y σ₀(y) (σ₀(x)+1)] = σ[x 2][y 2] σ₂ = σ₁[x 2+1][y 2 (2+1)] = σ[x 3][y 6] Since σ₀ and σ₁ x < 3 but σ₂ x 3, we have W, σ S; W, σ₀ * W, σ₁ = S; W, σ₁ * W, σ₂ E, σ₂, so σ₂ is the final state. CS 536-05: Science of Programming 11 James Sasaki, 2018