Formal Semantics of Programming Languages

Similar documents
Formal Semantics of Programming Languages

Formal Semantics of Programming Languages

Formal Syntax and Semantics of Programming Languages

Formal Syntax and Semantics of Programming Languages

Program Analysis: Lecture 02 Page 1 of 32

Exercises on Semantics of Programming Languages

Semantics with Applications 3. More on Operational Semantics

PROGRAM ANALYSIS & SYNTHESIS

Application: Programming Language Semantics

Big-step Operational Semantics (aka Natural Semantics)

Programming Languages Third Edition

Lecture 5 - Axiomatic semantics

CMSC 330: Organization of Programming Languages. Formal Semantics of a Prog. Lang. Specifying Syntax, Semantics

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

Intro to semantics; Small-step semantics Lecture 1 Tuesday, January 29, 2013

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

COSC252: Programming Languages: Semantic Specification. Jeremy Bolton, PhD Adjunct Professor

Chapter 3 (part 3) Describing Syntax and Semantics

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.

Formal semantics of loosely typed languages. Joep Verkoelen Vincent Driessen

CMSC 330: Organization of Programming Languages

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

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

Induction and Semantics in Dafny

In Our Last Exciting Episode

Type Inference Systems. Type Judgments. Deriving a Type Judgment. Deriving a Judgment. Hypothetical Type Judgments CS412/CS413

Fall Compiler Principles Lecture 5: Intermediate Representation. Roman Manevich Ben-Gurion University of the Negev

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

3.7 Denotational Semantics

Introduction to Denotational Semantics. Brutus Is An Honorable Man. Class Likes/Dislikes Survey. Dueling Semantics

CS152 Programming Language Paradigms Prof. Tom Austin, Fall Syntax & Semantics, and Language Design Criteria

Propositional Logic Formal Syntax and Semantics. Computability and Logic

A Simple Syntax-Directed Translator

Denotational Semantics

Chapter 3. Describing Syntax and Semantics ISBN

Fall Compiler Principles Lecture 6: Intermediate Representation. Roman Manevich Ben-Gurion University of the Negev

Type Checking. Outline. General properties of type systems. Types in programming languages. Notation for type rules.

Semantics via Syntax. f (4) = if define f (x) =2 x + 55.

Outline. General properties of type systems. Types in programming languages. Notation for type rules. Common type rules. Logical rules of inference

02157 Functional Programming Interpreters for two simple languages including exercises

Operational Semantics. One-Slide Summary. Lecture Outline

Pierce Ch. 3, 8, 11, 15. Type Systems

The exercises and answer for programming language class

Chapter 3. Describing Syntax and Semantics

CSCE 314 Programming Languages

Lectures 20, 21: Axiomatic Semantics

Part II. Hoare Logic and Program Verification. Why specify programs? Specification and Verification. Code Verification. Why verify programs?

Principles of Programming Languages

Chapter 3. Describing Syntax and Semantics

Chapter 3: Syntax and Semantics. Syntax and Semantics. Syntax Definitions. Matt Evett Dept. Computer Science Eastern Michigan University 1999

The Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.

Static Program Analysis

Computation Club: Gödel s theorem

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

Lexical Considerations

CMSC 330: Organization of Programming Languages. Operational Semantics

Foundations: Syntax, Semantics, and Graphs

1 Lexical Considerations

Semantics. There is no single widely acceptable notation or formalism for describing semantics Operational Semantics

More Untyped Lambda Calculus & Simply Typed Lambda Calculus

Syntax vs. semantics. Detour: Natural deduction. Syntax vs. semantics (cont d) Syntax = grammatical structure Semantics = underlying meaning

Intermediate Code Generation

Introduction to Scheme

Lexical Considerations

3. DESCRIBING SYNTAX AND SEMANTICS

More on Operational Semantics

7. Introduction to Denotational Semantics. Oscar Nierstrasz

The semantics of a programming language is concerned with the meaning of programs, that is, how programs behave when executed on computers.

