Programming with Invariants through Targeted Synthesis. John Sarracino

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

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

Analysis of Movie Profitability STAT 469 IN CLASS ANALYSIS #2

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Previously on CSCI 4622

EaglePCB_2_FreeCAD (beta)

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

Installation of EuroCert software for qualified electronic signature

Relaxation of the Cosmological Constant

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

License Certificate. Autodesk License Certificate Terms and Conditions

Revenue Maximization. Sept. 25, 2018

deep learning for NLP (5 lectures)

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

TTIC 31190: Natural Language Processing

Mixed-integer Convex Representability

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

Wstęp do Programowania potok funkcyjny

Gradient Coding using the Stochastic Block Model

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

Hard-Margin Support Vector Machines

Projekt: Mikro zaprogramowane na sukces!

Test-Driven Development


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


Instrukcja obsługi User s manual

Stargard Szczecinski i okolice (Polish Edition)

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

LEARNING AGREEMENT FOR STUDIES

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

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

Zarządzanie sieciami telekomunikacyjnymi

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

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

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

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


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

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

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

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

New method for the conformal bootstrap with OPE truncations

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

Zaawansowane aplikacje internetowe laboratorium

Rev Źródło:

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

Hotel, restaurant and retail trade services

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

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

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

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

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

Wsparcie dyplomacji ekonomicznej dla strategii surowcowej

Od wymagań do Javy w mgnieniu oka

OPTYMALIZACJA PUBLICZNEGO TRANSPORTU ZBIOROWEGO W GMINIE ŚRODA WIELKOPOLSKA

Knovel Math: Jakość produktu

Kierunek: Informatyka rev rev jrn Stacjonarny EN 1 / 6

ITIL 4 Certification

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

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

Linear Classification and Logistic Regression. Pascal Fua IC-CVLab

PRESENT TENSES IN ENGLISH by

OpenPoland.net API Documentation

Label-Noise Robust Generative Adversarial Networks

TEORIA CZASU PRESENT SIMPLE I PRESENT CONTINUOUS

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

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Pobieranie argumentów wiersza polecenia

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

Reguły asocjacyjne w programie RapidMiner Michał Bereta

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

Lecture 18 Review for Exam 1

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk

Ankiety Nowe funkcje! Pomoc Twoje konto Wyloguj. BIODIVERSITY OF RIVERS: Survey to students

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

Optimizing Programs with Intended Semantics

Podstawy programowania III WYKŁAD 6

Explorers Summer Adventure Camp

Program szkolenia: Fundamenty testowania

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

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

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

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

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

ECEN 5645 Class Meeting 7. Absorption/ Scattering

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

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

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

BOGFRAN home.

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

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

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

Healthix Consent Web-Service Specification

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

Nazwa projektu: Kreatywni i innowacyjni uczniowie konkurencyjni na rynku pracy

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

BOGFRAN home _BOGFRANHOME_UZUPELNIENIE.indd :21:39

Laboratorium - Konfiguracja zabezpieczeń sieci bezprzewodowej

Transkrypt:

Programming with Invariants through Targeted Synthesis John Sarracino 1

Programming is Hard

Programming is Hard Therac 25 1982

Programming is Hard Ariane 5 1996

Programming is Hard Maersk 2017

Programming is Hard Windows 2018

Programming is Hard Windows always

Computers are a Sadness and I am the cure

Programs are a Sadness and I am the cure

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

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

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

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

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

Manual Invariant Programming Invariants Algorithm

Manual Invariant Programming Invariants Algorithm Code

Manual Invariant Programming Invariants Algorithm Code

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

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

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

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

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

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

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

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

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

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

Proposed Work Data invariant calculus Extensions Invariants for Security GUI invariants

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

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

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

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

<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

<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

<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

<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

<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

<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

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;

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;

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;

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;

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;

Manual Invariant Programming Invariants Algorithm Code

Invariant Synthesis Invariants Algorithm Code

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

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

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

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

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

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

Spyder Separate invariant, imperative programs Compiler combines with targeted synthesis

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

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

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

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

Imperative AST

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

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

Invariant AST

Compilation Algorithm

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

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

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

Format Invariants Code Explanatory Caption Problem/Result

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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);

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;

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

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

<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

<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

<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

<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

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

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

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

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);

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

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

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

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

<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

<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

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

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

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

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

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

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

<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, https://commons.wikimedia.org/w/index.php?curid=101736

<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 *

<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 *

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

Formalisms

Formalisms

Formalisms Interesting Translation Rule

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

Formal Correctness Problem: Correctness:

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

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

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

<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

<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]

<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

<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 :(

<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 :(

<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]

<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]

<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]

<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)

<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)

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

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

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

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 =...

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

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

Outline Data invariant calculus Extensions Invariants for Security GUI invariants

Security is really hard

Hot off the presses!! September 28

Manual Security Invariants Invariant: All urls are in the urlset

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

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