Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ruzica Piskac Max Planck Institute for Software Systems, Germany.

Similar presentations


Presentation on theme: "Ruzica Piskac Max Planck Institute for Software Systems, Germany."— Presentation transcript:

1 Ruzica Piskac Max Planck Institute for Software Systems, Germany

2 Program = a sequence of commands describing what needs to be done val bigSet =.... val (setA, setB) = choose((a: Set, b: Set) ) => ( a.size == b.size && a union b == bigSet && a intersect b == empty)) val bigSet =.... val (setA, setB) = choose((a: Set, b: Set) ) => ( a.size == b.size && a union b == bigSet && a intersect b == empty)) Code val n = bigSet.size/2 val setA = take(n, bigSet) val setB = bigSet −− setA Code val n = bigSet.size/2 val setA = take(n, bigSet) val setB = bigSet −− setA

3 Program = a sequence of commands describing what needs to be done val bigSet =.... val (setA, setB) = choose((a: Set, b: Set) ) => ( a.size == b.size && a union b == bigSet && a intersect b == empty)) val bigSet =.... val (setA, setB) = choose((a: Set, b: Set) ) => ( a.size == b.size && a union b == bigSet && a intersect b == empty)) Code assert (bigSet.size is an even number) val n = bigSet.size/2 val setA = take(n, bigSet) val setB = bigSet −− setA Code assert (bigSet.size is an even number) val n = bigSet.size/2 val setA = take(n, bigSet) val setB = bigSet −− setA

4 Why should we sort data? Practical exercise: –Form a line, where you are sorted by your first name, from Aaron to Zoe

5 Data structure: A[0] = 23, A[1]=4, A[2]=6, A[3]=15, A[4]=5, A[5]=7

6 Array a 2 is a sorted version of array a 1 Define the counting function and

7 decision procedure answers whether the input formula is satisfiable or not  formula is satisfiable for x=0, y=1  formula is unsatisfiable 7 formula in some logic theorem prover based on DECISION PROCEDURES satisfiable(model) unsatisfiable (proof)

8 choose((h: Int, m: Int, s: Int) ⇒ ( h * 3600 + m * 60 + s == totalSeconds && h ≥ 0 && m ≥ 0 && m < 60 && s ≥ 0 && s < 60 )) choose((h: Int, m: Int, s: Int) ⇒ ( h * 3600 + m * 60 + s == totalSeconds && h ≥ 0 && m ≥ 0 && m < 60 && s ≥ 0 && s < 60 )) Returned code: assert (totalSeconds ≥ 0) val h = totalSeconds div 3600 val temp = totalSeconds + (-3600) * h val m = min(temp div 60, 59) val s = totalSeconds + (-3600) * h + (-60) * m

9 9 Code: val h = lambda val m = mu val val s = totalSeconds + (-3600) * lambda + (-60) * mu h * 3600 + m * 60 + s == totalSeconds

10 10 h * 3600 + m * 60 + s == totalSeconds 10 Resulting formula (new specifications): 0 ≤ λ, 0 ≤ μ, μ ≤ 59, 0 ≤ totalSeconds – 3600λ - 60μ, totalSeconds – 3600λ - 60μ ≤ 59 0 ≤ λ, 0 ≤ μ, μ ≤ 59, 0 ≤ totalSeconds – 3600λ - 60μ, totalSeconds – 3600λ - 60μ ≤ 59

11 expressing constraints as bounds on μ 0 ≤ λ, 0 ≤ μ, μ ≤ 59, 0 ≤ totalSeconds – 3600λ - 60μ, totalSeconds – 3600λ - 60μ ≤ 59 0 ≤ λ, 0 ≤ μ, μ ≤ 59, 0 ≤ totalSeconds – 3600λ - 60μ, totalSeconds – 3600λ - 60μ ≤ 59 0 ≤ λ, 0 ≤ μ, μ ≤ 59, μ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ μ 0 ≤ λ, 0 ≤ μ, μ ≤ 59, μ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ μ Code: val mu = min(59, (totalSeconds -3600* lambda) div 60) 11

12 combine each lower and upper bound basic simplifications Code: val lambda = totalSeconds div 3600 Preconditions: 0 ≤ totalSeconds 0 ≤ λ, 0 ≤ μ, μ ≤ 59, μ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ μ 0 ≤ λ, 0 ≤ μ, μ ≤ 59, μ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ μ 0 ≤ λ, 0 ≤ 59, 0 ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ 59 0 ≤ λ, 0 ≤ 59, 0 ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ ⌊ (totalSeconds – 3600λ)/60 ⌋, ⌈ (totalSeconds – 3600λ – 59)/60 ⌉ ≤ 59 0 ≤ λ, 60λ ≤ ⌊ totalSeconds /60 ⌋, ⌈ (totalSeconds –59)/60 ⌉ – 59 ≤ 60λ 0 ≤ λ, 60λ ≤ ⌊ totalSeconds /60 ⌋, ⌈ (totalSeconds –59)/60 ⌉ – 59 ≤ 60λ 12

13 Observation: –Reasoning about collections reduces to reasoning about linear integer arithmetic! 13 a.size == b.size && a union b == bigSet && a intersect b == empty a b bigSet

14 Observation: –Reasoning about collections reduces to reasoning about linear integer arithmetic! a.size == b.size && a union b == bigSet && a intersect b == empty a b bigSet

15 Observation: –Reasoning about collections reduces to reasoning about linear integer arithmetic! 15 a.size == b.size && a union b == bigSet && a intersect b == empty a b bigSet

16 Observation: –Reasoning about collections reduces to reasoning about linear integer arithmetic! 16 a.size == b.size && a union b == bigSet && a intersect b == empty a b bigSet New specification: kA = kB New specification: kA = kB

17 Observation: –Reasoning about collections reduces to reasoning about linear integer arithmetic! 17 a.size == b.size && a union b == bigSet && a intersect b == empty a b bigSet New specification: kA = kB && kA +kB = |bigSet| New specification: kA = kB && kA +kB = |bigSet|

18 Automatic code completion Flash Fill feature in the new Microsoft Excell (video!) –Available at: http://research.microsoft.com/en- us/um/people/sumitg/flashfillextensions.wmvhttp://research.microsoft.com/en- us/um/people/sumitg/flashfillextensions.wmv

19

20 InSynth – a tool for synthesis of code fragments (snippets) –interactive getting results in a short amount of time multiple solutions – a user needs to select –component based assemble program from given components (local values, API) –partial specification hard constraints – type constraints soft constraints - use of components “most likely” to be useful


Download ppt "Ruzica Piskac Max Planck Institute for Software Systems, Germany."

Similar presentations


Ads by Google