Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming.

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 7 Semantics Surely all this is not without.
Advertisements

Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming.
Chapter 11 Proof by Induction. Induction and Recursion Two sides of the same coin.  Induction usually starts with small things, and then generalizes.
Copyright © Cengage Learning. All rights reserved. CHAPTER 5 SEQUENCES, MATHEMATICAL INDUCTION, AND RECURSION SEQUENCES, MATHEMATICAL INDUCTION, AND RECURSION.
Copyright © Cengage Learning. All rights reserved. CHAPTER 5 SEQUENCES, MATHEMATICAL INDUCTION, AND RECURSION SEQUENCES, MATHEMATICAL INDUCTION, AND RECURSION.
Functional Design and Programming Lecture 11: Functional reasoning.
ISBN Chapter 3 Describing Syntax and Semantics.
Copyright © 2006 Addison-Wesley. All rights reserved. 3.5 Dynamic Semantics Meanings of expressions, statements, and program units Static semantics – type.
1 Semantic Description of Programming languages. 2 Static versus Dynamic Semantics n Static Semantics represents legal forms of programs that cannot be.
CS 355 – Programming Languages
1 Languages. 2 A language is a set of strings String: A sequence of letters Examples: “cat”, “dog”, “house”, … Defined over an alphabet: Languages.
Comp 205: Comparative Programming Languages Semantics of Imperative Programming Languages denotational semantics operational semantics logical semantics.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is.
CSE115/ENGR160 Discrete Mathematics 04/03/12 Ming-Hsuan Yang UC Merced 1.
0 PROGRAMMING IN HASKELL Chapter 7 - Higher-Order Functions.
0 PROGRAMMING IN HASKELL Chapter 1 - Introduction.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming.
Recursive Definitions Rosen, 3.4. Recursive (or inductive) Definitions Sometimes easier to define an object in terms of itself. This process is called.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 12 Imperative Programming I really hate this.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 10 Function Implementation In theory, there.
1 Intro to Induction Supplementary Notes Prepared by Raymond Wong Presented by Raymond Wong.
1 Languages and Finite Automata or how to talk to machines...
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
0 PROGRAMMING IN HASKELL Chapter 6 - Recursive Functions.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming.
CSE115/ENGR160 Discrete Mathematics 03/31/11
Describing Syntax and Semantics
1 Section 3.4 Recursive Definitions. 2 Recursion Recursion is the process of defining an object in terms of itself Technique can be used to define sequences,
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 9 Functions It is better to have 100 functions.
Copyright © 2007 Pearson Education, Inc. Slide 8-1.
CSE 311 Foundations of Computing I Lecture 16 Recursively Defined Sets and Structural Induction Spring
Cs7120 (Prasad)L9-RECUR-IND1 Recursion and Induction.
March 3, 2015Applied Discrete Mathematics Week 5: Mathematical Reasoning 1Arguments Just like a rule of inference, an argument consists of one or more.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
Computer Science School of Computing Clemson University Discrete Math and Reasoning about Software Correctness Joseph E. Hollingsworth
Type Safety Kangwon National University 임현승 Programming Languages.
Mathematical Induction Chapter 16 Language, Proof and Logic.
CSE 311 Foundations of Computing I Lecture 17 Structural Induction Spring
ICS 253: Discrete Structures I Induction and Recursion King Fahd University of Petroleum & Minerals Information & Computer Science Department.
October 3, 2001CSE 373, Autumn Mathematical Background Exponents X A X B = X A+B X A / X B = X A-B (X A ) B = X AB X N +X N = 2X N 2 N +2 N = 2 N+1.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is.
Kyung-Goo Doh Hanyang University - ERICAComputer Science & Engineering Functional Programming / Imperative Programming CSE215 Fundamentals of Program Design.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
Inductive Proofs and Inductive Definitions Jim Skon.
Slide Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley.
CSC3315 (Spring 2009)1 CSC 3315 Languages & Compilers Hamid Harroud School of Science and Engineering, Akhawayn University
Aids to Formulating and Answering Key Questions NameWhen to use u Construction Methodproving “there exists” u Choose Method proving “for every” u Math.
1 Discrete Mathematical Mathematical Induction ( الاستقراء الرياضي )
1 Recursion and induction We teach these early, instead of new object- oriented ideas, so that those who are new to Java can have a chance to catch up.
1 Proving Properties of Recursive List Functions CS 270 Math Foundations of CS Jeremy Johnson.
Languages.
PROGRAMMING IN HASKELL
CSE 311 Foundations of Computing I
PROGRAMMING IN HASKELL
Programming Languages 2nd edition Tucker and Noonan
Discrete Structures for Computer Science
Single Final State for NFA
Discrete Structures for Computer Science
Proving Properties of Recursive List Functions
Programming Languages 2nd edition Tucker and Noonan
Follow me for a walk through...
Lecture 11 CS 1813 – Discrete Mathematics
Applied Discrete Mathematics Week 9: Integer Properties
PROGRAMMING IN HASKELL
Mathematical Induction
Copyright © Cengage Learning. All rights reserved.
Programming Languages 2nd edition Tucker and Noonan
Programming Languages 2nd edition Tucker and Noonan
Presentation transcript:

Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 18 Program Correctness To treat programming scientifically, it must be possible to specify the required properties of programs precisely. Formality is certainly not an end in itself. The importance of formal specifications must ultimately rest in their utility - in whether or not they are used to improve the quality of software or to reduce the cost of producing and maintaining software. J. Horning

