Well, Hi.
I am an associate professor at Technion, Haifa.
My research areas include functional languages, synthesis of
functional programs, and high-level programming.
This is my current research statement.
Publications
Easter Egg: Equality Reasoning Based on E-Graphs with Multiple Assumptions
Eytan Singher, Shachar Itzhaky. In FMCAD 2024 (Formal Methods in Computer-Aided Design, October 2024)
Hyperproperty Verification as CHC Satisfiability
Shachar Itzhaky, Sharon Shoham, Yakir Vizel. In ESOP 2024 (European Symposium on Programming, April 2024)
Leveraging Rust Types for Program Synthesis Abstract
Jonás Fiala, Shachar Itzhaky, Peter Müller, Nadia Polikarpova, Ilya Sergey. In Proc. ACM Program. Lang. 2023
The problem of automatically proving the equality
of terms over recursive functions and
inductive data types is challenging,
as such proofs often require auxiliary lemmas
which must themselves be proven.
Previous attempts at lemma discovery compromise
on either efficiency or efficacy.
Goal-directed approaches
are fast but limited in expressiveness,
as they can only discover auxiliary lemmas which
entail their goals.
Theory exploration approaches
are expressive but inefficient,
as they exhaustively enumerate candidate lemmas.
We introduce e-graph guided lemma discovery,
a new approach to finding equational proofs
that makes theory exploration goal-directed.
We accomplish this by using e-graphs and equality saturation to
efficiently construct and compactly represent
the space of all goal-oriented proofs.
This allows us to explore only those auxiliary
lemmas guaranteed to help make progress
on some of these proofs.
We implemented our method in a new prover
called and compared it with three state-of-the-art provers
across a variety of benchmarks.
performs consistently well on two standard benchmarks
and additionally solves 50 a new challenging set.
SMT Sampling via Model-Guided Approximation
Matan Peled, Bat-Chen Rothenberg, Shachar Itzhaky. In Formal Methods - 25th International Symposium, FM 2023
Scalable Spreadsheet-Driven End-User Applications with Incremental Computation
Sean Hadar, Shachar Itzhaky. In Onward! 2023 (ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, Onward!, October 2023)
AmiGo: Computational Design of Amigurumi Crochet Patterns
Michal Edelstein, Hila Peleg, Shachar Itzhaky, Mirela Ben-Chen. In SCF '22: Proceedings of the 7th Annual ACM Symposium on Computational Fabrication, Seattle, WA, USA, October 26-28, 2022
Run-Time Complexity Bounds Using Squeezers Abstract
Oren Ish-Shalom, Shachar Itzhaky, Noam Rinetzky, Sharon Shoham. In ESOP 2021 (European Symposium on Programming, March 2021)
Determining upper bounds on the time complexity of a program is a fundamental problem with a variety of applications, such as performance debugging, resource certification, and compile-time optimizations.
Automated techniques for cost analysis excel at
bounding the resource complexity of programs that use integer values and linear arithmetic.
Unfortunately, they fall short when execution traces become more involved, esp. when data dependencies may affect the termination conditions of loops.
In such cases, state-of-the-art analyzers have shown to produce loose bounds, or even no bound at all.
We propose a novel technique that generalizes the common notion of recurrence relations based on ranking functions.
Existing methods usually unfold one loop iteration, and examine
the resulting relations between variables.
These relations assist in establishing a recurrence that bounds the number of loop iterations.
We propose a different approach, where we derive recurrences by comparing whole traces with whole traces of a lower rank,
avoiding the need to analyze the complexity of intermediate states.
We offer a set of global properties, defined with respect to whole traces, that facilitate such a comparison,
and show that these properties can be checked efficiently using a handful of local conditions.
To this end, we adapt state squeezers, an induction mechanism previously used for verifying safety properties.
We demonstrate that this technique encompasses the reasoning power of bounded unfolding, and more.
We present some seemingly innocuous, yet intricate, examples where previous tools based on cost relations and control flow analysis fail to solve,
and that our squeezer-powered approach succeeds.
Programming by Predicates: a Formal Model for Interactive Synthesis
Hila Peleg, Shachar Itzhaky, Sharon Shoham, Eran Yahav. In Acta Informatica 2020
Liquid Information Flow Control Abstract
Nadia Polikarpova, Deian Stefan, Jean Yang, Shachar Itzhaky, Travis Hance, Armando Solar-Lezama. In ICFP 2020 (ACM SIGPLAN International Conference on Functional Programming, August 2020)
We present Lifty, a domain-specific language for data-centric applications that manipulate sensitive data.
A Lifty programmer annotates the sources of sensitive data with declarative security policies,
and the language statically and automatically verifies that the application handles the data according to the policies.
Moreover, if verification fails, Lifty suggests a provably correct repair,
thereby easing the programmer burden of implementing policy enforcing code throughout the application.
The main insight behind Lifty is to encode information flow control
using liquid types, an expressive yet decidable type system.
Liquid types enable fully automatic checking of complex, data dependent policies,
and power our repair mechanism via type-driven error localization and patch synthesis.
Our experience using Lifty to implement three case studies from the literature shows that
◦ the Lifty policy language is sufficiently expressive to specify many real-world policies,
◦ the Lifty type checker is able to verify secure programs and find leaks in insecure programs quickly, and
◦ even if the programmer leaves out all policy enforcing code,
the Lifty repair engine is able to patch all leaks automatically within a reasonable time.
Programming with a Read-Eval-Synth Loop
Hila Peleg, Roi Gabay, Shachar Itzhaky, Eran Yahav. In OOPSLA 2020 (ACM SIGPLAN conference on Systems, Programming, Languages, and Applications: Software for Humanity (OOPSLA track), 2020)
Putting the Squeeze on Array Programs: Loop Verification via Inductive Rank Reduction
Oren Ish-Shalom, Shachar Itzhaky, Noam Rinetzky, Sharon Shoham. In VMCAI 2020 (International Conference on Verification, Model Checking, and Abstract Interpretation, January 2020)
Harnessing Static Analysis to Help Learn Pseudo-Inverses of String Manipulating Procedures for Automatic Test Generation
Oren Ish-Shalom, Shachar Itzhaky, Roman Manevich, Noam Rinetzky. In VMCAI 2020 (International Conference on Verification, Model Checking, and Abstract Interpretation, January 2020)
Property-Directed Inference of Universal Invariants or Proving Their Absence – extended version
Aleksander Karbyshev, Nikolaj Bjørner, Shachar Itzhaky, Noam Rinetzky, Sharon Shoham. In JACM 2017 (Journal of the ACM, 2017)
Deriving Divide-and-Conquer Dynamic Programming Algorithms Using Solver-Aided Transformations Abstract
Shachar Itzhaky, Rohit Singh, Armando Solar-Lezama, Kuat Yessenov, Yongquan Lu, Charles Leiserson, Rezaul Chowdhury. In OOPSLA 2016 (ACM SIGPLAN conference on Systems, Programming, Languages, and Applications: Software for Humanity (OOPSLA track), Amsterdam, Netherlands, November 2016)
We introduce a framework allowing domain experts to manipulate computational terms in the interest of deriving better, more efficient implementations. It employs deductive reasoning to generate provably correct efficient implementations from a very high-level specification of an algorithm, and inductive constraint-based synthesis to improve automation. Semantic information is encoded into program terms through the use of refinement types. In this paper, we develop the technique in the context of a system called Bellmania that uses solver-aided tactics to derive parallel divide-and-conquer implementations of dynamic programming algorithms that have better locality and are significantly more efficient than traditional loop-based implementations. Bellmania includes a high-level language for specifying dynamic programming algorithms and a calculus that facilitates gradual transformation of these specifications into efficient implementations. These transformations formalize the divide-and-conquer technique; a visualization interface helps users to interactively guide the process, while an SMT-based back-end verifies each step and takes care of low-level reasoning required for parallelism. We have used the system to generate provably correct implementations of several algorithms, including some important algorithms from computational biology, and show that the performance is comparable to that of the best manually optimized code.
Abstract
PDF
Object Spreadsheets: a New Computational Model for End-user Development of Data-centric Web Applications
Richard Matthew McCutchen, Shachar Itzhaky, Daniel Jackson
In SPLASH 2016 Onward! (to appear November 2016)
Spreadsheets offer many advantages as the computational and data-storage engine for applications that are authored by end users. Paradoxically, however, their main failing in this regard is their computational model. Despite being used in almost all cases to represent data that is essentially relational (with some hierarchical structuring), the spreadsheet model treats the two-dimensional grid as largely unstructured, with formulas linking cells in an ad hoc way.
This paper reports on a quest to rethink the spreadsheet model. The model we propose supports not only conventional relational data, but also nested variable-size lists and object references. It includes a formula language suited to the data model and procedures to specify updates.
The model has been implemented in a tool called Object Spreadsheets, which is intended for the development of data-centric web applications. We describe several example applications we built using the tool to demonstrate its applicability.
Verified Lifting of Stencil Computations
Abstract
PDF
Shoaib Kamil, Alvin Cheung, Shachar Itzhaky, and Armando Solar-Lezama
In PLDI 2016 (37th ACM SIGPLAN Conference on Programming Language Design and Implementation,
Santa Barbara, CA, USA, June 2016)
This paper demonstrates a novel combination of program synthesis and verification to lift stencil computations from low-level Fortran code to a high-level summary expressed using a predicate language. The technique is sound and mostly automated, and leverages counter-example guided inductive synthesis (CEGIS) to find provably correct translations. Lifting existing code to a high-performance description language has a number of benefits, including maintainability and performance portability. Our experiments show that the lifted summaries allow domain specific compilers to do a better job of parallelization as compared to an off-the-shelf compiler working on the original code, and can even support fully automatic migration to hardware accelerators such as GPUs. We have implemented verified lifting in a system called STNG and have evaluated it using microbenchmarks, mini-apps, and real-world applications. We demonstrate the benefits of verified lifting by first automatically summarizing Fortran source code into a high-level predicate language, and subsequently translating the lifted summaries into Halide, with the translated code achieving median performance speedups of 4.1× and up to 24× as compared to the original implementation.
Property-Directed Inference of Universal Invariants or Proving Their Absence
Abstract
PDF
Aleksander Karbyshev, Nikolaj Bjørner, Shachar Itzhaky, Noam Rinetzky, and Sharon Shoham
In CAV 2015 (Computer Aided Verification, San Francisco, CA, USA, July 2015)
We present Universal Property Directed Reachability (PDR∀), a property-directed procedure for automatic inference of invariants in a universal fragment of first-order logic. PDR∀ is an extension of Bradley’s PDR/IC3 algorithm for inference of propositional invariants. PDR∀ terminates when it either discovers a concrete counterexample, infers an inductive universal invariant strong enough to establish the desired safety property, or finds a proof that such an invariant does not exist. We implemented an analyzer based on PDR∀, and applied it to a collection of list-manipulating programs. Our analyzer was able to automatically infer universal invariants strong enough to establish memory safety and certain functional correctness properties, show the absence of such invariants for certain natural programs and specifications, and detect bugs. All this, without the need for user-supplied abstraction predicates.
Property-Directed Shape Analysis
Abstract
PDF
Shachar Itzhaky, Nikolaj Bjørner, Thomas Reps, Mooly Sagiv, Aditya Thakur
In CAV 2014 (Computer Aided Verification, Vienna, Austria, July 2014)
This paper addresses the problem of automatically generating quantified invariants
for programs that manipulate singly- and doubly-linked list data structures.
Our algorithm is property-directed — i.e., its choices are driven by the properties to be proven.
The algorithm is able to establish that a correct program has no memory-safety
violations — e.g., null-pointer dereferences, double frees —
and that data-structure invariants are preserved.
For programs with errors, the algorithm produces concrete counterexamples.
More broadly, the paper describes how to integrate IC3 with full predicate abstraction.
The analysis method is complete in the following sense: if an inductive
invariant that proves that the program satisfies a given property is
expressible as a Boolean combination of a given set of predicates, then the analysis will find such an invariant.
This method represents the first shape-analysis algorithm that is capable of
- reporting concrete counterexamples, or alternatively
- establishing that the predicates in use are not capable of proving the property in question.
VeriCon: Towards Verifying Controller Programs in Software-Defined Networks
Abstract
PDF
Thomas Ball, Nikolaj Bjørner, Aaron Gember,
Shachar Itzhaky, Aleksandr Karbyshev, Mooly Sagiv,
Michael Schapira, Asaf Valadarsky
In PLDI 2014 (35th ACM SIGPLAN Conference on Programming Language Design and Implementation,
Edinburgh, UK, June 2014)
Software-defined networking (SDN) is a new paradigm for operating and managing computer networks. SDN enables logically-centralized control over network devices through a “controller” software that operates independently from the network hardware, and can be viewed as the network operating system. Network operators can run both inhouse and third-party SDN programs (often called applications) on top of the controller, e.g., to specify routing and access control policies. SDN opens up the possibility of applying formal methods to prove the correctness of computer networks. Indeed, recently much effort has been invested in applying finite state model checking to check that SDN programs behave correctly. However, in general, scaling these methods to large networks is challenging and, moreover, they cannot guarantee the absence of errors.
We present VeriCon, the first system for verifying that an SDN program is correct on all admissible topologies and for all possible (infinite) sequences of network events. VeriCon either confirms the correctness of the controller program on all admissible network topologies or outputs a concrete counterexample. VeriCon uses first-order logic to specify admissible network topologies and desired network-wide invariants, and then implements classical Floyd-Hoare-Dijkstra deductive verification using Z3. Our preliminary experience indicates that VeriCon is able to rapidly verify correctness, or identify bugs, for a large repertoire of simple core SDN programs. VeriCon is compositional, in the sense that it verifies the correctness of execution of any single network event w.r.t. the specified invariant, and can thus scale to handle large programs. To relieve the burden of specifying inductive invariants from the programmer, VeriCon includes a separate procedure for inferring invariants, which is shown to be effective on simple controller programs. We view VeriCon as a first step en route to practical mechanisms for verifying network-wide invariants of SDN programs.
Modular Reasoning about Heap Paths via Effectively Propositional Formulas
Abstract
PDF
Shachar Itzhaky, Anindya Banerjee, Neil Immerman, Ori Lahav, Aleksandar Nanevski, Mooly Sagiv
In POPL 2014 (41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,
San Diego, CA, USA, January 2014)
First-order logic with transitive closure and separation logic enable elegant interactive verification of heap-manipulating programs.
However, undecidabilty results and high asymptotic complexity of checking validity preclude complete automatic verification of such programs,
even when loop invariants and procedure contracts are specified as formulas in these logics.
This paper tackles the problem of procedure-modular verification of reachability properties of heap-manipulating programs using efficient decision procedures that are complete:
that is, a SAT solver must generate a counterexample whenever a program does not satisfy its specification. By
- requiring each procedure modifies a fixed set of heap partitions and creates a bounded amount of heap sharing, and
- restricting program contracts and loop invariants to use only deterministic paths in the heap,
we show that heap reachability updates can be described in a simple manner.
The restrictions force program specifications and verification conditions to lie within a fragment of first-order logic with
transitive closure that is reducible to effectively propositional logic, and hence facilitate sound, complete and efficient verification.
We implemented a tool atop Z3 and report on preliminary experiments that establish the correctness of several programs that manipulate linked data structures.
Solving Geometry Problems Using a Combination of Symbolic and Numerical Reasoning
Abstract
PDF
Shachar Itzhaky, Sumit Gulwani, Neil Immerman, Mooly Sagiv
In LPAR-19, Stellenbosch, South Africa, December 2013
We describe a framework that combines deductive, numeric, and inductive reasoning to solve geometric problems. Applications in- clude the generation of geometric models and animations, as well as problem solving in the context of intelligent tutoring systems.
Our novel methodology uses
- Deductive reasoning to generate a partial program from logical constraints,
- Numerical methods to evaluate the partial program, thus creating geometric models which are solutions to the original problem,
- Inductive synthesis to read off new constraints that are then applied to one more round of deductive reasoning leading to the desired deterministic program.
By the combination of methods we were able to solve problems that each of the methods was not able to solve by itself.
The number of nondeterministic choices in a partial program provides a measure of how close a problem is to being solved and can thus be used in the educational context for grading and providing hints.
We have successfully evaluated our methodology on 18 Scholastic Aptitude Test geometry problems, and 11 ruler/compass-based geometry construction problems.
Our tool solved these problems in an average of a few seconds per problem.
Effectively-Propositional Reasoning About Reachability in Linked Data Structures
Abstract
PDF
Shachar Itzhaky, Anindya Banerjee, Neil Immerman, Aleksandar Nanevski, Mooly Sagiv
In CAV 2013 (Computer Aided Verification, 2013, St. Petersburg, Russia, July 2013)
This paper proposes a novel method of harnessing existing SAT solvers to verify
reachability properties of programs that manipulate linked-list data structures. Such properties
are essential for proving program termination, correctness of data structure
invariants, and other safety properties. Our solution is complete,
i.e., a SAT solver produces a counterexample whenever a program
does not satisfy its specification. This result is
surprising since even first-order theorem provers usually cannot deal
with reachability in a complete way, because doing so requires reasoning about
transitive closure.
Our result is based on the following ideas:
- Programmers must write assertions in a restricted logic without quantifier alternation or function symbols.
- The correctness of many programs can be expressed in such restricted logics, although we explain the tradeoffs.
- Recent results in descriptive complexity can be utilized to show that every program that manipulates
potentially cyclic, singly- and doubly-linked lists and that is annotated with assertions written in this restricted logic, can be verified with a SAT solver.
We implemented a tool atop Z3 and used it to show the correctness of several linked list programs.
A Simple Inductive Synthesis Methodology and Its Applications
Abstract
BibTeX
PDF
Shachar Itzhaky, Sumit Gulwani, Neil Immerman, Mooly Sagiv
In SPLASH 2010 (ACM SIGPLAN Conference on Systems, Programming, Languages and Applications: Software for Humanity, Reno, NV, United States, October 2010)
Given a high-level specification and a low-level programming language, our goal is to automatically
synthesize an efficient program that meets the specification. In this paper, we present a new
algorithmic methodology for inductive synthesis that allows us to do this.
We use Second Order logic as our generic high level specification logic. For our low-level
languages we choose small application-specific logics that can be immediately translated into code
that runs in expected linear time in the worst case.
We explain our methodology and provide examples of the synthesis of several graph classifiers, e.g,
linear-time tests of whether the input graph is connected, acyclic, etc. In another set of
applications we automatically derive many finite differencing expressions equivalent to ones that
Paige built by hand in his thesis. Finally we describe directions for
automatically combining such automatically generated building blocks to synthesize efficient code
implementing more complicated specifications.
The methods in this paper have been implemented in Python using the SMT solver Z3.
Technical Reports and Archives
Type-Driven Repair for Information Flow Security
PDF
Nadia Polikarpova, Jean Yang, Shachar Itzhaky, Armando Solar-Lezama
Effectively-Propositional Reasoning About Reachability in Linked Data Structures
PDF
Shachar Itzhaky, Anindya Banerjee, Neil Immerman, Aleksandar Nanevski, Mooly Sagiv
Solving Geometry Problems Using a Combination of Symbolic and Numerical Reasoning
Abstract
PDF
Shachar Itzhaky, Sumit Gulwani, Neil Immerman, Mooly Sagiv
We describe a framework that combines deductive, numeric, and inductive reasoning to solve geometric problems. Applications in- clude the generation of geometric models and animations, as well as problem solving in the context of intelligent tutoring systems.
Our novel methodology uses
- Deductive reasoning to generate a partial program from logical constraints,
- Numerical methods to evaluate the partial program, thus creating geometric models which are solutions to the original problem,
- Inductive synthesis to read off new constraints that are then applied to one more round of deductive reasoning leading to the desired deterministic program.
By the combination of methods we were able to solve problems that each of the methods was not able to solve by itself.
The number of nondeterministic choices in a partial program provides a measure of how close a problem is to being solved and can thus be used in the educational context for grading and providing hints.
We have successfully evaluated our methodology on 18 Scholastic Aptitude Test geometry problems, and 11 ruler/compass-based geometry construction problems.
Our tool solved these problems in an average of a few seconds per problem.
Thesis
Automatic Reasoning for Pointer Programs Using Decidable Logics
PDF
Under the supervision of Professor Mooly Sagiv
Tel Aviv University (submitted: August 2014; approved: July 2015)
Recipient of the ACM SIGPLAN John C. Reynolds Doctoral Dissertation Award
My Codez
- EPR-based Verification
- PDR∀ – loop invariant inference
Mac
Ubuntu 64-bit,
32-bit
- VeriCon – Hoare-style verification for SDN controller programs
- Source
- Object Spreadsheets
- Live demo