Static Program Analysis

Program Representations

More on Syntax. Agenda for the Day. Administrative Stuff. More on Syntax In-Class Exercise Using parse trees

Crafting a Compiler with C (II) Compiler V. S. Interpreter

Type Systems. Today. 1. Organizational Matters. 1. Organizational Matters. Lecture 1 Oct. 20th, 2004 Sebastian Maneth. 1. Organizational Matters

Pointers. Chapter 8. Decision Procedures. An Algorithmic Point of View. Revision 1.0

CS422 - Programming Language Design

CHAPTER 10 GRAPHS AND TREES. Alessandro Artale UniBZ - artale/

Formal Semantics. Chapter Twenty-Three Modern Programming Languages, 2nd ed. 1

CONVENTIONAL EXECUTABLE SEMANTICS. Grigore Rosu CS422 Programming Language Design

Verifying Safety Property of Lustre Programs: Temporal Induction

3.1 IMP: A Simple Imperative Language

Programming Languages Third Edition. Chapter 7 Basic Semantics

COS 320. Compiling Techniques

CS152: Programming Languages. Lecture 2 Syntax. Dan Grossman Spring 2011

Computer Science Department Carlos III University of Madrid Leganés (Spain) David Griol Barres

Principles of Programming Languages

CSE 12 Abstract Syntax Trees

Lecture Outline. COOL operational semantics. Operational Semantics of Cool. Motivation. Notation. The rules. Evaluation Rules So Far.

Denotational Semantics

Calculating Correct Compilers

YOLOP Language Reference Manual

2 Introduction to operational semantics

CS 6110 S14 Lecture 1 Introduction 24 January 2014

Warmup Problem. Translate the following sentence from English into Propositional Logic. I want to eat ice cream even though I am on a diet.

Principles of Programming Languages

Chapter 3. Syntax - the form or structure of the expressions, statements, and program units

The Programming Language Core

CS2104 Prog. Lang. Concepts

10/18/18. Outline. Semantic Analysis. Two types of semantic rules. Syntax vs. Semantics. Static Semantics. Static Semantics.

Functional Programming. Pure Functional Programming

Chapter 3. Describing Syntax and Semantics ISBN

Transcription:

Formal Semantics of Programming Languages Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson http://www.daimi.au.dk/~bra8130/wiley_book/wiley.html

Benefits of formal definitions Intellectual Better understanding Formal proofs Mechanical checks by computer Tool generations 2

What is a good formal definition? Natural Concise Easy to understand Permits effective mechanical reasoning 3

Syntax Programming Languages Which string is a legal program? Usually defined using context free grammar+ contextual constraints Semantics What does a program mean? What is the output of the program on a given run? When does a runtime error occur? A formal definition

Syntax vs. Semantics The pattern of formation of sentences or phrases in a language Examples Regular expressions Context free grammars The study or science of meaning in language Examples Interpreter Compiler Better mechanisms will be given in the course

Who need formal semantics for PL? Language designers Compiler designers [Programmers]

Example C++ Designed with a source to source compiler to C Many issues Especially later

Type Safety A programming language is type safe if every well typed program has no undefined semantics No runtime surprise Is C type safe? How about Java? 8

Breaking Safety in C void foo(s) { char c[100]; strcpy(c, s); } 9

A Pathological C Program a = malloc( ) ; b = a; free (a); c = malloc ( ); if (b == c) printf( unexpected equality ); 10

Alternative Formal Semantics Operational Semantics The meaning of the program is described operationally Natural Operational Semantics Structural Operational Semantics Denotational Semantics The meaning of the program is an input/output relation Mathematically challenging but complicated Axiomatic Semantics The meaning of the program are observed properties 11

[x 3] int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z, y ] [x 3, z 1, y ] [x 3, z 1, y 3] [x 3, z 1, y 3] [x 3, z 3, y 3] [x 3, z 3, y 2]

int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 3, y 2] [x 3, z 3, y 2] [x 3, z 6, y 2] [x 3, z 6, y 1]