Copyright © 2006 The McGraw-Hill Companies, Inc. Contents 18.1 Axiomatic Semantics 18.2 Formal Methods Tools: JML 18.3 Correctness of Object-Oriented Programs 18.4 Correctness of Functional Programs Recursion and Induction Examples of Structural Induction

Copyright © 2006 The McGraw-Hill Companies, Inc Correctness of Functional Programs Pure functional programs are more accessible to correctness proofs than imperative or OO programs. Three major reasons: 1.Pure functional programs are state-free (no assignment), 2.Functions and variables mathematical ideas, and 3.Recursion aligns well with proof by induction.

Copyright © 2006 The McGraw-Hill Companies, Inc Recursion and Induction Consider the Haskell function: > fact n > | n == 1= 1-- fact.1 > | n > 1= n*fact(n-1)-- fact.2 Suppose we want to prove that this function correctly computes the factorial. I.e., that it computes: fact(1) = 1 fact(n) = 1  2  …  (n-1)  n when n>1

Copyright © 2006 The McGraw-Hill Companies, Inc. Induction proof of a recursive function The induction proof is straightforward. We use the definition of the function directly in the proof. Basis step: The function computes the correct result for n = 1, using line fact.1 of the definition. Induction step: Assume the hypothesis that the function computes the correct result for some n = k > 1. That is, it computes fact(k) = 1  2  …  (k-1)  k. Then for n = k+1, it computes fact(k+1) = (k+1)*fact(k) using line fact.2 of the definition. Thus, it computes fact(k+1) = 1  2  …  (k- 1)  k  (k+1), which completes the induction step.

Copyright © 2006 The McGraw-Hill Companies, Inc Examples of Structural Induction List concatenation and reversal: > cat [] ys = ys-- cat.1 > cat (x:xs) ys= x : (cat xs ys)-- cat.2 > rev []= []-- rev.1 > rev (x:xs)= cat (rev (xs)) [x] -- rev.2 Suppose we want to prove the following property about the relationship between cat and rev : rev (cat xs ys) = cat (rev ys) (rev xs) E.g., rev (cat “hello ” “world”) = cat (rev “world”) (rev “hello ”) = “dlrow olleh”

Copyright © 2006 The McGraw-Hill Companies, Inc. The Proof Basis step: rev (cat [] ys) = rev (ys) from cat.1 = cat (rev ys []) from rev.2 = cat (rev ys rev [] from rev.1 Induction step: Hypothesis: rev (cat xs ys) = cat (rev ys) (rev xs) rev (cat (x:xs) ys) = rev x : (cat xs ys) from cat.2 = rev (cat (xs ys) [x]) from rev.2 = cat (cat (rev ys) (rev xs)) [x] from hypothesis = cat (cat (rev ys) (rev xs)) [x] cat associativity* = cat (rev ys) (rev (x:xs)) from rev.2 *Note: associativity of cat needs to be proved separately.

Copyright © 2006 The McGraw-Hill Companies, Inc. List Length and Concatenation > len [] = 0-- len.1 > len (x:xs) = 1 + (len xs)-- len.2 E.g., len [1,3,4,7] = 1 + len [3,4,7] = 1 + (1 + len [4,7]) = 1 + (1 + (1 + len [7])) = 1 + (1 + (1 + (1 + len []))) = 1 + (1 + (1 + (1 + 0))) = 4 Suppose we want to prove the following property about the relationship between len and cat : len (cat xs ys) = len xs + len ys

Copyright © 2006 The McGraw-Hill Companies, Inc. The Proof Basis step: len (cat [] ys) = len (ys) from cat.1 = 0 + len (ys) from arithmetic = len [] + len ys from len.1 Induction step: Hypothesis: len (cat xs ys) = len xs + len ys len (cat (x:xs) ys) = len x : (cat xs ys) from cat.2 = 1 + len (cat xs ys) from len.2 = 1 + len xs + len ys from hypothesis = len x:xs + len ys from len.2