concrete semantics
play

Concrete Semantics with Isabelle/HOL Tobias Nipkow Fakult at f - PowerPoint PPT Presentation

Concrete Semantics with Isabelle/HOL Tobias Nipkow Fakult at f ur Informatik Technische Universit at M unchen 2017-3-8 1 Part I Isabelle 2 Chapter 2 Programming and Proving 3 1 Overview of Isabelle/HOL 2 Type and function


  1. Non-recursive definitions Example definition sq :: nat ⇒ nat where sq n = n ∗ n No pattern matching, just f x 1 . . . x n = . . . 48

  2. The danger of nontermination How about f x = f x + 1 ? ! ! All functions in HOL must be total 49

  3. Key features of fun • Pattern-matching over datatype constructors • Order of equations matters • Termination must be provable automatically by size measures • Proves customized induction schema 50

  4. Example: separation fun sep :: ′ a ⇒ ′ a list ⇒ ′ a list where sep a ( x # y # zs ) = x # a # sep a ( y # zs ) | sep a xs = xs 51

  5. Example: Ackermann fun ack :: nat ⇒ nat ⇒ nat where ack 0 n = Suc n | ack ( Suc m ) 0 = ack m ( Suc 0 ) | ack ( Suc m ) ( Suc n ) = ack m ( ack ( Suc m ) n ) Terminates because the arguments decrease lexicographically with each recursive call: • ( Suc m , 0 ) > ( m , Suc 0 ) • ( Suc m , Suc n ) > ( Suc m , n ) • ( Suc m , Suc n ) > ( m , ) 52

  6. primrec • A restrictive version of fun • Means primitive recursive • Most functions are primitive recursive • Frequently found in Isabelle theories The essence of primitive recursion: f ( 0 ) = . . . no recursion f ( Suc n ) = . . . f ( n ) . . . g ([]) = . . . no recursion g ( x # xs ) = . . . g ( xs ) . . . 53

  7. 1 Overview of Isabelle/HOL 2 Type and function definitions 3 Induction Heuristics 4 Simplification 54

  8. Basic induction heuristics Theorems about recursive functions are proved by induction Induction on argument number i of f if f is defined by recursion on argument number i 55

  9. A tail recursive reverse Our initial reverse: fun rev :: ′ a list ⇒ ′ a list where rev [] = [] | rev ( x # xs ) = rev xs @ [ x ] A tail recursive version: fun itrev :: ′ a list ⇒ ′ a list ⇒ ′ a list where itrev [] ys = ys | itrev ( x # xs ) ys = lemma itrev xs [] = rev xs 56

  10. Induction_Demo.thy Generalisation 57

  11. Generalisation • Replace constants by variables • Generalize free variables • by arbitrary in induction proof • (or by universal quantifier in formula) 58

  12. So far, all proofs were by structural induction because all functions were primitive recursive. In each induction step, 1 constructor is added. In each recursive call, 1 constructor is removed. Now: induction for complex recursion patterns. 59

  13. Computation Induction Example fun div2 :: nat ⇒ nat where div2 0 = 0 | div2 ( Suc 0 ) = 0 | div2 ( Suc ( Suc n )) = Suc ( div2 n ) � induction rule div2.induct : � n. P ( n ) = P (0) P ( Suc 0) ⇒ P ( Suc ( Suc n )) P ( m ) 60

  14. Computation Induction If f :: τ ⇒ τ ′ is defined by fun , a special induction schema is provided to prove P ( x ) for all x :: τ : for each defining equation f ( e ) = . . . f ( r 1 ) . . . f ( r k ) . . . prove P ( e ) assuming P ( r 1 ) , . . . , P ( r k ) . Induction follows course of (terminating!) computation Motto: properties of f are best proved by rule f.induct 61

  15. How to apply f.induct If f :: τ 1 ⇒ · · · ⇒ τ n ⇒ τ ′ : ( induction a 1 . . . a n rule : f . induct ) Heuristic: • there should be a call f a 1 . . . a n in your goal • ideally the a i should be variables. 62

  16. Induction_Demo.thy Computation Induction 63

  17. 1 Overview of Isabelle/HOL 2 Type and function definitions 3 Induction Heuristics 4 Simplification 64

  18. Simplification means . . . Using equations l = r from left to right As long as possible Terminology: equation � simplification rule Simplification = (Term) Rewriting 65

  19. An example 0 + n = n (1) ( Suc m ) + n = Suc ( m + n ) (2) Equations: ( Suc m ≤ Suc n ) = ( m ≤ n ) (3) (0 ≤ m ) = True (4) (1) 0 + Suc 0 ≤ Suc 0 + x = (2) Suc 0 ≤ Suc 0 + x = Rewriting: (3) Suc 0 ≤ Suc (0 + x ) = (4) 0 ≤ 0 + x = True 66

  20. Conditional rewriting Simplification rules can be conditional: [ [ P 1 ; . . . ; P k ] ] = ⇒ l = r is applicable only if all P i can be proved first, again by simplification. Example p (0) = True p ( x ) = ⇒ f ( x ) = g ( x ) We can simplify f (0) to g (0) but we cannot simplify f (1) because p (1) is not provable. 67

  21. Termination Simplification may not terminate. Isabelle uses simp -rules (almost) blindly from left to right. Example: f ( x ) = g ( x ) , g ( x ) = f ( x ) [ [ P 1 ; . . . ; P k ] ] = ⇒ l = r is suitable as a simp -rule only if l is “bigger” than r and each P i n < m = ⇒ ( n < Suc m ) = True YES Suc n < m = ⇒ ( n < m ) = True NO 68

  22. Proof method simp Goal: 1. [ [ P 1 ; . . . ; P m ] ] = ⇒ C apply ( simp add : eq 1 . . . eq n ) Simplify P 1 . . . P m and C using • lemmas with attribute simp • rules from fun and datatype • additional lemmas eq 1 . . . eq n • assumptions P 1 . . . P m Variations: • ( simp . . . del : . . . ) removes simp -lemmas • add and del are optional 69

  23. auto versus simp • auto acts on all subgoals • simp acts only on subgoal 1 • auto applies simp and more • auto can also be modified: ( auto simp add : . . . simp del : . . . ) 70

  24. Rewriting with definitions Definitions ( definition ) must be used explicitly: ( simp add : f def . . . ) f is the function whose definition is to be unfolded. 71

  25. Case splitting with simp Automatic: P ( if A then s else t ) = ( A − → P ( s )) ∧ ( ¬ A − → P ( t )) By hand: P ( case e of 0 ⇒ a | Suc n ⇒ b ) = ( e = 0 − → P ( a )) ∧ ( ∀ n . e = Suc n − → P ( b )) Proof method: ( simp split : nat . split ) Or auto . Similar for any datatype t : t . split 72

  26. Simp_Demo.thy 73

  27. Chapter 3 Case Study: IMP Expressions 74

  28. 5 Case Study: IMP Expressions 75

  29. 5 Case Study: IMP Expressions 76

  30. This section introduces arithmetic and boolean expressions of our imperative language IMP. IMP commands are introduced later. 77

  31. 5 Case Study: IMP Expressions Arithmetic Expressions Boolean Expressions Stack Machine and Compilation 78

  32. Concrete and abstract syntax Concrete syntax: strings, eg "a+5*b" Abstract syntax: trees, eg + � ❅ � ❅ � ❅ a * ✁ ❆ ✁ ❆ ✁ ❆ 5 b Parser: function from strings to trees Linear view of trees: terms, eg Plus a (Times 5 b) Abstract syntax trees/terms are datatype values! 79

  33. Concrete syntax is defined by a context-free grammar, eg a ::= n | x | ( a ) | a + a | a ∗ a | . . . where n can be any natural number and x any variable. We focus on abstract syntax which we introduce via datatypes. 80

  34. Datatype aexp Variable names are strings, values are integers: type _ synonym vname = string datatype aexp = N int | V vname | Plus aexp aexp Concrete Abstract N 5 5 V ′′ x ′′ x Plus ( V ′′ x ′′ ) ( V ′′ y ′′ ) x+y Plus ( N 2 ) ( Plus ( V ′′ z ′′ ) ( N 3 )) 2+(z+3) 81

  35. Warning This is syntax, not (yet) semantics! N 0 � = Plus ( N 0 ) ( N 0 ) 82

  36. The (program) state What is the value of x+1 ? • The value of an expression depends on the value of its variables. • The value of all variables is recorded in the state . • The state is a function from variable names to values: type _ synonym val = int type _ synonym state = vname ⇒ val 83

  37. Function update notation If f :: τ 1 ⇒ τ 2 and a :: τ 1 and b :: τ 2 then f ( a := b ) is the function that behaves like f except that it returns b for argument a . f ( a := b ) = ( λ x . if x = a then b else f x ) 84

  38. How to write down a state Some states: • λ x . 0 • ( λ x . 0 )( ′′ a ′′ := 3 ) • (( λ x . 0 )( ′′ a ′′ := 5 ))( ′′ x ′′ := 3 ) Nicer notation: < ′′ a ′′ := 5 , ′′ x ′′ := 3 , ′′ y ′′ := 7 > Maps everything to 0 , but ′′ a ′′ to 5 , ′′ x ′′ to 3 , etc. 85

  39. AExp.thy 86

  40. 5 Case Study: IMP Expressions Arithmetic Expressions Boolean Expressions Stack Machine and Compilation 87

  41. BExp.thy 88

  42. 5 Case Study: IMP Expressions Arithmetic Expressions Boolean Expressions Stack Machine and Compilation 89

  43. ASM.thy 90

  44. This was easy. Because evaluation of expressions always terminates. But execution of programs may not terminate. Hence we cannot define it by a total recursive function. We need more logical machinery to define program execution and reason about it. 91

  45. Chapter 4 Logic and Proof Beyond Equality 92

  46. 6 Logical Formulas 7 Proof Automation 8 Single Step Proofs 9 Inductive Definitions 93

  47. 6 Logical Formulas 7 Proof Automation 8 Single Step Proofs 9 Inductive Definitions 94

  48. Syntax (in decreasing precedence): form ::= ( form ) | term = term | ¬ form | form ∧ form | form ∨ form | form − → form | ∀ x. form | ∃ x. form Examples: ¬ A ∧ B ∨ C ≡ (( ¬ A ) ∧ B ) ∨ C s = t ∧ C ≡ ( s = t ) ∧ C A ∧ B = B ∧ A ≡ A ∧ ( B = B ) ∧ A ∀ x . P x ∧ Q x ≡ ∀ x . ( P x ∧ Q x ) Input syntax: ← → (same precedence as − → ) 95

  49. Variable binding convention: ∀ x y . P x y ≡ ∀ x . ∀ y . P x y Similarly for ∃ and λ . 96

  50. Warning Quantifiers have low precedence and need to be parenthesized (if in some context) ! ! P ∧ ∀ x . Q x � P ∧ ( ∀ x . Q x ) 97

  51. Mathematical symbols . . . and their ascii representations: ∀ \<forall> ALL ∃ \<exists> EX λ \<lambda> % − → --> ← → <-> ∧ /\ & ∨ \/ | ¬ \<not> ~ � = \<noteq> ~= 98

  52. Sets over type ′ a ′ a set • {} , { e 1 ,. . . , e n } • e ∈ A , A ⊆ B • A ∪ B , A ∩ B , A − B , − A • . . . ∈ \<in> : ⊆ \<subseteq> <= ∪ \<union> Un ∩ \<inter> Int 99

  53. Set comprehension • { x . P } where x is a variable • But not { t . P } where t is a proper term • Instead: { t | x y z . P } is short for { v . ∃ x y z . v = t ∧ P } where x , y , z are the free variables in t 100

  54. 6 Logical Formulas 7 Proof Automation 8 Single Step Proofs 9 Inductive Definitions 101

Recommend


More recommend