int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 6, y 1] [x 3, z 6, y 1] [x 3, z 6, y 1] [x 3, z 6, y 0]

int fact(int x) { int z, y; z = 1; y= x; while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 6, y 0] [x 3, z 6, y 0]

int fact(int x) { int z, y; z = 1; y= x; while (y>0) { z = z * y ; y = y 1; } return 6 } [x 3, z 6, y 0]

int fact(int x) { int z, y; z = 1; Denotational Semantics y= x ; while (y>0) { z = z * y ; y = y 1; } return z; } f= x. if x = 0 then 1 else x * f(x -1)

{x=n} int fact(int x) { int z, y; z = 1; {x=n z=1} y= x {x=n z=1 y=n} while {x=n y 0 z=n! / y!} (y>0) { {x=n y >0 z=n! / y!} z = z * y ; {x=n y>0 z=n!/(y-1)!} y = y 1; {x=n y 0 z=n!/y!} } return z} {x=n z=n!} Axiomatic Semantics

The While Programming Language Abstract syntax S::= x := a skip S 1 ; S 2 if b then S 1 else S 2 while b do S Use parenthesizes for precedence Informal Semantics skip behaves like no-operation Import meaning of arithmetic and Boolean operations 19

Example While Program y := 1; while (x=1) do ( y := y * x; x := x 1; )

General Notations Syntactic categories Var the set of program variables Aexp the set of arithmetic expressions Bexp the set of Boolean expressions Stm set of program statements Semantic categories Natural values N={0, 1, 2, } Truth values T={ff, tt} States State = Var N Lookup in a state s: s x Update of a state s: s [ x 5]

Example State Manipulations [x 1, y 7, z 16] y = [x 1, y 7, z 16] t = [x 1, y 7, z 16][x 5] = [x 1, y 7, z 16][x 5] x = [x 1, y 7, z 16][x 5] y =

Semantics of arithmetic expressions Assume that arithmetic expressions are side-effect free A Aexp : State N Defined by structural induction on the syntax tree A n s = n A x s = s x A e 1 + e 2 s = A e 1 s + A e 2 s A e 1 * e 2 s = A e 1 s * A e 2 s A ( e 1 ) s = A e 1 s --- not needed A - e 1 s = -A e 1 s

Properties of arithmetic expressions The semantics is compositional A e 1 op e 2 = op (A e 1, A e 2 ) Properties can be proved by structural induction We say that e 1 is semantically equivalent to e 2 (e 1 e 2 ) when A e 1 = A e 2

Commutativity of expressions Theorem: for every expressions e 1, e 2 : e 1 + e 2 e 2 + e 1 Proof: A e 1 + e 2 s = A e 1 s + A e 2 s = A e 2 s + A e 1 s = A e 2 + e 1 s

Semantics of Boolean expressions Assume that Boolean expressions are side-effect free B Bexp : State T Defined by induction on the syntax tree B true s = tt B false s = ff B e 1 = e 2 s = B e 1 e 2 s = tt if A e 1 s = A e 2 s ff if A e 1 s A e 2 s tt if B e 1 s = tt and B e 2 =tt ff if B e 1 s=ff or B e 2 s=ff B e 1 e 2 s = tt if A e 1 s A e 2 s ff if A e 1 s < A e 2 s

Natural Operational Semantics Describe the overall effect of program constructs Ignores non terminating computations 27

Natural Semantics Notations <S, s> - the program statement S is executed on input state s s representing a terminal (final) state For every statement S, write meaning rules <S, i> o If the statement S is executed on an input state i, it terminates and yields an output state o The meaning of a program P on an input state i is the set of outputs states o such that <P, i> o The meaning of compound statements is defined using the meaning immediate constituent statements

axioms rules Natural Semantics for While [ass ns ] <x := a, s> s[x A a s] [skip ns ] <skip, s> s [comp ns ] <S 1, s> s, <S 2, s > s <S 1 ; S 2, s> s [if tt ns] <S 1, s> s <if b then S 1 else S 2, s> s if B b s=tt [if ff ns] <S 2, s> s <if b then S 1 else S 2, s> s if B b s=ff

