Well, Hi.
I am a senior lecturer at Technion, Haifa. My research areas include functional languages, synthesis of functional programs, and high-level programming. This is my current research statement.
Publications
Hyperproperty Verification as CHC Satisfiability Abstract
Shachar Itzhaky, Sharon Shoham, Yakir Vizel. In ESOP 2024 (European Symposium on Programming, April 2024)
Hyperproperties govern the behavior of a system or systems across multiple executions, and are being recognized as an important extension of regular temporal properties. So far, such properties have resisted comprehensive treatment by modern software model-checking approaches such as IC3/PDR, due to the need to find not only an inductive invariant but also a total alignment of different executions that facilitates simpler inductive invariants. We show how this treatment is achieved via a reduction from the verification problem of ∀k∃l properties to Constrained Horn Clauses. The approach is based on combining the inference of an alignment and inductive invariant in a single CHC encoding; and, for existential quantification over traces, incorporating also inference of a witness function for the existential choices, based on a game semantics with a sound-and-complete encoding to CHCs as well.
Leveraging Rust Types for Program Synthesis
Jonás Fiala, Shachar Itzhaky, Peter Müller, Nadia Polikarpova, Ilya Sergey. In Proc. ACM Program. Lang. 2023
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 Proceedings of the 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 PDFObject 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 ComputationsAbstract 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 AbsenceAbstract 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 AnalysisAbstract 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 NetworksAbstract 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 FormulasAbstract 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 ReasoningAbstract 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 StructuresAbstract 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 ApplicationsAbstract 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 SecurityPDF
Nadia Polikarpova, Jean Yang, Shachar Itzhaky, Armando Solar-Lezama
Effectively-Propositional Reasoning About Reachability in Linked Data StructuresPDF
Shachar Itzhaky, Anindya Banerjee, Neil Immerman, Aleksandar Nanevski, Mooly Sagiv
Solving Geometry Problems Using a Combination of Symbolic and Numerical ReasoningAbstract 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 LogicsPDF
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
MacUbuntu 64-bit, 32-bit - VeriCon – Hoare-style verification for SDN controller programs
- Source
- Object Spreadsheets
- Live demo