1 / 15

Examples and Sets

Examples and Sets. Synthesize each of These. choose (( x,y ) => 10 x + 14 y == a ) . choose (( x,y ) => 10 x + 14 y == a && x < y ) . choose (( x,y ) => 10 x + 14 y == a && 0 < x && x < y ) . Constructive (Extended) Euclid’s Algorithm: gcd (10,14).

kedma
Download Presentation

Examples and Sets

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Examples and Sets

  2. Synthesize each of These choose((x,y) => 10 x + 14 y == a ) choose((x,y) => 10 x + 14 y == a && x < y) choose((x,y) => 10 x + 14 y == a && 0 < x && x < y)

  3. Constructive (Extended) Euclid’s Algorithm: gcd(10,14) 10 1410 4 6 4 4 2 2 2 0 10 x + 14 y == 10 x + 14 y == a

  4. Result of Synthesis for one Equation choose((x,y) => 10 x + 14 y == a ) assert ( ) valx = valy = check the solution: Change in requirements! Customer also wants: x < y does our solution work for e.g. a=2

  5. Idea: Eliminate Variables choose((x,y) => 10 x + 14 y == a && x < y) Cannot easily eliminate one of the x,y. • Eliminate both x,y, get one free - z x = 3/2 a + c1 z y = -a + c2 z c1 = ? c2= ? • Find general form, characterize all solutions, • parametric solution

  6. Idea: Eliminate Variables choose((x,y) => 10 x + 14 y == a && x < y) x = 3/2 a + c1 z y = -a + c2 z c1 = ? c2= ? 10 x0+ 14 y0 + (10 c1 + 14 c2) == a 10 c1+ 14 c2 == 0

  7. choose((x,y) => 10 x + 14 y == a && x < y) x = 3/2 a + 5 z y = -a - 7 z

  8. Synthesis for sets defsplitBalanced[T](s: Set[T]) : (Set[T], Set[T]) = choose((a: Set[T], b: Set[T]) ⇒ ( a union b == s && a intersect b == empty && a.size – b.size ≤ 1 && b.size – a.size ≤ 1 )) defsplitBalanced[T](s: Set[T]) : (Set[T], Set[T]) = val k = ((s.size + 1)/2).floor valt1 = k val t2 = s.size – k val s1 = take(t1, s) vals2 = take(t2, s minus s1) (s1, s2) s b a

  9. From Data Structures to Numbers • 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

  10. From Data Structures to Numbers • 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

  11. From Data Structures to Numbers • 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

  12. From Data Structures to Numbers • Observation: • Reasoning about collections reduces to reasoning about linear integer arithmetic! a.size == b.size&& a union b == bigSet && a intersect b == empty New specification: kA = kB a b bigSet

  13. From Data Structures to Numbers • Observation: • Reasoning about collections reduces to reasoning about linear integer arithmetic! a.size == b.size && a union b == bigSet && a intersect b == empty New specification: kA = kB && kA +kB = |bigSet| a b bigSet

More Related