Natural Semantics for While (More rules) [while ff ns] <while b do S, s> s if B b s=ff [while tt ns] <S, s> s, <while b do S, s > s <while b do S, s> s if B b s=tt

Simple Examples Let s 0 be the state which assigns zero to all program variables Assignments [ass ns ] <x := x+1, s 0 > s 0 [x 1] Skip statement [skip ns ] <skip, s 0 > s 0 Composition [comp ns ] <skip,s 0 > s 0, <x := x+1, s 0 > s 0 [x 1] <skip; x := x +1, s 0 > s 0 [x 1]

Simple Examples (Cont) Let s 0 be the state which assigns zero to all program variables if-construct [if tt ns] <skip,s 0 > s 0 <if x=0 then skip else x := x +1, s 0 > s 0

A Derivation Tree A proof that <S, s> s The root of tree is <S, s> s Leaves are instances of axioms Internal nodes rules Immediate children match rule premises Simple Example <skip; x := x +1, s 0 > s 0 [x 1]> <skip, s 0 > s 0 compns < x := x +1, s 0 > s 0 [x 1]> 33

An Example Derivation Tree <(x :=x+1; y :=x+1) ; z := y), s0> s0[x 1][y 2][z 2] compns <z :=y,s0[x 1][y 2]> s0[x 1][y 2][z 2] <x :=x+1; y :=x+1, s0> s0[x 1][y 2] compns assns assns <x :=x+1; s0> s0[x 1] <y :=x+1, s0[x 1]> s0[x 1][y 2] assns 34

Top Down Evaluation of Derivation Trees Given a program S and an input state s Find an output state s such that <S, s> s Start with the root and repeatedly apply rules until the axioms are reached Inspect different alternatives in order In While s and the derivation tree is unique

Example of Top Down Tree Construction Input state s such that s x = 2 Factorial program <y := 1; while (x=1) do (y := y * x; x := x - 1), s> compns s[y 2][x 1] <W, s[y 1] > s[y 2][x 1 <y :=1, s> s[y 1] assns <(y := y * x ; x := x -1, s[y 1]> s[y 2][x 1] > compns while tt ns <W, s[y 2][x 1] s[y 2][x 1 while ff ns <y := y * x ; s[y 1]> s[y 2] > <x := x - 1, s[y 2] > s[y 2][x 1] assns assns

Program Termination Given a statement S and input s S terminates on s if there exists a state s such that <S, s> s S loops on s if there is no state s such that <S, s> s Given a statement S S always terminates if for every input state s, S terminates on s S always loops if for every input state s, S loops on s 37

Example Programs skip If true then skip else C while false do C while true do skip

Semantic Equivalence S 1 and S 2 are semantically equivalent if for all s and s (s s ) <S 1, s> s if and only if <S 2, s> s 39

Example of Semantic Equivalence skip ; skip skip (S 1 ; S 2 ) ; S 3 ) (S 1 ;( S 2 ; S 3 )) x := 5 ; y := x * 8 x :=5; y := 40 while b do S if b then (S ; while b do S) else skip 40

Deterministic Semantics for While If <S, s> s 1 and <S, s> s 2 then s 1 =s 2 The proof uses induction on the shape of derivation trees Prove that the property holds for all simple derivation trees by showing it holds for axioms Prove that the property holds for all composite trees: For each rule assume that the property holds for its premises (induction hypothesis) and prove it holds for the conclusion of the rule 41

The Semantic Function S ns The meaning of a statement S is defined as a partial function from State to State S ns : Stm (State State) S ns S s = s if <S, s> s and otherwise S ns S s is undefined Examples S ns skip s =s S ns x :=1 s = s [x 1] S ns while true do skip s = undefined 42

Summary Natural Semantics Simple Useful Enables simple proofs of language properties Automatic generation of interpreters But limited Concurrency