Programming with Invariants through Targeted Synthesis. John Sarracino

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programming with Invariants through Targeted Synthesis. John Sarracino"

Transkrypt

1 Programming with Invariants through Targeted Synthesis John Sarracino 1

2 Programming is Hard

3 Programming is Hard Therac

4 Programming is Hard Ariane

5 Programming is Hard Maersk 2017

6 Programming is Hard Windows 2018

7 Programming is Hard Windows always

8 Computers are a Sadness and I am the cure

9 Programs are a Sadness and I am the cure

10 Software Invariants ubi_assert(e->num!= e1->num); if (keyproto.getkeyvalue().size()!= Ed25519Verify.PUBLIC_KEY_LEN) { throw new GeneralSecurityException( invalid Ed25519 public key: incorrect key length ); ensure cat_set : has_category(cat) end

11 Software Invariants ubi_assert(e->num!= e1->num); C if (keyproto.getkeyvalue().size()!= Ed25519Verify.PUBLIC_KEY_LEN) { throw new GeneralSecurityException( invalid Ed25519 public key: incorrect key length ); ensure cat_set : has_category(cat) end

12 Software Invariants ubi_assert(e->num!= e1->num); C if (keyproto.getkeyvalue().size()!= Ed25519Verify.PUBLIC_KEY_LEN) { throw new GeneralSecurityException( invalid Ed25519 public key: incorrect key length ); Java ensure cat_set : has_category(cat) end

13 Software Invariants ubi_assert(e->num!= e1->num); C if (keyproto.getkeyvalue().size()!= Ed25519Verify.PUBLIC_KEY_LEN) { throw new GeneralSecurityException( invalid Ed25519 public key: incorrect key length ); Java ensure cat_set : has_category(cat) end Eiffel

14 Software Invariants ubi_assert(e->num!= e1->num); C if (keyproto.getkeyvalue().size()!= Ed25519Verify.PUBLIC_KEY_LEN) { throw new GeneralSecurityException( invalid Ed25519 public key: incorrect key length ); Language agnostic, Manually maintained. Java ensure cat_set : has_category(cat) end Eiffel

15 Manual Invariant Programming Invariants Algorithm

16 Manual Invariant Programming Invariants Algorithm Code

17 Manual Invariant Programming Invariants Algorithm Code

18 Why are Manual Invariants difficult? Code changes => Programmer checks, maintains invariant Invariant changes => Programmer checks, maintains code

19 The code change problem: Maintaining Invariants Invariant: All urls are in the urlset

20 The code change problem: Maintaining Invariants Invariant: All urls are in the urlset

21 The code change problem: Maintaining Invariants Invariant: All urls are in the urlset

22 The code change problem: Maintaining Invariants Tedious and error-prone, particularly with a large codebase Invariant: All urls are in the urlset

23 The invariant change problem: Maintaining Code Invariant: All urls are in the urlset

24 The invariant change problem: Maintaining Code Invariant: All urls are in the urlset The allocset contains the urlset

25 The invariant change problem: Maintaining Code Even more tedious and error-prone Invariant: All urls are in the urlset The allocset contains the urlset

26 My thesis statement Compiling and generating invariants is useful, novel, and broadly applicable.

27 My thesis proposal Compiling and generating invariants is useful, novel, and broadly applicable. I propose a general framework for maintaining invariants

28 Proposed Work Data invariant calculus Extensions Invariants for Security GUI invariants

29 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

30 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

31 Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i]

32 Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i]

33 Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i]

34 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black

35 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black

36 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black

37 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

38 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

39 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

40 Budgeting Code for (let index = 0; index!= week.length; ++index) { week[index].oninput = () => { let w = parsefloat(week[index].textcontent); month[index].textcontent = w * 4; year[index].textcontent = w * 12 * 4; refreshcolors(index); month[index].oninput = () => { let m = parsefloat(month[index].textcontent); week[index].textcontent = m / 4; year[index].textcontent = m * 12; refreshcolors(index); year[index].oninput = () => { let y = parsefloat(year[index].textcontent); week[index].textcontent = y / (4 * 12); month[index].textcontent = y / 12; refreshcolors(index); document.getelementbyid('evenpicker').oninput = () => { evencolor = document.getelementbyid('evenpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor; document.getelementbyid('oddpicker').oninput = () => { oddcolor = document.getelementbyid('oddpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor;

41 Budgeting Code document.getelementbyid('evenpicker').oninput = () => { evencolor = document.getelementbyid('evenpicker').value; for (let index = 0; index!= week.length; ++index) { for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].oninput = () => { week[index].style.backgroundcolor = evencolor; let w = parsefloat(week[index].textcontent); month[index].style.backgroundcolor = evencolor; month[index].textcontent = w * 4; year[index].style.backgroundcolor = evencolor; year[index].textcontent = w * 12 * 4; else { refreshcolors(index); week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; Tedious even for this year[index].style.backgroundcolor simple example = oddcolor; month[index].oninput = () => { let m = parsefloat(month[index].textcontent); week[index].textcontent = m / 4; year[index].textcontent = m * 12; refreshcolors(index); document.getelementbyid('oddpicker').oninput = () => { oddcolor = document.getelementbyid('oddpicker').value; for (let index = 0; index!= week.length; ++index) { year[index].oninput = () => { if (index % 2 == 0) { let y = parsefloat(year[index].textcontent); week[index].style.backgroundcolor = evencolor; week[index].textcontent = y / (4 * 12); month[index].style.backgroundcolor = evencolor; month[index].textcontent = y / 12; year[index].style.backgroundcolor = evencolor; refreshcolors(index); else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor;

42 Budgeting Code Invariants Algorithm for (let index = 0; index!= week.length; ++index) { week[index].oninput = () => { let w = parsefloat(week[index].textcontent); month[index].textcontent = w * 4; year[index].textcontent = w * 12 * 4; refreshcolors(index); month[index].oninput = () => { let m = parsefloat(month[index].textcontent); week[index].textcontent = m / 4; year[index].textcontent = m * 12; refreshcolors(index); year[index].oninput = () => { let y = parsefloat(year[index].textcontent); week[index].textcontent = y / (4 * 12); month[index].textcontent = y / 12; refreshcolors(index); document.getelementbyid('evenpicker').oninput = () => { evencolor = document.getelementbyid('evenpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor; document.getelementbyid('oddpicker').oninput = () => { oddcolor = document.getelementbyid('oddpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor;

43 Budgeting Code Invariants Algorithm for (let index = 0; index!= week.length; ++index) { week[index].oninput = () => { let w = parsefloat(week[index].textcontent); month[index].textcontent = w * 4; year[index].textcontent = w * 12 * 4; refreshcolors(index); month[index].oninput = () => { let m = parsefloat(month[index].textcontent); week[index].textcontent = m / 4; year[index].textcontent = m * 12; refreshcolors(index); year[index].oninput = () => { let y = parsefloat(year[index].textcontent); week[index].textcontent = y / (4 * 12); month[index].textcontent = y / 12; refreshcolors(index); document.getelementbyid('evenpicker').oninput = () => { evencolor = document.getelementbyid('evenpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor; document.getelementbyid('oddpicker').oninput = () => { oddcolor = document.getelementbyid('oddpicker').value; for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].style.backgroundcolor = evencolor; month[index].style.backgroundcolor = evencolor; year[index].style.backgroundcolor = evencolor; else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor;

44 Budgeting Code Invariants Algorithm document.getelementbyid('evenpicker').oninput = () => { evencolor = document.getelementbyid('evenpicker').value; for (let index = 0; index!= week.length; ++index) { for (let index = 0; index!= week.length; ++index) { if (index % 2 == 0) { week[index].oninput = () => { week[index].style.backgroundcolor = evencolor; let w = parsefloat(week[index].textcontent); month[index].style.backgroundcolor = evencolor; month[index].textcontent = w * 4; year[index].style.backgroundcolor = evencolor; year[index].textcontent = w * 12 * 4; refreshcolors(index); Vast majority else of { code week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor; month[index].oninput manually = () => { maintains invariant let m = parsefloat(month[index].textcontent); week[index].textcontent = m / 4; year[index].textcontent = m * 12; refreshcolors(index); document.getelementbyid('oddpicker').oninput = () => { oddcolor = document.getelementbyid('oddpicker').value; for (let index = 0; index!= week.length; ++index) { year[index].oninput = () => { if (index % 2 == 0) { let y = parsefloat(year[index].textcontent); week[index].style.backgroundcolor = evencolor; week[index].textcontent = y / (4 * 12); month[index].style.backgroundcolor = evencolor; month[index].textcontent = y / 12; year[index].style.backgroundcolor = evencolor; refreshcolors(index); else { week[index].style.backgroundcolor = oddcolor; month[index].style.backgroundcolor = oddcolor; year[index].style.backgroundcolor = oddcolor;

45 Manual Invariant Programming Invariants Algorithm Code

46 Invariant Synthesis Invariants Algorithm Code

47 Language Design Goals Programmer thinks about invariants once Compiler automatically handles invariants

48 Compiling Invariants Program Synthesis compiles invariants* Inputs: 1) program with holes e.g. x :=??(y, x) 2) precondition e.g. y = 15 3) requirement e.g. x = y

49 Compiling Invariants Program Synthesis compiles invariants* Inputs: expression 1) program using with holes x and e.g. y x :=??(y, x) 2) precondition e.g. y = 15 3) requirement e.g. x = y

50 Language Design Goals Programmer thinks about invariants once Compiler automatically handles invariants

51 Naive Algorithm Synthesize at the end of every function. Use invariants as preconditions, requirements.

52 Naive Algorithm function updateweeks(value, i) { weeks[i] = value; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = value; months[i] =??(value, i, weeks[i]); years[i] =??(value, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

53 Naive Algorithm function updateweeks(value, i) { weeks[i] = value; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = value; months[i] = 4*weeks[i]; years[i] = 4*12*weeks[i]; 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

54 Naive Algorithm function updateweeks(value, i) { weeks[i] = value; Does not scale to realistic programs Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = value; months[i] =??(value, i, weeks[i]); years[i] =??(value, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

55 Problem: Loops don t scale function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; for (let i = 0; i < weeks.length; ++i) { months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

56 Problem: Loops don t scale function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Timeout even for this simple example Pre 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; for (let i = 0; i < weeks.length; ++i) { months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

57 Key insight: move hole inside loop function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; for (let i = 0; i < weeks.length; ++i) { months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

58 Key insight: move hole inside loop function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

59 Simplification: No quantification!! function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

60 Simplification: No quantification!! function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

61 Simplification: No quantification!! function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = weeks[i] * scale; months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

62 Simplification: No quantification!! function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Targeted Synthesis! Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = weeks[i] * scale; months[i] =??(scale, i, weeks[i]); years[i] =??(scale, i, weeks[i]); 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

63 Simplification: No quantification!! function adjustforinflation(scale) { for (let i = 0; i < weeks.length; ++i) { weeks[i] = weeks[i] * scale; Pre Req 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] weeks[i] = weeks[i] * scale; months[i] = months[i] * scale; years[i] = years[i] * scale; 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i]

64 Spyder Separate invariant, imperative programs Compiler combines with targeted synthesis

65 Spyder Automatic Invariant maintenance Separate invariant, imperative programs Compiler combines with targeted synthesis

66 Imperative Language for (w: int) with idx in (weeks) { if (idx == i) { w = val;

67 Imperative Language for (w: int) with idx in (weeks) { if (idx == i) { w = val; Loops and Arrays

68 Imperative Language for (w: int) with idx in (weeks) { if (idx == i) { w = val; In-out iterators

69 Imperative AST

70 Invariant Language foreach (week, month) in (weeks, months) { week = 4 * month

71 Invariant Language foreach (week, month) in (weeks, months) { week = 4 * month Elementwise Quantification

72 Invariant AST

73 Compilation Algorithm

74 Language Design Goals Programmer thinks about invariants once Compiler automatically handles invariants

75 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

76 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

77 Format Invariants Code Explanatory Caption Problem/Result

78 Simple Example x > 2 * y y = y + 1;

79 Simple Example x > 2 * y y = y + 1; X ~ Y

80 Simple Example x > 2 * y y = y + 1; X ~ Y Y edited

81 Simple Example x > 2 * y y = y + 1; X ~ Y Y edited x =??(x, y);

82 Simple Example x > 2 * y y = y + 1; X, Y in scope x =??(x, y);

83 Simple Example x > 2 * y y = y + 1; x =??(x, y);

84 Simple Example x > 2 * y y = y + 1; x = x + 2;

85 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

86 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

87 Extending Loops foreach (w, m) in (weeks, months){ w = 4 * m for (w: int) in (weeks) { w = w * 1.05;

88 Extending Loops foreach (w, m) in (weeks, months){ w = 4 * m for (w: int) in (weeks) { w = w * 1.05; weeks ~ months

89 Extending Loops foreach (w, m) in (weeks, months){ w = 4 * m for (w: int) in (weeks) { w = w * 1.05; weeks ~ months need months

90 Extending Loops foreach (w, m) in (weeks, months){ w = 4 * m for (w: int) in (weeks) { w = w * 1.05; weeks ~ months need months

91 Extending Loops foreach (w, m) in (weeks, months){ w = 4 * m for (w: int, m: int) in (weeks, months){ w = w * 1.05; weeks ~ months need months

92 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

93 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

94 Simplifying Invariants foreach (w, m) in (weeks, months){ w = 4 * m for (w: int, m: int) in (weeks, months){ w = w * 1.05;

95 Simplifying Invariants foreach (w, m) in (weeks, months){ w = 4 * m for (w: int, m: int) in (weeks, months){ w = w * 1.05; Key insight: foreach body <=> for invariant

96 Simplifying Invariants foreach (w, m) in (weeks, months){ w = 4 * m for (w: int, m: int) in (weeks, months){ w = w * 1.05; Key insight: foreach body <=> for invariant m =??(m, w);

97 Simplifying Invariants foreach (w, m) in (weeks, months){ w = 4 * m for (w: int, m: int) in (weeks, months){ w = w * 1.05; Key insight: foreach body <=> for invariant m = m * 1.05;

98 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

99 Compilation Algorithm 1) bring necessary variables into scope 2) specialize invariants to loops 3)??? (find template) 4) profit (synthesize)

100 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

101 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

102 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] Need to synthesize loops, conditionals 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

103 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] Need to synthesize loops, conditionals 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

104 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue;

105 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; bkg ~ bkgcolors bkg edited

106 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; bkg ~ bkgcolors bkg edited for (color: int) in (bkgcolors){ color =??(bkg, blue);

107 Loops foreach (color) in (bkgcolors) { color = bkg That s the skeleton bkg = blue; What about the invariant? for (color: int) in (bkgcolors){ color =??(bkg, blue);

108 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; for (color: int) in (bkgcolors){ color =??(bkg, blue);

109 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; Use foreach spec for body for (color: int) in (bkgcolors){ color =??(bkg, blue);

110 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; for (color: int) in (bkgcolors){ color =??(bkg, blue);

111 Synthesizing Loops foreach (color) in (bkgcolors) { color = bkg bkg = blue; for (color: int) in (bkgcolors){ color = blue;

112 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] Need to synthesize loops, conditionals 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

113 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Example Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] =years[i] Need to synthesize loops, conditionals 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc

114 Synthesizing Conditionals (idx % 2 = 0) ==> color = even even = red;

115 Synthesizing Conditionals (idx % 2 = 0) ==> color = even even = red; Implications as conditionals

116 Synthesizing Conditionals (idx % 2 = 0) ==> color = even even = red; Implications as conditionals if (idx % 2 == 0) { color =??(even, red, idx);

117 Synthesizing Conditionals (idx % 2 = 0) ==> color = even even = red; if (idx % 2 == 0) { color =??(even, red, idx);

118 Synthesizing Conditionals (idx % 2 = 0) ==> color = even even = red; if (idx % 2 == 0) { color = even;

119 Case studies* Game of Life (1d, 2d) Budgeting calculator Split expenses spreadsheet *

120 <latexit sha1_base64="tr8s+q96aeq/uprhjs8lwyt4d/o=">aaacr3icfva9swnbfnylx/h8orw0wq2cvbgtqrshagmzwxxa7gx7m5dkye7dsbuxeel+ny2tnx/bxkirszfjfterbxagew94sxmmncntuq9wbmv1bx0jv2lvbe/s7jn7b1uvp5jchcy8lvwqkoasgopmmkm9kubeykew9m4n81ofpgjx9kchcqscdclwzproizwdr78ds8i5zkwmrdwc3mab9pkwx0hhpopbrljgise0h33fnjmc/2cydjmgplnwi+4uejl4gsmgdowm8+k3ypokidtlrkmg5yy6gbgpgeuwtv1uqwkska40di2iabwmpj2m8alrwtjkmy/sekroo0zekduuodkurhfv4mwi/jvrplp9fyxylkqaijo71e451jgelipbtalvfggiozkzrjh2isrum+ptu4k3+ovluj0vem7ru78olg6yovlocj2gm+shs1rcd6imkoiij/sgptcn9wy9w1/w92w1z2weq/qloesh+vkwmw==</latexit> <latexit sha1_base64="tr8s+q96aeq/uprhjs8lwyt4d/o=">aaacr3icfva9swnbfnylx/h8orw0wq2cvbgtqrshagmzwxxa7gx7m5dkye7dsbuxeel+ny2tnx/bxkirszfjfterbxagew94sxmmncntuq9wbmv1bx0jv2lvbe/s7jn7b1uvp5jchcy8lvwqkoasgopmmkm9kubeykew9m4n81ofpgjx9kchcqscdclwzproizwdr78ds8i5zkwmrdwc3mab9pkwx0hhpopbrljgise0h33fnjmc/2cydjmgplnwi+4uejl4gsmgdowm8+k3ypokidtlrkmg5yy6gbgpgeuwtv1uqwkska40di2iabwmpj2m8alrwtjkmy/sekroo0zekduuodkurhfv4mwi/jvrplp9fyxylkqaijo71e451jgelipbtalvfggiozkzrjh2isrum+ptu4k3+ovluj0vem7ru78olg6yovlocj2gm+shs1rcd6imkoiij/sgptcn9wy9w1/w92w1z2weq/qloesh+vkwmw==</latexit> <latexit sha1_base64="tr8s+q96aeq/uprhjs8lwyt4d/o=">aaacr3icfva9swnbfnylx/h8orw0wq2cvbgtqrshagmzwxxa7gx7m5dkye7dsbuxeel+ny2tnx/bxkirszfjfterbxagew94sxmmncntuq9wbmv1bx0jv2lvbe/s7jn7b1uvp5jchcy8lvwqkoasgopmmkm9kubeykew9m4n81ofpgjx9kchcqscdclwzproizwdr78ds8i5zkwmrdwc3mab9pkwx0hhpopbrljgise0h33fnjmc/2cydjmgplnwi+4uejl4gsmgdowm8+k3ypokidtlrkmg5yy6gbgpgeuwtv1uqwkska40di2iabwmpj2m8alrwtjkmy/sekroo0zekduuodkurhfv4mwi/jvrplp9fyxylkqaijo71e451jgelipbtalvfggiozkzrjh2isrum+ptu4k3+ovluj0vem7ru78olg6yovlocj2gm+shs1rcd6imkoiij/sgptcn9wy9w1/w92w1z2weq/qloesh+vkwmw==</latexit> <latexit sha1_base64="tr8s+q96aeq/uprhjs8lwyt4d/o=">aaacr3icfva9swnbfnylx/h8orw0wq2cvbgtqrshagmzwxxa7gx7m5dkye7dsbuxeel+ny2tnx/bxkirszfjfterbxagew94sxmmncntuq9wbmv1bx0jv2lvbe/s7jn7b1uvp5jchcy8lvwqkoasgopmmkm9kubeykew9m4n81ofpgjx9kchcqscdclwzproizwdr78ds8i5zkwmrdwc3mab9pkwx0hhpopbrljgise0h33fnjmc/2cydjmgplnwi+4uejl4gsmgdowm8+k3ypokidtlrkmg5yy6gbgpgeuwtv1uqwkska40di2iabwmpj2m8alrwtjkmy/sekroo0zekduuodkurhfv4mwi/jvrplp9fyxylkqaijo71e451jgelipbtalvfggiozkzrjh2isrum+ptu4k3+ovluj0vem7ru78olg6yovlocj2gm+shs1rcd6imkoiij/sgptcn9wy9w1/w92w1z2weq/qloesh+vkwmw==</latexit> Game of Life Invariants 8i.model[i] =) view[i] =black 8i.!model[i] =) view[i] =white running () start enabled <latexit sha1_base64="xvg5tdsq10kirbnjgu7jdffp6pi=">aaacbhicbvc7tsmwfhxkq5rxglglryxevcuiccykfsyi0yfurjhj3lrwhseyhaqq6sdcr7awgbarh8hg3+c2gadlsjaozrnh9j1hxpnsjvntvdbwnza3qtu1nd29/qp78kir0lxs6ncup7ifegwccehopjn0mwkkctn0wvhnzo89gfqsffd6kogfkkfgmanegymw6zixgokh9lgcy6wj1f4agph8fngnp+nmgvejw5igkteo7c8vsmmegncue6ugrpnpvzb3msphwvnybrmhyzkegagcjkd8yr7efj8ajcjxks0rgs/v34mcjepnktbmjksp1li3e//zbrmor/yciszxiojiotjnwkd41giomasq+cqqqiuzf8v0rcsh2vrwmyw4yyuvku5503wa7t1fo3vd1lffdxsczpclllel3ai26ickhtezekvv1pp1yr1bh4vrilvmjtefwj8/6iyypw==</latexit> <latexit sha1_base64="xvg5tdsq10kirbnjgu7jdffp6pi=">aaacbhicbvc7tsmwfhxkq5rxglglryxevcuiccykfsyi0yfurjhj3lrwhseyhaqq6sdcr7awgbarh8hg3+c2gadlsjaozrnh9j1hxpnsjvntvdbwnza3qtu1nd29/qp78kir0lxs6ncup7ifegwccehopjn0mwkkctn0wvhnzo89gfqsffd6kogfkkfgmanegymw6zixgokh9lgcy6wj1f4agph8fngnp+nmgvejw5igkteo7c8vsmmegncue6ugrpnpvzb3msphwvnybrmhyzkegagcjkd8yr7efj8ajcjxks0rgs/v34mcjepnktbmjksp1li3e//zbrmor/yciszxiojiotjnwkd41giomasq+cqqqiuzf8v0rcsh2vrwmyw4yyuvku5503wa7t1fo3vd1lffdxsczpclllel3ai26ickhtezekvv1pp1yr1bh4vrilvmjtefwj8/6iyypw==</latexit> <latexit sha1_base64="xvg5tdsq10kirbnjgu7jdffp6pi=">aaacbhicbvc7tsmwfhxkq5rxglglryxevcuiccykfsyi0yfurjhj3lrwhseyhaqq6sdcr7awgbarh8hg3+c2gadlsjaozrnh9j1hxpnsjvntvdbwnza3qtu1nd29/qp78kir0lxs6ncup7ifegwccehopjn0mwkkctn0wvhnzo89gfqsffd6kogfkkfgmanegymw6zixgokh9lgcy6wj1f4agph8fngnp+nmgvejw5igkteo7c8vsmmegncue6ugrpnpvzb3msphwvnybrmhyzkegagcjkd8yr7efj8ajcjxks0rgs/v34mcjepnktbmjksp1li3e//zbrmor/yciszxiojiotjnwkd41giomasq+cqqqiuzf8v0rcsh2vrwmyw4yyuvku5503wa7t1fo3vd1lffdxsczpclllel3ai26ickhtezekvv1pp1yr1bh4vrilvmjtefwj8/6iyypw==</latexit> <latexit sha1_base64="xvg5tdsq10kirbnjgu7jdffp6pi=">aaacbhicbvc7tsmwfhxkq5rxglglryxevcuiccykfsyi0yfurjhj3lrwhseyhaqq6sdcr7awgbarh8hg3+c2gadlsjaozrnh9j1hxpnsjvntvdbwnza3qtu1nd29/qp78kir0lxs6ncup7ifegwccehopjn0mwkkctn0wvhnzo89gfqsffd6kogfkkfgmanegymw6zixgokh9lgcy6wj1f4agph8fngnp+nmgvejw5igkteo7c8vsmmegncue6ugrpnpvzb3msphwvnybrmhyzkegagcjkd8yr7efj8ajcjxks0rgs/v34mcjepnktbmjksp1li3e//zbrmor/yciszxiojiotjnwkd41giomasq+cqqqiuzf8v0rcsh2vrwmyw4yyuvku5503wa7t1fo3vd1lffdxsczpclllel3ai26ickhtezekvv1pp1yr1bh4vrilvmjtefwj8/6iyypw==</latexit> Code State transition Interactive display Start/Stop toggle * By Kieff - Own work, CC BY-SA 3.0,

121 <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="4zi68pjubg9qod0oec37qfpgx9m=">aaacg3icbvc7tsmwfhxkq5rxgzhfokjiqpikczaichbgitgh1esv4960vu0ksh1qffu/wpgvfgyqykji4g9w0g7qcqajc+61zz1+zjnstv1tfvzw19y3ipulre2d3b3y/kfbrymk0kirj2txjwo4c6glmebqjsuq4xpo+oprzo/cg1qscu/0jazpkghiakajnlk/xhodsblomcnv/aawvj3m4cs6trhlhekacgdrqdo1jn1o6lhfrthvowdejs6cvnaczx750x1enbeqasqjuj3hjrwxeqkz5tatuymc2dxmhtazncqcljfmt03xivegjolmy+bc/b2reqhurphmuha9uotejv7n9ridxhgpc+neq0hnhwujxzrcwvf4wcrqzsegecqzyyrpiehctamzzepwfk9eju1a1bgrzu1zpxe1r6oijtaxokuookcndioaqiuoektp6bw9wu/wi/vufcxgc9z85xd9gfx1a/tqn34=</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="l1v+nvwnndd8x8c8v2qztoniuwe=">aaachhicbvdlssnafj3uv62vqes3g0vwfziq6eyounfzwt4gcwuymbrdzzjhziku0g9x46+4cagigxecf+m0zujbd1w4nhpvzl0nyhhv2nw/rcrk6tr6rnwztrw9s7tn7x90lmgljm0smjc9ccncaerammpgepkkieemdkprzczvphcpqejv9tgjiuedlcyui22kvn0wjeiixicfjqmaixg24bx0yec5wyaogi0gpg2njuk4elbv113hlqcxivesoijr6tufqsxwzkmqmunk+z6b6xccpkaykwktybxjeb6hafentrenkpwux03hivfialy0lwpyql8njogrnear6erid9winxp/8/xcj5fhhkzzrkmk5x8loynawflsmkasym3ghiasqdkv4igscgutz82e4c2evew6dcdzhe/uvn68luooginwde6bby5ae9ycfmgddb7bm3gfb9at9wk9wx/z1opvzhycp7c+fgcxfp84</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="c5tq+pzsrkxuddn5byednlyolcm=">aaachxicbvbnswmxem3wr1q/vj16crbbu9ktbb0irs8ek9hw6c4lm07b0cs7jnlckf0jxvwrxjwo4sgl+g9mt3vq1gcdj/dmkpkxjzxp43nftmftfwnzq7hd2tnd2z9wd49aok4vhsaneaweiqkbmwlnwwyhh0qberghdjs6mfvtmsjnynlvjgmeggwk6znkjjw6bi3ox4pwjhmu2ape3mnvfiu9hdbhfwcno9ggw0krwrhk9mlxlxsvlwnejx5oyihho+t+br2ypgkkozxo3fg9xirtogyjhgalinwqedoia+hykokahu6z62b4zco9bne0jq3o1n8tuyk0nojidgpihnrzm4v/ez3u9c/dkznjakdsxuf9lgmt43luumcuummnlhcqmn0v0yfrhbobammg4c+fvepa1yrvvfy7wrl+ncdrrcfofj0jh12gorpfddrefd2iz/sk3pwn58v5dz4wrqunnzlgf+b8/qcamp+4</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> <latexit sha1_base64="p4jtto0v5ou49ox5jwon3hnwr44=">aaacghicbvdlssnafj3uv62vqks3g0vwfrmrdkfqdooygn1agspkctmonuzczeqpoz/hxl9x40irt935n07tlrr6vodz7uwee4kum6ud58sqls2vrk6v1ysbm1vbo9xdvzzkmkmhsroeye5afhamokmz5tbjjza44naohjdtv/0aurfe3otrcn5m+ojfjbjtpf71pbslkncogbbxi8bqeczhl9jbxrabakbwlag9fa+whlbxrtm2uwd/je6c1nacjv510g0tmsugnovekc91uu3nrgpgoywr3uxbsuiq9mezvjaylj8xj43xkvfce0awixch/tzisazuka7mzez0qc16u/e/z8t0dohntkszbkfnh6kmy53gaus4zbko5indcjxmzmv0qcsh2nrzmsw4iy//ja1t23vs9+6svr+e11fgb+gqhsmxnam6ukun1equpaex9iberwfr1fqwpmejjwu+s49+wzp8a9ehnl8=</latexit> Budgeting Invariants 8i.4 weeks[i] =months[i] 8i.12 months[i] = years[i] 8i.weeks[i] < 0 =) font[i] =red 8i.weeks[i] >= 0 =) font[i] =black 8i.i 8i.i mod 2 = 0 =) bkg[i] =evenc mod 2 = 1 =) bkg[i] =oddc Code Interactive cells Inflation Backgrounds *

122 <latexit sha1_base64="ytonubwk7z5fmdpm5iu7okouxp8=">aaacnnicfvhbssqwee3rfb2t+ujl4cki4tkkoa8qxkbeervcxdiwju1nnzi0jumfzfgz/bhf/bvtbr+8d4qczs5hzsxemedaen67446mjo1pte7vpmdm5+brc4t3os0vwxzlraraeduoeiitw43adqaqykjgffr0uttvn1fpnia3pp9hkoldwnucuwnt3fpr0esvfqj4e7zghsspozyefzby/bvqt/mcbehtezpgyfs0kr/5p28ppai4taohhqhpuh0jyp7+0bzs/yfsghfrda/pdqn+ar8cdvlfdbf+fsqpyyumhgmqdcf3mhmoqdkccxypbbngzhqhd9ixmkesdtgynn2bvzujwtq0lzgllc+kazva92vkmzkar/29vir/q3vy09snbzzjcomjkxv1cgemhejwehofzii+bzqpbr0ce6skmmmvwrnl8l+p/bpcbtv9r+nfbdcoj6t1tjjlsklwie92yce5i9ekrziz7bw5586fc+6pe+lelvtxqtrl5eu47q8o6sxy</latexit> <latexit sha1_base64="ytonubwk7z5fmdpm5iu7okouxp8=">aaacnnicfvhbssqwee3rfb2t+ujl4cki4tkkoa8qxkbeervcxdiwju1nnzi0jumfzfgz/bhf/bvtbr+8d4qczs5hzsxemedaen67446mjo1pte7vpmdm5+brc4t3os0vwxzlraraeduoeiitw43adqaqykjgffr0uttvn1fpnia3pp9hkoldwnucuwnt3fpr0esvfqj4e7zghsspozyefzby/bvqt/mcbehtezpgyfs0kr/5p28ppai4taohhqhpuh0jyp7+0bzs/yfsghfrda/pdqn+ar8cdvlfdbf+fsqpyyumhgmqdcf3mhmoqdkccxypbbngzhqhd9ixmkesdtgynn2bvzujwtq0lzgllc+kazva92vkmzkar/29vir/q3vy09snbzzjcomjkxv1cgemhejwehofzii+bzqpbr0ce6skmmmvwrnl8l+p/bpcbtv9r+nfbdcoj6t1tjjlsklwie92yce5i9ekrziz7bw5586fc+6pe+lelvtxqtrl5eu47q8o6sxy</latexit> <latexit sha1_base64="ytonubwk7z5fmdpm5iu7okouxp8=">aaacnnicfvhbssqwee3rfb2t+ujl4cki4tkkoa8qxkbeervcxdiwju1nnzi0jumfzfgz/bhf/bvtbr+8d4qczs5hzsxemedaen67446mjo1pte7vpmdm5+brc4t3os0vwxzlraraeduoeiitw43adqaqykjgffr0uttvn1fpnia3pp9hkoldwnucuwnt3fpr0esvfqj4e7zghsspozyefzby/bvqt/mcbehtezpgyfs0kr/5p28ppai4taohhqhpuh0jyp7+0bzs/yfsghfrda/pdqn+ar8cdvlfdbf+fsqpyyumhgmqdcf3mhmoqdkccxypbbngzhqhd9ixmkesdtgynn2bvzujwtq0lzgllc+kazva92vkmzkar/29vir/q3vy09snbzzjcomjkxv1cgemhejwehofzii+bzqpbr0ce6skmmmvwrnl8l+p/bpcbtv9r+nfbdcoj6t1tjjlsklwie92yce5i9ekrziz7bw5586fc+6pe+lelvtxqtrl5eu47q8o6sxy</latexit> <latexit sha1_base64="ytonubwk7z5fmdpm5iu7okouxp8=">aaacnnicfvhbssqwee3rfb2t+ujl4cki4tkkoa8qxkbeervcxdiwju1nnzi0jumfzfgz/bhf/bvtbr+8d4qczs5hzsxemedaen67446mjo1pte7vpmdm5+brc4t3os0vwxzlraraeduoeiitw43adqaqykjgffr0uttvn1fpnia3pp9hkoldwnucuwnt3fpr0esvfqj4e7zghsspozyefzby/bvqt/mcbehtezpgyfs0kr/5p28ppai4taohhqhpuh0jyp7+0bzs/yfsghfrda/pdqn+ar8cdvlfdbf+fsqpyyumhgmqdcf3mhmoqdkccxypbbngzhqhd9ixmkesdtgynn2bvzujwtq0lzgllc+kazva92vkmzkar/29vir/q3vy09snbzzjcomjkxv1cgemhejwehofzii+bzqpbr0ce6skmmmvwrnl8l+p/bpcbtv9r+nfbdcoj6t1tjjlsklwie92yce5i9ekrziz7bw5586fc+6pe+lelvtxqtrl5eu47q8o6sxy</latexit> Split expenses Invariants 8i.2 mid[i] =me[i]+you[i] 8i.debt[i] =mid[i] you[i] 8i.debt[i] < 0 =) color[i] =black 8i.debt[i] >= 0 =) color[i] =red Code Interactive cells Backgrounds *

123 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

124 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

125 Formalisms

126 Formalisms

127 Formalisms Interesting Translation Rule

128 Formalisms What we need Formal problem definition Full translation semantics Proof of correctness

129 Formal Correctness Problem: Correctness:

130 Formal Correctness Problem: Given a program with arrays and invariants Correctness:

131 Formal Correctness Problem: Given a program with arrays and invariants Correctness: We find a program with augmented semantics

132 Formal Correctness Problem: Given a program with arrays and invariants Thank you, Reviewer A!!! Correctness: We find a program with augmented semantics

133 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j] Consider Sortedness

134 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j]

135 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j] Limited to maplike properties

136 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j] Cannot express :(

137 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j] Key insight: change of perspective!! Cannot express :(

138 <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> <latexit sha1_base64="w/rt8x1midbnkxmdveacwkmailc=">aaachnicbvbns8naen3ur1q/oh69lbbbg5refd14khrxwmf+qbrkzjntt91swu5gkkx9i178k148kcj40n/jts1bwx8mpn6bywzekhcmton8w7ml5zxvtfx6ywnza3vh3t2rqtivfko05rfsbeqbzwkqmmkojuqciqio9ab/m/hrdyavi8w9hitgr6qjwjtroo3uss+b7vgszje7wb0sho8xw1e4h5ssmutbyrvldahhfcnnvoe37kjtcqbai8tnsbflqltsz2yy0zqcosknsnmuk2h/skrmlmoo0ewvjit2sqc8qwwjqpnd6xsjfgsuejs7tqmnp+rvisgjlbpegemmio6qew8i/ud5qw5f+kmmklsdolnf7zrjhenjvjhkeqjma0milczcimmxsek1sbrgqndnx14ktdos65tcu7ni+tqli48o0ce6ri66qgv0iyqoiih6rm/ofb1zt9al9w59zfpzvjazj/7a+vobsv+haq==</latexit> Stronger Invariants 8i, j. i < j =) sorted[i] <sorted[j]

139 <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> 8i, j. i < j =) sorted[i] <sorted[i + 1] 8i. sorted[i] <sorted[i + 1]

140 <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qq0fpwg5lceds6ddut6clsgrw9k=">aaacdnicbzbps8mwgmbt+w/of1wpxojjiailfuephozepe5wm9cvkabpfpymjumfubyv4mwv4swdil49e/pbmg1fdpobwi/nfv/yvk+ymqq0635zpaxlldw18nply3nre8fe3wspkulmmlgwie9cpaijndq11yzcpzkgjgskhq6ujvx2pzgkcn6rhykjettjnkyyawn17vonfhixbqkdx2oohnqk8mkal3742au6dtv13kngingfveghrtf+7eqczwnhgjoklo+5qq5yjdxfjiwqnuyrfoeb6hhfiecjuue+pwcea8ajonnlpk7h1p09kaneqwesms4e6b6ar03m/2p+pupzikc8ztthepzrndgobzxkaymqcdzsaabhsc2ueperrfibbcsmbg/+5evontie63g3p9x6zrfhgryaq3aephag6uaaneatypaansaleluerwfrzxqftzasymyf/jh18q2v5zso</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> <latexit sha1_base64="qzfx2szoil8eexwtgl/a7rtix+o=">aaacinicbvdjsgnbeo2jw4zbqecvjueqlgfgbbu8bl14jgawmblct6esdnkz0n0jhch5fs/+ihcpinos/bg7i6cjdwoe71vrvs9iojpktj+n3mli0vjkfrwwtr6xuwvu71rlnaokfrrzwnqdiogzccqkkq71raajaw61ohc98mv3icslozvvt8apsttiluaj0lldvpbassccy3bctfbwibm+xf3ssvbvb4k9d8tykgi6znfodz9y/izztc17ddxpnckpoinkdfpda8y0dsfslbmpxcdolj8rorjlmch4qyse0b5pg6tprekqfjz+cyaptnle+lzdkcjj9fderkip+2ggo0oionlwg4n/ew6qwud+xqikvrdryajwyrgk8sgv3gqcqoj9tqgvtn+kayciqpvotabdcgzfnifve8uxlef2tfi6msarr3tohx0ib52herpbzvrbfd2gj/scxo1h49l4mz4mrtljorol/sd4+gy4nqi8</latexit> 8i, j. i < j =) Hard sorted[i] <sorted[i + 1] Easy 8i. sorted[i] <sorted[i + 1]

141 <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> Hard 8i, j. P (i, j) Easy 8i.P (i, i + 1)

142 <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="9j1rtaqqu6p8b0ow3gywf5fy8kq=">aaacahicbvbns8naej34wetx1imhl4tfqfbcioiei148vraf0iay2w7abtebslsrsmkp/huvhhtx6s/w5r9x2+agrq8ghu/nmdmvsdht2nw/rzxvtfwnzdxwfntnd2/fpjisqtivhfzjzgpzclcinala1uxz2kgkxvhaat0y3e79+iovisxiqq8t6ke4k1jicnzgatvhrtcwmhpesn0htsaoumql1d9v2wxxcwday8tlsaeyvnr2v6stkzsiqhoolwp6bql9ezaaeu7h+vaqailjahdp01cbi6r80eybmtozsgezs0wjjwbq74krjpqarohpjlduquvvkv7nnvmdxvsjjpjuu0hmi8kuix2jarqowyqlmg8nwuqycysipswx0sazvanbw3x5mdquhm91vpvlqvkmiymhj3akrfdgcspwbxwoaoexpmmrvflp1ov1bn3mw1esboyi/sd6/aecs5s2</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> <latexit sha1_base64="/u9z2c+nkvumm7lkdb869+4hdso=">aaab/xicbvdlssnafl2pr1pf8bfzm1ieihisexrzdooygn1ag8pkommhtizhziluupwvny4ucet/upnvnlzzaoubgcm593lpncdhtgnx/byks8srq2vf9dlg5tb2jr2711bxkgmtk5jhshvgrtkttk6z5rsvsiqjgnnmmlyz+m0hkhwlxb0ejdspcf+wkbgsjds1dzphldhnidmovmfnij16j1277drufgiredkpq45a1/7q9gksrlrowrfsbc9ntj9hqrnhdfzqpiommaxxn7ynftiiys+m6cfo2cg9zgkyjzsaqr83mhwpnyocmxlhpvdz3kt8z2unorzymyasvfnbzofclcmdo0kvqmckjzqpdmfempmvkqgwmghtwmmu4m1/eze0zh3pdby7i3l1oq+jcidwbbxw4bkqcas1qaobr3igv3iznqwx6936mi0wrhxnh/7a+vwbc4stqq==</latexit> Hard 8i, j. P (i, j) Thanks Nadia!! Easy 8i.P (i, i + 1)

143 Synthesizing Insert adjacent (lo, hi) in (sorted) { lo < hi

144 Synthesizing Insert adjacent (lo, hi) in (sorted) { lo < hi sorted = sorted + newelem

145 Synthesizing Insert adjacent (lo, hi) in (sorted) { lo < hi sorted = sorted + newelem sorted = foldl adder ([], false) sorted adder (es, d) next =...

146 Synthesizing Insert adjacent (lo, hi) in (sorted) { lo < hi sorted = sorted + newelem But in imperative language sorted = foldl adder ([], false) sorted adder (es, d) next =...

147 Implications Not clear need to adjust at least 1) loop translation 2) synthesis Formal correctness would help!!

148 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

149 Outline Data invariant calculus Extensions Invariants for Security GUI invariants

150 Security is really hard

151

152

153 Hot off the presses!! September 28

154 Manual Security Invariants Invariant: All urls are in the urlset

155 Manual Security Invariants Invariant: All urls are in the urlset All connections use the urlset

156 Manual Security Invariants Invariant: All urls are in the urlset All connections use the urlset

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis Machine Learning for Data Science (CS4786) Lecture11 5 Random Projections & Canonical Correlation Analysis The Tall, THE FAT AND THE UGLY n X d The Tall, THE FAT AND THE UGLY d X > n X d n = n d d The

Bardziej szczegółowo

New Roads to Cryptopia. Amit Sahai. An NSF Frontier Center

New Roads to Cryptopia. Amit Sahai. An NSF Frontier Center New Roads to Cryptopia Amit Sahai An NSF Frontier Center OPACity Panel, May 19, 2019 New Roads to Cryptopia What about all this space? Cryptography = Hardness* PKE RSA MPC DDH ZK Signatures Factoring IBE

Bardziej szczegółowo

Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2

Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2 Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2 aaaklnictzzjb9tgfmcnadpg7oy0lxa9edva9kkapdarhyk2k7gourinlwsweyzikuyiigvyleiv/cv767fpf/5crc1xt9va5mx7w3m/ecuqw1kuztpx/rl3/70h73/w4cog9dhhn3z62d6jzy+yzj766txpoir9nzszisjynetqr+rvlfvyoozu5xbybpsxb1wahul8phczdt2v4zgchb7uecwphlyigrgkjcyiflfyci0kxnmr4z6kw0jsokvot8isntpa3gbknlcufiv/h+hh+eur4fomd417rvtfjoit5pfju6yxiab2fmwk0y/feuybobqk+axnke8xzjjhfyd8kkpl9zdoddkazd5j6bzpemjb64smjb6vb4xmehysu08lsrszopxftlzee130jcb0zjxy7r5wa2f1s2off2+dyatrughnrtpkuprlcpu55zlxpss/yqe2eamjkcf0jye8w8yas0paf6t0t2i9stmcua+inbi2rt01tz22tubbqwidypvgz6piynkpobirkxgu54ibzoti4pkw2i5ow9lnuaoabhuxfxqhvnrj6w15tb3furnbm+scyxobjhr5pmj5j/w5ix9wsa2tlwx9alpshlunzjgnrwvqbpwzjl9wes+ptyn+ypy/jgskavtl8j0hz1djdhzwtpjbbvpr1zj7jpg6ve7zxfngj75zee0vmp9qm2uvgu/9zdofq6r+g8l4xctvo+v+xdrfr8oxiwutycu0qgyf8icuyvp/sixfi9zxe11vp6mrjjovpmxm6acrtbia+wjr9bevlgjwlz5xd3rfna9g06qytaoofk8olxbxc7xby2evqjmmk6pjvvzxmpbnct6+036xp5vdbrnbdqph8brlfn/n/khnfumhf6z1v7h/80yieukkd5j0un82t9mynxzmk0s/bzn4tacdziszdhwrl8x5ako8qp1n1zn0k6w2em0km9zj1i4yt1pt3xiprw85jmc2m1ut2geum6y6es2fwx6c+wlrpykblopbuj5nnr2byygfy5opllv4+jmm7s6u+tvhywbnb0kv2lt5th4xipmiij+y1toiyo7bo0d+vzvovjkp6aoejsubhj3qrp3fjd/m23pay8h218ibvx3nicofvd1xi86+kh6nb/b+hgsjp5+qwpurzlir15np66vmdehh6tyazdm1k/5ejtuvurgcqux6yc+qw/sbsaj7lkt4x9qmtp7euk6zbdedyuzu6ptsu2eeu3rxcz06uf6g8wyuveznhkbzynajbb7r7cbmla+jbtrst0ow2v6ntkwv8svnwqnu5pa3oxfeexf93739p93chq/fv+jr8r0d9brhpcxr2w88bvqbr41j6wvrb+u5dzjpvx+veoaxwptzp/8cen+xbg==

Bardziej szczegółowo

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0  Zofia Kruczkiewicz Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 http://www.junit.org/ Zofia Kruczkiewicz 1. Aby utworzyć test dla jednej klasy, należy kliknąć prawym przyciskiem myszy w oknie Projects na wybraną

Bardziej szczegółowo

Previously on CSCI 4622

Previously on CSCI 4622 More Naïve Bayes aaace3icbvfba9rafj7ew423vr998obg2gpzkojyh4rcx3ys4lafzbjmjifdototmhoilml+hf/mn3+kl+jkdwtr64gbj+8yl2/ywklhsfircg/dvnp33s796mhdr4+fdj4+o3fvywvorkuqe5zzh0oanjakhwe1ra5zhaf5xvgvn35f62rlvtcyxpnm50awundy1hzwi46jbmgprbtrrvidrg4jre4g07kak+picee6xfgiwvfaltorirucni64eeigkqhpegbwaxglabftpyq4gjbls/hw2ci7tr2xj5ddfmfzwtazj6ubmyddgchbzpf88dmrktfonct6vazputos5zakunhfweow5ukcn+puq8m1ulm7kq+d154pokysx4zgxw4nwq6dw+rcozwnhbuu9et/tgld5cgslazuci1yh1q2ynca/u9ais0kukspulds3xxegvtyfycu8iwk1598e0z2xx/g6ef94ehbpo0d9ok9yiowsvfskh1ix2zcbpsdvaxgww7wj4zdn+he2hogm8xz9s+e7/4cuf/ata==

Bardziej szczegółowo

EaglePCB_2_FreeCAD (beta)

EaglePCB_2_FreeCAD (beta) EaglePCB_2_FreeCAD (beta) Import your boards to FreeCAD marmni (marmni@onet.eu) Copyright 2013, 2014 http://sourceforge.net/projects/eaglepcb2freecad/ [ENG] Mod EaglePCB_2_FreeCAD allow you to import PCB

Bardziej szczegółowo

Towards Stability Analysis of Data Transport Mechanisms: a Fluid Model and an Application

Towards Stability Analysis of Data Transport Mechanisms: a Fluid Model and an Application Towards Stability Analysis of Data Transport Mechanisms: a Fluid Model and an Application Gayane Vardoyan *, C. V. Hollot, Don Towsley* * College of Information and Computer Sciences, Department of Electrical

Bardziej szczegółowo

Installation of EuroCert software for qualified electronic signature

Installation of EuroCert software for qualified electronic signature Installation of EuroCert software for qualified electronic signature for Microsoft Windows systems Warsaw 28.08.2019 Content 1. Downloading and running the software for the e-signature... 3 a) Installer

Bardziej szczegółowo

Relaxation of the Cosmological Constant

Relaxation of the Cosmological Constant Relaxation of the Cosmological Constant with Peter Graham and David E. Kaplan The Born Again Universe + Work in preparation + Work in progress aaab7nicdvbns8nafhypx7v+vt16wsycp5kioseifw8ekthwaepzbf7apztn2n0ipfrhepggifd/jzf/jzs2brudwbhm5rhvtzakro3rfjqlpewv1bxyemvjc2t7p7q719zjphi2wcisdr9qjyjlbblubn6ncmkccoweo6vc7zyg0jyrd2acoh/tgeqrz9ryqdo7sdgq9qs1t37m5ibu3v2qqvekpqyfmv3qry9mwbajnexqrbuemxp/qpxhtoc00ss0ppsn6ac7lkoao/yns3wn5mgqiykszz80zkz+n5jqwotxhnhktm1q//zy8s+vm5nowp9wmwygjzt/fgwcmitkt5oqk2rgjc2hthg7k2fdqigztqgklwfxkfmfte/qnuw3p7xgzvfhgq7gei7bg3nowdu0oqumrvaiz/dipm6t8+q8zamlp5jzhx9w3r8agjmpzw==

Bardziej szczegółowo

Machine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering

Machine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering Machine Learning for Data Science (CS4786) Lecture 11 Spectral Embedding + Clustering MOTIVATING EXAMPLE What can you say from this network? MOTIVATING EXAMPLE How about now? THOUGHT EXPERIMENT For each

Bardziej szczegółowo

License Certificate. Autodesk License Certificate Terms and Conditions

License Certificate. Autodesk License Certificate Terms and Conditions v053013 License Certificate Certificate Date: Serial #: Product key: Maximum Concurrent Authorized Users: Customer #: Contact E-Mail: Contact Phone: Product Description: Language: SAP Material #: License:

Bardziej szczegółowo

Revenue Maximization. Sept. 25, 2018

Revenue Maximization. Sept. 25, 2018 Revenue Maximization Sept. 25, 2018 Goal So Far: Ideal Auctions Dominant-Strategy Incentive Compatible (DSIC) b i = v i is a dominant strategy u i 0 x is welfare-maximizing x and p run in polynomial time

Bardziej szczegółowo

deep learning for NLP (5 lectures)

deep learning for NLP (5 lectures) TTIC 31210: Advanced Natural Language Processing Kevin Gimpel Spring 2019 Lecture 6: Finish Transformers; Sequence- to- Sequence Modeling and AJenKon 1 Roadmap intro (1 lecture) deep learning for NLP (5

Bardziej szczegółowo

SG-MICRO... SPRĘŻYNY GAZOWE P.103

SG-MICRO... SPRĘŻYNY GAZOWE P.103 SG-MICRO... SG-MICRO 19 SG-MICRO SG-MICRO H SG-MICRO R SG-MICRO 32 SG-MICRO 32H SG-MICRO 32R SG-MICRO SG-MICRO H SG-MICRO R SG-MICRO 45 SG-MICRO SG-MICRO SG-MICRO 75 SG-MICRO 95 SG-MICRO 0 cylindra body

Bardziej szczegółowo

TTIC 31190: Natural Language Processing

TTIC 31190: Natural Language Processing TTIC 31190: Natural Language Processing Kevin Gimpel Spring 2018 Lecture 17: Machine TranslaDon; SemanDcs Roadmap words, morphology, lexical semandcs text classificadon simple neural methods for NLP language

Bardziej szczegółowo

Mixed-integer Convex Representability

Mixed-integer Convex Representability Mixed-integer Convex Representability Juan Pablo Vielma Massachuse=s Ins?tute of Technology Joint work with Miles Lubin and Ilias Zadik INFORMS Annual Mee?ng, Phoenix, AZ, November, 2018. Mixed-Integer

Bardziej szczegółowo

SG-R... SPRĘŻYNY GAZOWE P (2 x S) 60+(2 x S) 42/45+(2 x S) 50+(2 x S) 32+(2 x S) 38+(2 x S) P.67 P.68 P.69 P.70 P.71 P.72

SG-R... SPRĘŻYNY GAZOWE P (2 x S) 60+(2 x S) 42/45+(2 x S) 50+(2 x S) 32+(2 x S) 38+(2 x S) P.67 P.68 P.69 P.70 P.71 P.72 SG-R... cylindra body Fa La Strona mm Page SG-R16 SG-R24 SG-R28 SG-R SG-R45 SG-R M16 x 1,5 M24 x 1,5 M28 x 1,5 M x 1,5 M45 x 1,5 M x 1,5 10- -1 28-0 2 7 0 +(2 x S) +(2 x S) 42/45+(2 x S) +(2 x S) 32+(2

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Wyszukiwanie wzorców w tekście 1 Wyszukiwanie wzorców w tekście Problem wyszukiwania wzorca w tekście Na tym wykładzie zajmiemy się

Bardziej szczegółowo

Gradient Coding using the Stochastic Block Model

Gradient Coding using the Stochastic Block Model Gradient Coding using the Stochastic Block Model Zachary Charles (UW-Madison) Joint work with Dimitris Papailiopoulos (UW-Madison) aaacaxicbvdlssnafj3uv62vqbvbzwarxjsqikaboelgzux7gcaeywtsdp1mwsxeaepd+ctuxcji1r9w5984bbpq1gmxdufcy733bcmjutn2t1fawl5zxsuvvzy2t7z3zn29lkwyguktjywrnqbjwigntuuvi51uebqhjlsdwfxebz8qiwnc79uwjv6mepxgfcoljd88uiox0m1hvlnzwzgowymjn7tjyzertmvpareju5aqkndwzs83thawe64wq1j2httvxo6eopirccxnjekrhqae6wrkuuykl08/gmnjryqwsoqurubu/t2ro1jkyrzozhipvpz3juj/xjdt0ywxu55mina8wxrldkoetukairuekzbubgfb9a0q95fawonqkjoez/7lrdi6trzbcm7pqvwrio4yoarh4aq44bzuwq1ogcba4be8g1fwzjwzl8a78tfrlrnfzd74a+pzb2h+lzm=

Bardziej szczegółowo

y = The Chain Rule Show all work. No calculator unless otherwise stated. If asked to Explain your answer, write in complete sentences.

y = The Chain Rule Show all work. No calculator unless otherwise stated. If asked to Explain your answer, write in complete sentences. The Chain Rule Show all work. No calculator unless otherwise stated. If asked to Eplain your answer, write in complete sentences. 1. Find the derivative of the functions y 7 (b) (a) ( ) y t 1 + t 1 (c)

Bardziej szczegółowo

Hard-Margin Support Vector Machines

Hard-Margin Support Vector Machines Hard-Margin Support Vector Machines aaacaxicbzdlssnafiyn9vbjlepk3ay2gicupasvu4iblxuaw2hjmuwn7ddjjmxm1bkcg1/fjqsvt76fo9/gazqfvn8y+pjpozw5vx8zkpvtfxmlhcwl5zxyqrm2vrg5zw3vxmsoezi4ogkr6phieky5crvvjhriqvdom9l2xxftevuwcekj3lktmhghgniauiyutvrwxtvme34a77kbvg73gtygpjsrfati1+xc8c84bvraowbf+uwnipyehcvmkjrdx46vlykhkgykm3ujjdhcyzqkxy0chur6ax5cbg+1m4bbjptjcubuz4kuhvjoql93hkin5hxtav5x6yyqopnsyuneey5ni4keqrxbar5wqaxbik00icyo/iveiyqqvjo1u4fgzj/8f9x67bzmxnurjzmijtlybwfgcdjgfdtajwgcf2dwaj7ac3g1ho1n4814n7wwjgjmf/ys8fenfycuzq==

Bardziej szczegółowo

Projekt: Mikro zaprogramowane na sukces!

Projekt: Mikro zaprogramowane na sukces! Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt: Mikro zaprogramowane na sukces! Opis autoryzowanych szkoleń Oracle planowanych do realizacji w ramach

Bardziej szczegółowo

Test-Driven Development

Test-Driven Development Test-Driven Development droga od podstaw do biegłości w rozwijaniu dużych aplikacji Krzysztof Jelski O mnie Szkolenia Software TDD Odcinek 1 TDD newbie TDD C#.NET CF Ciekawość Oczekiwania TDD C#.NET CF

Bardziej szczegółowo

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu) Dr inż. Wojciech Koziński maj 2007 ZS ISEP WE PW Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu) Opis systemu (wzorca Mediator):

Bardziej szczegółowo

www.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part

Bardziej szczegółowo

Instrukcja obsługi User s manual

Instrukcja obsługi User s manual Instrukcja obsługi User s manual Konfigurator Lanberg Lanberg Configurator E-mail: support@lanberg.pl support@lanberg.eu www.lanberg.pl www.lanberg.eu Lanberg 2015-2018 WERSJA VERSION: 2018/11 Instrukcja

Bardziej szczegółowo

Stargard Szczecinski i okolice (Polish Edition)

Stargard Szczecinski i okolice (Polish Edition) Stargard Szczecinski i okolice (Polish Edition) Janusz Leszek Jurkiewicz Click here if your download doesn"t start automatically Stargard Szczecinski i okolice (Polish Edition) Janusz Leszek Jurkiewicz

Bardziej szczegółowo

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition) Katowice, plan miasta: Skala 1:20 000 = City map = Stadtplan (Polish Edition) Polskie Przedsiebiorstwo Wydawnictw Kartograficznych im. Eugeniusza Romera Click here if your download doesn"t start automatically

Bardziej szczegółowo

LEARNING AGREEMENT FOR STUDIES

LEARNING AGREEMENT FOR STUDIES LEARNING AGREEMENT FOR STUDIES The Student First and last name(s) Nationality E-mail Academic year 2014/2015 Study period 1 st semester 2 nd semester Study cycle Bachelor Master Doctoral Subject area,

Bardziej szczegółowo

Strona główna > Produkty > Systemy regulacji > System regulacji EASYLAB - LABCONTROL > Program konfiguracyjny > Typ EasyConnect.

Strona główna > Produkty > Systemy regulacji > System regulacji EASYLAB - LABCONTROL > Program konfiguracyjny > Typ EasyConnect. Typ EasyConnect FOR THE COMMISSIONING AND DIAGNOSIS OF EASYLAB COMPONENTS, FSE, AND FMS Software for the configuration and diagnosis of controllers Type TCU3, adapter modules TAM, automatic sash device

Bardziej szczegółowo

Machine Learning for Data Science (CS4786) Lecture 24. Differential Privacy and Re-useable Holdout

Machine Learning for Data Science (CS4786) Lecture 24. Differential Privacy and Re-useable Holdout Machine Learning for Data Science (CS4786) Lecture 24 Differential Privacy and Re-useable Holdout Defining Privacy Defining Privacy Dataset + Defining Privacy Dataset + Learning Algorithm Distribution

Bardziej szczegółowo

Zarządzanie sieciami telekomunikacyjnymi

Zarządzanie sieciami telekomunikacyjnymi SNMP Protocol The Simple Network Management Protocol (SNMP) is an application layer protocol that facilitates the exchange of management information between network devices. It is part of the Transmission

Bardziej szczegółowo

Nie musisz odnosić sukcesów ciągle, lecz tylko wystarczająco często

Nie musisz odnosić sukcesów ciągle, lecz tylko wystarczająco często Nie musisz odnosić sukcesów ciągle, lecz tylko wystarczająco często Współpracuj z nami O FIRMIE Hutchinson Institute to nowoczesna organizacja szkoleniowa zajmująca się kształceniem dorosłych w zakresie

Bardziej szczegółowo

English Challenge: 13 Days With Real-Life English. Agnieszka Biały Kamil Kondziołka

English Challenge: 13 Days With Real-Life English. Agnieszka Biały Kamil Kondziołka English Challenge: 13 Days With Real-Life English Agnieszka Biały Kamil Kondziołka www.jezykipodroze.pl WYZWANIE: 13 dni z PRAKTYCZNYM Angielskim - Tego Nie Było w Szkole! Agnieszka Biały Kamil Kondziołka

Bardziej szczegółowo

Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska

Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska - Wstęp Dear Mr. President, Dear Mr. President, Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska Dear Sir, Dear Sir, Formalny, odbiorcą jest mężczyzna, którego nazwiska

Bardziej szczegółowo

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction TTIC 31210: Advanced Natural Language Processing Kevin Gimpel Spring 2019 Lecture 9: Inference in Structured Prediction 1 intro (1 lecture) Roadmap deep learning for NLP (5 lectures) structured prediction

Bardziej szczegółowo

www.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part

Bardziej szczegółowo

U3000/U3100 Mini (Dla Komputera Eee na systemie operacyjnym Linux) Krótka Instrukcja

U3000/U3100 Mini (Dla Komputera Eee na systemie operacyjnym Linux) Krótka Instrukcja U3000/U3100 Mini (Dla Komputera Eee na systemie operacyjnym Linux) Krótka Instrukcja ASUS_U3000_U3100_mini.indd 1 2/2/08 4:01:51 PM PL3656 Pierwsza edycja Styczeń 2008 Copyright 2008 ASUSTeK COMPUTER INC.

Bardziej szczegółowo

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian 1 / 9 Content list / Spis Treści 1. Hardware and software requirements, preparing device to upgrade Wymagania sprzętowe i programowe, przygotowanie urządzenia do aktualizacji 2. Installing drivers and

Bardziej szczegółowo

Arrays -II. Arrays. Outline ECE Cal Poly Pomona Electrical & Computer Engineering. Introduction

Arrays -II. Arrays. Outline ECE Cal Poly Pomona Electrical & Computer Engineering. Introduction ECE 114-9 Arrays -II Dr. Z. Aliyazicioglu Electrical & Computer Engineering Electrical & Computer Engineering 1 Outline Introduction Arrays Declaring and Allocation Arrays Examples Using Arrays Passing

Bardziej szczegółowo

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 8: Structured PredicCon 2

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 8: Structured PredicCon 2 TTIC 31210: Advanced Natural Language Processing Kevin Gimpel Spring 2019 Lecture 8: Structured PredicCon 2 1 Roadmap intro (1 lecture) deep learning for NLP (5 lectures) structured predic+on (4 lectures)

Bardziej szczegółowo

New method for the conformal bootstrap with OPE truncations

New method for the conformal bootstrap with OPE truncations New method for the conformal bootstrap with OPE truncations Wenliang LI Kyung Hee University, Seoul, South Korea Symposium: "Bootstrap Approach to Conformal Field Theories and Applications, OIST, March19-23,

Bardziej szczegółowo

Stół Regolo. 100% Made in Italy. Może być używany w wersji zamkniętej lub otwartej na dowolnej wysokości It can be used open or closed, at any height

Stół Regolo. 100% Made in Italy. Może być używany w wersji zamkniętej lub otwartej na dowolnej wysokości It can be used open or closed, at any height Spis treści Stół Regolo... 2 Stół Basic quadrato... 8 Stół Basic rettangolare... 9 Stół Easy... 10 Stół Facile... 11 Stół Kubo... 12 Stół Piccolo... 13 Stoliki Piego... 14 Stół kwadratowy Trendy quadrato...

Bardziej szczegółowo

Zaawansowane aplikacje internetowe laboratorium

Zaawansowane aplikacje internetowe laboratorium Zaawansowane aplikacje internetowe laboratorium Web Services (część 2). Celem ćwiczenia jest przygotowanie prostej aplikacji prezentującej technologię usług sieciowych (ang. Web Services). Przygotowana

Bardziej szczegółowo

Rev Źródło:

Rev Źródło: KamPROG for AVR Rev. 20190119192125 Źródło: http://wiki.kamamilabs.com/index.php/kamprog_for_avr Spis treści Introdcution... 1 Features... 2 Standard equipment... 4 Installation... 5 Software... 6 AVR

Bardziej szczegółowo

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian 1 / 12 Content list / Spis Treści 1. Hardware and software requirements, preparing device to upgrade Wymagania sprzętowe i programowe, przygotowanie urządzenia do aktualizacji 2. Installing drivers needed

Bardziej szczegółowo

Hotel, restaurant and retail trade services

Hotel, restaurant and retail trade services Hotel, restaurant and retail trade services Info Version 2 Url http://com.mercell.com/permalink/31985142.aspx External tender id 161047-2012 Tender type Contract Award Document type Contract award Procurement

Bardziej szczegółowo

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition) Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition) Robert Respondowski Click here if your download doesn"t start automatically Wojewodztwo Koszalinskie:

Bardziej szczegółowo

Proposal of thesis topic for mgr in. (MSE) programme in Telecommunications and Computer Science

Proposal of thesis topic for mgr in. (MSE) programme in Telecommunications and Computer Science Proposal of thesis topic for mgr in (MSE) programme 1 Topic: Monte Carlo Method used for a prognosis of a selected technological process 2 Supervisor: Dr in Małgorzata Langer 3 Auxiliary supervisor: 4

Bardziej szczegółowo

03 April 2015 03 kwietnia 2015 r. Zmiana satelity dostarczającego sygnał Animal Planet HD. Change of Delivery Satellite for Animal Planet HD

03 April 2015 03 kwietnia 2015 r. Zmiana satelity dostarczającego sygnał Animal Planet HD. Change of Delivery Satellite for Animal Planet HD 03 April 2015 03 kwietnia 2015 r. Dear Sirs, Change of Delivery Satellite for Animal Planet HD We refer to the Affiliation Agreement with a Commencement Date of 01/11/2009 between ( DCEL / we ) and you,

Bardziej szczegółowo

Wykorzystanie możliwości serwerów Online Judge w przygotowaniu drużyny oraz w organizacji zawodów w programowaniu

Wykorzystanie możliwości serwerów Online Judge w przygotowaniu drużyny oraz w organizacji zawodów w programowaniu Wykorzystanie możliwości serwerów Online w przygotowaniu drużyny oraz w organizacji zawodów w programowaniu Alexander Denisjuk Elbląska Uczelnia Humanistyczno-Ekonomiczna mailto:denisjuk@matman.uwm.edu.pl

Bardziej szczegółowo

This is CS 50. Harvard College s Introduction to Computer Science I \ DAVID J. MALAN 99 WEEK 2

This is CS 50. Harvard College s Introduction to Computer Science I \ DAVID J. MALAN 99 WEEK 2 This is CS 50. Harvard College s Introduction to Computer Science I COMPUTER \ SCIENCE 50 WEEK 2 DAVID J. MALAN 99 malan@post.harvard.edu 1 Or fher gb qevax lbhe binygvar! Image from http://www.questexperiences.com/quest2/movieadventures/default.asp.

Bardziej szczegółowo

Wsparcie dyplomacji ekonomicznej dla strategii surowcowej

Wsparcie dyplomacji ekonomicznej dla strategii surowcowej Wsparcie dyplomacji ekonomicznej dla strategii surowcowej dr Stanisław Cios, Departament Współpracy Ekonomicznej seminarium: Strategia Surowcowa Polski 26 maja 2014 r., Pałac Staszica, Warszawa Wsparcie

Bardziej szczegółowo

Od wymagań do Javy w mgnieniu oka

Od wymagań do Javy w mgnieniu oka Od wymagań do Javy w mgnieniu oka Michał Śmiałek Politechnika Warszawska RE-Challenge, Warszawa, 15.05.2015 Prelegent Czym się zajmowałem (od ok. 1991 r.) Profesor (informatyka) Politechnika Warszawska;

Bardziej szczegółowo

OPTYMALIZACJA PUBLICZNEGO TRANSPORTU ZBIOROWEGO W GMINIE ŚRODA WIELKOPOLSKA

OPTYMALIZACJA PUBLICZNEGO TRANSPORTU ZBIOROWEGO W GMINIE ŚRODA WIELKOPOLSKA Politechnika Poznańska Wydział Maszyn Roboczych i Transportu Inż. NATALIA LEMTIS OPTYMALIZACJA PUBLICZNEGO TRANSPORTU ZBIOROWEGO W GMINIE ŚRODA WIELKOPOLSKA Promotor: DR INŻ. MARCIN KICIŃSKI Poznań, 2016

Bardziej szczegółowo

Knovel Math: Jakość produktu

Knovel Math: Jakość produktu Knovel Math: Jakość produktu Knovel jest agregatorem materiałów pełnotekstowych dostępnych w formacie PDF i interaktywnym. Narzędzia interaktywne Knovel nie są stworzone wokół specjalnych algorytmów wymagających

Bardziej szczegółowo

Kierunek: Informatyka rev rev jrn Stacjonarny EN 1 / 6

Kierunek: Informatyka rev rev jrn Stacjonarny EN 1 / 6 Wydział Informatyki i Komunikacji Wizualnej Kierunek: Informatyka w języku angielskim studia pierwszego stopnia - inżynierskie tryb: stacjonarny rok rozpoczęcia 2018/2019 A. Moduły międzykierunkowe obligatoryjne

Bardziej szczegółowo

ITIL 4 Certification

ITIL 4 Certification 4 Certification ITIL 3 Certification ITIL Master scheme ITIL Expert 5 Managing across the lifecycle 5 3 SS 3 SD 3 ST 3 SO 3 CS1 4 OSA 4 PPO 4 RCV 4 SOA Ścieżka lifecycle Ścieżka Capability 3 ITIL Practitioner

Bardziej szczegółowo

Fig 5 Spectrograms of the original signal (top) extracted shaft-related GAD components (middle) and

Fig 5 Spectrograms of the original signal (top) extracted shaft-related GAD components (middle) and Fig 4 Measured vibration signal (top). Blue original signal. Red component related to periodic excitation of resonances and noise. Green component related. Rotational speed profile used for experiment

Bardziej szczegółowo

Informatyka. Wy-02 Tablice, wskaźniki, warunki i pętle. mgr inż. Krzysztof Kołodziejczyk

Informatyka. Wy-02 Tablice, wskaźniki, warunki i pętle. mgr inż. Krzysztof Kołodziejczyk Informatyka Wy-02 Tablice, wskaźniki, warunki i pętle mgr inż. Krzysztof Kołodziejczyk krzysztof.m.kolodziejczyk@pwr.edu.pl 06.03.2019 Strona kursu http://w12.pwr.wroc.pl/inf/ Konspekt 1 if-else 2 do-while

Bardziej szczegółowo

Linear Classification and Logistic Regression. Pascal Fua IC-CVLab

Linear Classification and Logistic Regression. Pascal Fua IC-CVLab Linear Classification and Logistic Regression Pascal Fua IC-CVLab 1 aaagcxicbdtdbtmwfafwdgxlhk8orha31ibqycvkdgpshdqxtwotng2pxtvqujmok1qlky5xllzrnobbediegwcap4votk2kqkf+/y/tnphdschtadu/giv3vtea99cfma8fpx7ytlxx7ckns4sylo3doom7jguhj1hxchmy/irhrlgh67lxb5x3blis8jjqynmedqujiu5zsqqagrx+yjcfpcrydusshmzeluzsg7tttiew5khhcuzm5rv0gn1unw6zl3gbzlpr3liwncyr6aaqinx4wnc/rpg6ix5szd86agoftuu0g/krjxdarph62enthdey3zn/+mi5zknou2ap+tclvhob9sxhwvhaqketnde7geqjp21zvjsfrcnkfhtejoz23vq97elxjlpbtmxpl6qxtl1sgfv1ptpy/yq9mgacrzkgje0hjj2rq7vtywnishnnkzsqekucnlblrarlh8x8szxolrrxkb8n6o4kmo/e7siisnozcfvsedlol60a/j8nmul/gby8mmssrfr2it8lkyxr9dirxxngzthtbaejv

Bardziej szczegółowo

PRESENT TENSES IN ENGLISH by

PRESENT TENSES IN ENGLISH by PRESENT TENSES IN ENGLISH by Present Tenses Present Continuous Zastosowanie Czasu Present Continuous używamy, gdy mówimy: o czynności, którą wykonujemy w momencie mówienia, o czynności, w trakcie wykonywania

Bardziej szczegółowo

OpenPoland.net API Documentation

OpenPoland.net API Documentation OpenPoland.net API Documentation Release 1.0 Michał Gryczka July 11, 2014 Contents 1 REST API tokens: 3 1.1 How to get a token............................................ 3 2 REST API : search for assets

Bardziej szczegółowo

Label-Noise Robust Generative Adversarial Networks

Label-Noise Robust Generative Adversarial Networks Label-Noise Robust Generative Adversarial Networks Training data rcgan Noisy labeled Conditioned on clean labels Takuhiro Kaneko1 Yoshitaka Ushiku1 Tatsuya Harada1, 2 1The University of Tokyo 2RIKEN Talk

Bardziej szczegółowo

TEORIA CZASU PRESENT SIMPLE I PRESENT CONTINUOUS

TEORIA CZASU PRESENT SIMPLE I PRESENT CONTINUOUS TEORIA CZASU PRESENT SIMPLE I PRESENT CONTINUOUS Present Simple-czas teraźniejszy prosty Present Continuous-czas teraźniejszy ciągły UŻYWAMY: gdy mówimy o rutynie gdy mówimy o harmonogramach gdy mówimy

Bardziej szczegółowo

g]bbvd`cyw>[ealyb^vwvvzo]^vwp`[[ab]cfwxyzy[v\]^]bvwvazovf

g]bbvd`cyw>[ealyb^vwvvzo]^vwp`[[ab]cfwxyzy[v\]^]bvwvazovf WXYZ[\X] TUVWXYZY[V\]^W_`ab\Yc]`bWUYdWeVVbW^`bcZY^cV\WefWcUVWg]bbVd`cYWhViYZc[VbcW`jWkVYlcUWc`W^ZVYcVWY c``lm]cw\vd]nbv\wc`wydd]dcwg]bbvd`cywy[ealyb^vwdvzo]^vdw]bwy\`ic]bnwcuvwp`[[ab]cfwxyzy[v\]^]bv g`

Bardziej szczegółowo

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3 Modelowanie numeryczne w fizyce atmosfery Sylwester Arabas (ćwiczenia do wykładu dr. hab. inż. Lecha Łobockiego) Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego 3. listopada 2011 r. Schemat

Bardziej szczegółowo

Pobieranie argumentów wiersza polecenia

Pobieranie argumentów wiersza polecenia Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:

Bardziej szczegółowo

Has the heat wave frequency or intensity changed in Poland since 1950?

Has the heat wave frequency or intensity changed in Poland since 1950? Has the heat wave frequency or intensity changed in Poland since 1950? Joanna Wibig Department of Meteorology and Climatology, University of Lodz, Poland OUTLINE: Motivation Data Heat wave frequency measures

Bardziej szczegółowo

Reguły asocjacyjne w programie RapidMiner Michał Bereta

Reguły asocjacyjne w programie RapidMiner Michał Bereta Reguły asocjacyjne w programie RapidMiner Michał Bereta www.michalbereta.pl 1. Wstęp Reguły asocjacyjne mają na celu odkrycie związków współwystępowania pomiędzy atrybutami. Stosuje się je często do danych

Bardziej szczegółowo

Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu

Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu Rejestracja na Portalu Online Job Application jest całkowicie bezpłatna i składa się z 3 kroków: Krok 1 - Wypełnij poprawnie formularz

Bardziej szczegółowo

Lecture 18 Review for Exam 1

Lecture 18 Review for Exam 1 Spring, 2019 ME 323 Mechanics of Materials Lecture 18 Review for Exam 1 Reading assignment: HW1-HW5 News: Ready for the exam? Instructor: Prof. Marcial Gonzalez Announcements Exam 1 - Wednesday February

Bardziej szczegółowo

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk http://kowalczyk.cc

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk http://kowalczyk.cc Projektowanie i architektura frameworka w języku PHP Tomasz P.F. Kowalczyk http://kowalczyk.cc Spis treści Why new framework? Mechanizmy języka PHP Wzorce projektowe Architektura Przepływ sterowania Zalety

Bardziej szczegółowo

Ankiety Nowe funkcje! Pomoc magda.szewczyk@slo-wroc.pl. magda.szewczyk@slo-wroc.pl. Twoje konto Wyloguj. BIODIVERSITY OF RIVERS: Survey to students

Ankiety Nowe funkcje! Pomoc magda.szewczyk@slo-wroc.pl. magda.szewczyk@slo-wroc.pl. Twoje konto Wyloguj. BIODIVERSITY OF RIVERS: Survey to students Ankiety Nowe funkcje! Pomoc magda.szewczyk@slo-wroc.pl Back Twoje konto Wyloguj magda.szewczyk@slo-wroc.pl BIODIVERSITY OF RIVERS: Survey to students Tworzenie ankiety Udostępnianie Analiza (55) Wyniki

Bardziej szczegółowo

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX UNIWERSYTETU BIBLIOTEKA IEGO UNIWERSYTETU IEGO Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX 1. Make a new connection Open the System Preferences by going to the Apple menu

Bardziej szczegółowo

Optimizing Programs with Intended Semantics

Optimizing Programs with Intended Semantics Interaktywna optymalizacja programów 26 kwietnia 2010 Spis treści Spis treści Wstęp Omówienie zaproponowanego algorytmu na przykładzie Wewnętrzna reprezentacja reguł dotyczących optymalizacji Wybrane szczegóły

Bardziej szczegółowo

Podstawy programowania III WYKŁAD 6

Podstawy programowania III WYKŁAD 6 Podstawy programowania III WYKŁAD 6 Jan Kazimirski 1 Projekt: Katalog książek elektronicznych c.d. 2 Diagram przypadków użycia 3 Iteracja 1 Zaprojektowanie panelu głównego aplikacji Realizacja przypadków

Bardziej szczegółowo

Explorers Summer Adventure Camp

Explorers Summer Adventure Camp Explorers Summer Adventure Camp Ages 8-12 Monday to Friday 9am 3pm July 2 nd August 30 th 2019 Program does not run on Holidays Daily Spaces: $65 Weekly Spaces: $300 (prorated for Holidays) www.hoodooadventures.ca

Bardziej szczegółowo

Program szkolenia: Fundamenty testowania

Program szkolenia: Fundamenty testowania Program szkolenia: Fundamenty testowania Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Fundamenty testowania Testowanie-fun Testowanie testerzy, test managerowie 2 dni 50%

Bardziej szczegółowo

Umowa Licencyjna Użytkownika Końcowego End-user licence agreement

Umowa Licencyjna Użytkownika Końcowego End-user licence agreement Umowa Licencyjna Użytkownika Końcowego End-user licence agreement Umowa Licencyjna Użytkownika Końcowego Wersja z dnia 2 września 2014 Definicje GRA - Przeglądarkowa gra HTML5 o nazwie Sumerian City, dostępna

Bardziej szczegółowo

Conditionals: 0, 1, 2, 3 - Zadania warunkowe. O Conditional. Kiedy używamy? Zdanie podrzędne Zdanie nadrzędne

Conditionals: 0, 1, 2, 3 - Zadania warunkowe. O Conditional. Kiedy używamy? Zdanie podrzędne Zdanie nadrzędne O Conditional If + podmiot + czasownik w czasie present simple podmiot + czasownik w czasie present simple powszechnych prawdach, takich jak prawa natury If you heat water to 100 o C, it boils Water boils

Bardziej szczegółowo

Marzec: food, advertising, shopping and services, verb patterns, adjectives and prepositions, complaints - writing

Marzec: food, advertising, shopping and services, verb patterns, adjectives and prepositions, complaints - writing Wymagania na podstawie Podstawy programowej kształcenia ogólnego dla szkoły podstawowej język obcy oraz polecanego podręcznika New Matura Success Intermediate * Cele z podstawy programowej: rozumienie

Bardziej szczegółowo

110299/EU XXIV. GP. Eingelangt am 02/04/13 COUNCIL OF THE EUROPEAN UNION. Brussels, 2 April 2013 8071/13. Interinstitutional File: 2006/0190 (CNS)

110299/EU XXIV. GP. Eingelangt am 02/04/13 COUNCIL OF THE EUROPEAN UNION. Brussels, 2 April 2013 8071/13. Interinstitutional File: 2006/0190 (CNS) 110299/EU XXIV. GP Eingelangt am 02/04/13 COUNCIL OF THE EUROPEAN UNION Brussels, 2 April 2013 8071/13 Interinstitutional File: 2006/0190 (CNS) JUR 170 PECHE 125 LEGISLATIVE ACTS AND OTHER INSTRUMENTS:

Bardziej szczegółowo

Current Report No. 14/2012 Wysogotowo, March 16th 2012

Current Report No. 14/2012 Wysogotowo, March 16th 2012 Current Report No. 14/2012 Wysogotowo, March 16th 2012 Subject: Notification of decrease in Pioneer Pekao Investment Management S.A. s holding of PBG shares The Management Board of hereby reports that

Bardziej szczegółowo

ECEN 5645 Class Meeting 7. Absorption/ Scattering

ECEN 5645 Class Meeting 7. Absorption/ Scattering ECEN 5645 Class Meeting 7 Absorption/ Scattering Index aaact3icdvfbsxtbgj2n1iax2qjhxgzdibay7qzk9fai9ojjfjoyyibw7ey3yeds7gzmvghl/qexvfvvephqik5icfrsbwop9755m/mmsaxxxnv/o4w19xcb74ul8uahre2plz3djk4yxbdnepgobgaabzfyntwi7kykiq4exgxxp2f+1q0qzrp5y0xs7mcwldzidiyvbpxid3dizy5jcurb5mu0lgu+saehhpzw9viz3i8usnz72jj3qaqjwprfvk9z73cfoi37kmnxoynk1a2fnpw2jxvuq7tzuktyni+wspuscdgo3pthwriypwecto55bmr6osjdmucbn2lmgv3dehuwsohr9/n5h1p62sohjrjllzr0rr7ekuos9sqo7gqmzqt/9wbikq+xmeikn3ozzgylezkoygq1cz2vs0oukbkxsqsy4vauli3atmfsf5rtccu3/590gnxprxuxjwrrfffhkxwi+6rgpniklxjglkibmhjlhsgf8te5cx6dp8jitoasyb55g0lpgthxtag=

Bardziej szczegółowo

Helena Boguta, klasa 8W, rok szkolny 2018/2019

Helena Boguta, klasa 8W, rok szkolny 2018/2019 Poniższy zbiór zadań został wykonany w ramach projektu Mazowiecki program stypendialny dla uczniów szczególnie uzdolnionych - najlepsza inwestycja w człowieka w roku szkolnym 2018/2019. Składają się na

Bardziej szczegółowo

Table of Contents. Lucas Nülle GmbH 1/6

Table of Contents. Lucas Nülle GmbH 1/6 Table of Contents Table of Contents Elektryczna technika instalacyjna Technika systemowa budynków EIT 9 Domofon wideo EIT 9.1 Komunikacja audio w budynkach 1 2 2 4 5 Lucas Nülle GmbH 1/6 www.lucas-nuelle.pl

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

BOGFRAN home.

BOGFRAN home. www.bogfranhome.pl Krzesło / Chair mod./mod.: Tory kol./col.: brązowy, szary, zielony / brown, grey, green 956 620 465 BOGFRAN home NORDIC Krzesło / Chair mod./mod.: Baso kol./col.: jasny szary, czarny

Bardziej szczegółowo

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition) Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition) Piotr Maluskiewicz Click here if your download doesn"t start automatically Miedzy

Bardziej szczegółowo

nowy termin ważności Akredytywy / Gwarancji do / new validity term of the Letter of Credit / Guarantee:

nowy termin ważności Akredytywy / Gwarancji do / new validity term of the Letter of Credit / Guarantee: Strona 1 z 5 Załącznik nr 6 do Regulaminu Udzielania Gwarancji Bankowych i Otwierania Akredytyw WNIOSEK O ZMIANĘ WARUNKÓW: (Wniosek składany jest przez osoby fizyczne i podmioty nieposiadające osobowości

Bardziej szczegółowo

PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013

PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013 PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013 Offer conditions: Offer is valid until 08.11.2013 or end of stock The offer quantity is lilited All prices are EXW When placing an order

Bardziej szczegółowo

Healthix Consent Web-Service Specification

Healthix Consent Web-Service Specification Healthix Consent Web-Service Specification Version 0.1 Healthix, Inc. 40 Worth St., 5 th Floor New York, NY 10013 1-877-695-4749 Ext. 1 healthix.org Heatlhix Consent Web-Services Specification Page 1 of

Bardziej szczegółowo

Classic Clad / Thermo Clad / ThermoPlus Clad option selection for projects with Pine / Fir wood

Classic Clad / Thermo Clad / ThermoPlus Clad option selection for projects with Pine / Fir wood Project me: Classic Clad / Thermo Clad / ThermoPlus Clad option selection for projects with Pine / Fir wood 1 style. quadrat NFRC compatible option classic NFRC compatible option classic sharp heritage

Bardziej szczegółowo

Nazwa projektu: Kreatywni i innowacyjni uczniowie konkurencyjni na rynku pracy

Nazwa projektu: Kreatywni i innowacyjni uczniowie konkurencyjni na rynku pracy Nazwa projektu: Kreatywni i innowacyjni uczniowie konkurencyjni na rynku pracy DZIAŁANIE 3.2 EDUKACJA OGÓLNA PODDZIAŁANIE 3.2.1 JAKOŚĆ EDUKACJI OGÓLNEJ Projekt współfinansowany przez Unię Europejską w

Bardziej szczegółowo

EGZAMIN MATURALNY Z JĘZYKA ANGIELSKIEGO POZIOM ROZSZERZONY MAJ 2010 CZĘŚĆ I. Czas pracy: 120 minut. Liczba punktów do uzyskania: 23 WPISUJE ZDAJĄCY

EGZAMIN MATURALNY Z JĘZYKA ANGIELSKIEGO POZIOM ROZSZERZONY MAJ 2010 CZĘŚĆ I. Czas pracy: 120 minut. Liczba punktów do uzyskania: 23 WPISUJE ZDAJĄCY Centralna Komisja Egzaminacyjna Arkusz zawiera informacje prawnie chronione do momentu rozpoczęcia egzaminu. Układ graficzny CKE 2010 KOD WPISUJE ZDAJĄCY PESEL Miejsce na naklejkę z kodem dysleksja EGZAMIN

Bardziej szczegółowo

BOGFRAN home _BOGFRANHOME_UZUPELNIENIE.indd :21:39

BOGFRAN home _BOGFRANHOME_UZUPELNIENIE.indd :21:39 BOGFRAN home www.bogfranhome.pl 2016_BOGFRANHOME_UZUPELNIENIE.indd 1 2016-08-30 08:21:39 Krzesło / Chair Tory kol./col.: brązowy, szary, zielony / brown, grey, green 956 620 465 2016_BOGFRANHOME_UZUPELNIENIE.indd

Bardziej szczegółowo

Laboratorium - Konfiguracja zabezpieczeń sieci bezprzewodowej

Laboratorium - Konfiguracja zabezpieczeń sieci bezprzewodowej 5.0 10.2.4.10 Laboratorium - Konfiguracja zabezpieczeń sieci bezprzewodowej Wprowadzenie Wydrukuj i uzupełnij to laboratorium. W tym laboratorium, będziesz konfigurował i testował ustawienia bezprzewodowe

Bardziej szczegółowo