programs synthesis from
play

Programs Synthesis from Polymorphic Refinement Types Nadia - PowerPoint PPT Presentation

Programs Synthesis from Polymorphic Refinement Types Nadia Polikarpova Ivan Kuraj Armando Solar-Lezama Program synthesis Make a list with n copies of x declarative specification Synthesizer ? 2 50 replicate n x = if if n 0


  1. Programs Synthesis from Polymorphic Refinement Types Nadia Polikarpova Ivan Kuraj Armando Solar-Lezama

  2. Program synthesis “Make a list with n copies of x ” declarative specification Synthesizer ? 2 50 ⊨ replicate n x = if if n ≤ 0 executable th then Nil program els lse Cons x (replicate (dec n) x) 2

  3. Modular verification for synthesis 3

  4. Specifications for synthesis 1. supports automatic, modular refinement ? verification types 2. abstract and concise 3. sufficiently expressive Synthesizer replicate n x = if n ≤ 0 if th then Nil els lse Cons x (replicate (dec n) x) 4

  5. Demo: replicate -- Specification: replicate :: n: Nat → x: α → { ν : List α | len ν = n} replicate = ?? -- Components: zero :: { ν : Int | ν = 0} inc :: x: Int → {ν : Int | ν = x + 1} dec :: x: Int → {ν : Int | ν = x - 1} leq :: x: Int → y: Int → {Bool | ν = ( x ≤ y) } neq :: x: Int → y: Int → { Bool | ν = (x ≠ y) } 5

  6. Synthesis from refinement types Γ ⊢ ?? :: T 6

  7. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... 7

  8. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... I. top-down enumerative search 8

  9. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: U ?? :: V :: T I. top-down enumerative search 9

  10. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: U ?? :: V :: T I. top-down enumerative search 10

  11. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: _ :: T’ I. top-down enumerative search 11

  12. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: _ :: T’ I. top-down enumerative search 12

  13. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: U I. top-down enumerative search II. round-trip type checking 13

  14. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: U I. top-down enumerative search II. round-trip type checking 14

  15. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: _ ?? :: U ?? :: V I. top-down enumerative search II. round-trip type checking 15

  16. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... ?? :: _ ?? :: _ :: T’ ?? :: U ?? :: V I. top-down enumerative search II. round-trip type checking 16

  17. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... if f then else ?? :: Bool I. top-down enumerative search II. round-trip type checking 17

  18. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... if f then else P ⊢ ?? :: T I. top-down enumerative search II. round-trip type checking III. condition abduction 18

  19. Synthesis from refinement types x 1 :: T 1 ; ... Γ ⊢ ?? :: T φ 1 ; ... if f then else ¬P ⊢ ??::T P ⊢ ?? :: T ?? :: Bool ??::{Bool| ν =P} I. top-down enumerative search II. round-trip type checking III. condition abduction 19

  20. Round-trip type checking Γ ⊢ ?? :: {List Neg | len ν ≥ 5} 20

  21. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros replicate ; Cons ⊢ ?? :: {List Neg | len ν ≥ 5} 21

  22. Round-trip type checking Nil :: {List a | len ν = 0} Nil ; 0 ; 5 ; -5 zeros replicate ; Cons ⊢ ?? :: {List Neg | len ν ≥ 5} Nil :: {List Neg|len ν = 0} 22

  23. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros replicate ; Cons ⊢ ?? :: {List Neg | len ν ≥ 5} ?? :: _ → {List Neg | len ν ≥ 5} 23

  24. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros zeros :: n:Nat → {List Zero | len ν = n} replicate ; Cons ⊢ ?? :: {List Neg | len ν ≥ 5} ?? :: _ → {List Neg | len ν ≥ 5} zeros :: n:Nat → {List Zero | len ν = n} 24

  25. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate Cons ?? :: _ → _ → {List Neg|len ν ≥ 5} 25

  26. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate :: n: Nat → x: a → {List a | len ν = n} replicate Cons ?? :: _ → _ → ?? :: Nat ?? :: Neg {List Neg|len ν ≥ 5} replicate :: n: Nat → x: Neg → {List Neg | len ν = n} 26

  27. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate :: n: Nat → x: a → {List a | len ν = n} replicate Cons ?? :: _ → _ → ?? :: Nat {List Neg|len ν ≥ 5} 0 :: { ν = 0 } replicate :: n: Nat → x: Neg → {List Neg | len ν = n} 27

  28. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate :: n: Nat → x: a → {List a | len ν = n} replicate Cons ?? :: _ → _ → ?? :: Nat ?? :: Neg :: {List Neg | len ν = 0} {List Neg|len ν ≥ 5} 0 :: { ν = 0 } replicate :: n: Nat → x: Neg → {List Neg | len ν = n} 28

  29. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate :: n: Nat → x: a → {List a | len ν = n} replicate Cons ?? :: _ → _ → ?? :: Nat ?? :: Neg :: {List Neg | len ν = 0} :: {List Neg | len ν = 5} {List Neg|len ν ≥ 5} 0 :: { ν = 0 } 5 :: { ν = 5 } replicate :: n: Nat → x: Neg → {List Neg | len ν = n} 29

  30. Round-trip type checking Nil ; 0 ; 5 ; -5 zeros ⊢ ?? :: {List Neg | len ν ≥ 5} replicate :: n: Nat → x: a → {List a | len ν = n} replicate Cons ?? :: _ → _ → ?? :: Nat ?? :: Neg :: {List Neg | len ν = 0} :: {List Neg | len ν = 5} {List Neg|len ν ≥ 5} 5 :: { ν = 5 } 0 :: { ν = 0 } -5 :: { ν = -5 } 5 :: { ν = 5 } 0 :: { ν = 0 } replicate :: n: Nat → x: Neg → {List Neg | len ν = n} 30

  31. Condition abduction Nil ; 0 ; -5 ; n :: Nat ( ≤ ) ; (≠) ⊢ ?? :: {List Neg | len ν = n} P 31

  32. Condition abduction Nil ; 0 ; -5 ; n :: Nat ( ≤ ) ; (≠) ⊢ ?? :: {List Neg | len ν = n} n ≤ 0 P Nil :: {List Neg |len ν = 0} 32

  33. Condition abduction Nil ; 0 ; -5 ; n :: Nat ( ≤ ) ; (≠) ⊢ ?? :: {List Neg | len ν = n} n ≤ 0 P Nil :: {List Neg |len ν = 0} if if n ≤ 0 th then Nil els lse Γ;¬(n ≤ 0) ⊢ ?? :: {List Neg | len ν = n} 33

  34. Liquid abduction n ≥ 0 ∧ len ν = 0 ∧ ⇒ len ν = n P n :: Nat Nil :: {List a | len ν = 0} 34

  35. Liquid abduction n ≥ 0 ∧ len ν = 0 ∧ ∧ ¬( len ν = n) ⇒ len ν = n P ★ ≤ ★ ★ ≠ ★ 35

  36. Liquid abduction n ≥ 0 ∧ len ν = 0 ∧ ⇒ len ν = n P ★ ≤ ★ n ≤ 0 ★ ≠ ★ n ≤ -5 -5 ≤ n n ≠ 0 n ≠ -5 36

  37. Liquid abduction core [ ] UNSAT n ≥ 0 ∧ len ν = 0 ∧ ∧ ¬( len ν = n) ⇒ len ν = n P ★ ≤ ★ n ≤ 0 ★ ≠ ★ n ≤ -5 -5 ≤ n n ≠ 0 n ≠ -5 37

  38. Liquid abduction core [ ] UNSAT n ≥ 0 ∧ len ν = 0 ∧ ∧ ¬( len ν = n) ⇒ len ν = n P ★ ≤ ★ n ≤ 0 ★ ≠ ★ n ≤ -5 -5 ≤ n n ≠ 0 n ≠ -5 38

  39. Evaluation Lists take, drop, delete, zip with, reverse, de- duplicate, fold, length/append with fold, ... No roundtrip type checking 27 Sorting 31 Naive liquid abduction 64 benchmarks insertion s., selection s., merge s., quick s. 6 s Binary Search Trees member, insert, delete Custom datatypes 37 AST desugaring, address book 33 Balanced trees RBT & AVL insertion, AVL deletion 20 s > > 120 s 39

  40. Synthesis of recursive programs strong guarantees pre-/post- refinement conditions types [ Leon: OOPSLA’13] [ Myth+ , POPL’16] [ Escher : CAV’13] input-output weak [ Myth : PLDI’15] examples [ λ 2 : PLDI’15] guarantees easy to verify hard to verify 40

  41. http://tiny.cc/synquid 41

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