compiler verification meets cross language linking via
play

Compiler Verification meets Cross-Language Linking via Data - PowerPoint PPT Presentation

Compiler Verification meets Cross-Language Linking via Data Abstraction Peng Wang, MIT CSAIL Santiago Cuellar, Princeton University Adam Chlipala, MIT CSAIL Verified Compiler Program Verification Techniques


  1. Compiler Verification meets Cross-Language Linking via Data Abstraction Peng Wang, MIT CSAIL Santiago Cuellar, Princeton University Adam Chlipala, MIT CSAIL

  2. Verified Compiler Program Verification Techniques Source Program Semantics 2

  3. Verified Compiler Program Verification Techniques Source Program Semantics Semantic Preserving Compiler Target Program Semantics 2

  4. Cross-Language Development iPhoto.swift matrix.c iPhoto.S matrix.S malloc.S iPhoto.exe 3

  5. ListSet.ll: typedef /* ... */ ListSet; ListSet ListSet_new() { /* ... */ } void ListSet_delete(ListSet this) { /* ... */ } void ListSet_add(ListSet this, int key) { /* ... */ } int ListSet_size(ListSet this) { /* ... */ } CountUnique.hl: int countUnique(int[] arr) { Set set = new ListSet(); for (int i = 0; i < arr.length(); ++i) set.add(arr[i]); int ret = set.size(); delete set; return ret; } 4

  6. • Higher-level • Lower-level language: language: ‣ Memory of ADTs ‣ Memory of machine words ‣ Can call externally defined functions ‣ Assembly like ‣ Java/C++ like 5

  7. • Higher-level • Lower-level language: language: ‣ Memory of ADTs ‣ Memory of machine words ‣ Can call externally defined functions ‣ Assembly like ‣ Java/C++ like ‣ Expr/If/While/Call ‣ Function pointers 5

  8. • Higher-level • Lower-level language: language: ‣ Memory of ADTs ‣ Memory of machine words ‣ Can call externally defined functions ‣ Assembly like ‣ Java/C++ like ‣ Expr/If/While/Call ‣ Function pointers Cito Bedrock IL 5

  9. Cito Syntax Notation: Syntax: State: 6

  10. Bedrock IL Syntax Syntax: State: 7

  11. Bedrock IL Syntax Syntax: State: 7

  12. • Higher-level • Lower-level language: language: ‣ Memory of ADTs ‣ Memory of machine words ‣ Can call externally defined functions ‣ Assembly like ‣ Java/C++ like ‣ Expr/If/While/Call ‣ Function pointers Cito Bedrock IL 8

  13. • Higher-level • Lower-level language: language: ‣ Memory of ADTs ‣ Memory of machine words ‣ Can call externally defined functions ‣ Assembly like ‣ Java/C++ like ‣ Expr/If/While/Call ‣ Function pointers Cito Bedrock IL 8

  14. Semantics of Call • Environment ( Ψ ) : Function address → Function specification • Function specification: ‣ Operational : callee’s body ‣ Axiomatic : relation of pre-call and post-call state 9

  15. Operational vs. Axiomatic Operational Specification Axiomatic Specification ☹ Language dependent � Language independent ☹ Need to be provided � No annotation burden Suitable for intra -language calls Suitable for inter -language calls 10

  16. Operational vs. Axiomatic Operational Specification Axiomatic Specification ☹ Language dependent � Language independent ☹ Need to be provided � No annotation burden Suitable for intra -language calls Suitable for inter -language calls We allow both! 10

  17. Prove Semantic Preservation • Method 1 : Prove simulation between source’s and target’s operational semantics • Method 2 : Express semantic preservation in a program logic for the target language 11

  18. Prove Semantic Preservation • Method 1 : Prove simulation between source’s and target’s operational semantics • Method 2 : Express semantic preservation in a program logic for the target language 11

  19. Prove Semantic Preservation • Method 1 : Prove simulation between source’s and target’s operational semantics • Method 2 : Express semantic preservation in a program logic for the target language 11

  20. s state A state B compile ≈ ≈ t ∃ state b state a 12

  21. ∀ A,B,a,b,s,t. safe(A,s) ⇒ s state A state B compile ≈ ≈ t ∃ state b state a 12

  22. ∀ A,B,a,b,s,t. safe(A,s) ⇒ s state A state B compile ≈ ≈ t ∃ state b state a The main compiler correctness theorem 12

  23. ∀ A,B,a,b,s,t. safe(A,s) ⇒ s PARTIAL CORRECTNESS ONLY state A state B compile ≈ ≈ t ∃ state b state a The main compiler correctness theorem 12

  24. ListSet.ll: typedef /* ... */ ListSet; ListSet ListSet_new() { /* ... */ } void ListSet_delete(ListSet this) { /* ... */ } void ListSet_add(ListSet this, int key) { /* ... */ } int ListSet_size(ListSet this) { /* ... */ } CountUnique.hl: int countUnique(int[] arr) { Set set = new ListSet(); for (int i = 0; i < arr.length(); ++i) set.add(arr[i]); int ret = set.size(); delete set; return ret; } 13

  25. ListSet.ll: typedef /* ... */ ListSet; ListSet ListSet_new() { /* ... */ } void ListSet_delete(ListSet this) { /* ... */ } void ListSet_add(ListSet this, int key) { /* ... */ } int ListSet_size(ListSet this) { /* ... */ } Abstract Data Types (ADTs) are a natural interface between languages CountUnique.hl: int countUnique(int[] arr) { Set set = new ListSet(); for (int i = 0; i < arr.length(); ++i) set.add(arr[i]); int ret = set.size(); delete set; return ret; } 13

  26. ADT • ADT objects are blackboxes, assessed only by axiomatically specified methods • Object state is specified by a functional(mathematical) model • Methods can: ‣ return new object ‣ in-place modify arguments ‣ delete arguments • Example: Set ‣ model : mathematical set of integers ‣ {} new () {return set ∅ } ‣ {x is a set} delete (x) {x is deleted} ‣ {x is set s } size (x) {x is still set s , return | s |} ‣ {x is set s } add (x, w) {x is set s ∪ {w} } 14

  27. ADT • ADT objects are blackboxes, assessed only by axiomatically specified methods • Object state is specified by a functional(mathematical) model • Methods can: ‣ return new object ‣ in-place modify arguments ‣ delete arguments • Example: Set ‣ model : mathematical set of integers ‣ {} new () {return set ∅ } ‣ {x is a set} delete (x) {x is deleted} ‣ {x is set s } size (x) {x is still set s , return | s |} ‣ {x is set s } add (x, w) {x is set s ∪ {w} } 14

  28. CountUnique.v: ! ! ! ! ! ! Definition count := Steps: cmodule "count" {{ cfunction "count"("arr", "len") return "ret" 1. Write a Cito program "set" <-- Call "ListSet"!"new"();; "i" <- 0;; ! ! ! While ("i" < "len") { "e" <-- Call "ArraySeq"!"read" ("arr", "i");; Call "ListSet"!"add"("set", "e");; "i" <- "i" + 1 };; "ret" <-- Call "ListSet"!"size"("set");; Call "ListSet"!"delete"("set") end }}. ! ! ! ! ! ! 15

  29. ExampleADT.v: Inductive ADTModel := | Arr : list W -> ADTModel | FSet : MSet.t W -> ADTModel ... Definition ListSet_addSpec := PRE[I] exists s n, I = [ADT (FSet s), SCA n] POST[O, R] exists s n any, O = [(ADT (FSet s), Some (FSet (add n s))), (SCA n, None)] /\ R = SCA any. CountUnique.v: ! ! ! ! ! ! ! Definition imports := [ ! ("ArraySeq"!"read", ArraySeq_readSpec), ! ("ListSet"!"add", ListSet_addSpec), ... ] ! Definition count := Steps: ! cmodule "count" {{ ! cfunction "count"("arr", "len") return "ret" ! 1. Write a Cito program "set" <-- Call "ListSet"!"new"();; "i" <- 0;; ! ! ! 2. Provide ADT specifications ! ! ! ! ! While ("i" < "len") { ! "e" <-- Call "ArraySeq"!"read" ("arr", "i");; ! Call "ListSet"!"add"("set", "e");; "i" <- "i" + 1 ! };; ! "ret" <-- Call "ListSet"!"size"("set");; ! Call "ListSet"!"delete"("set") ! end ! }}. ! Compiler already usable, no Definition count_compil := compile count imports. ! Theorem count_ok : moduleOk count_compil. ! programmer annotation burden compile_ok. ! Qed. ! ! ! ! 15

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend