Armando Solar-Lezama
Graduate Student  
UC Berkeley  
   
asolar_at_eecs.berkeley.edu  
 
Programming by Sketching:   StreamBit   SKETCH  
SKETCH: Combinatorial Sketching for Finite programs

SKETCH is a sketching system based on combinatorial search, as opposed to transformations. In this system, the sketch is given in the form of a partial program--a program with holes--and the sketch resolution synthesizes code to fill in the holes. The holes may stand for index expressions, lookup tables or bitmasks, and the programmer can easily define new kinds of holes with the synthesis operators provided. SKETCH completes sketches by means of a combinatorial search based on generalized boolean satisfiability.

The some of the  main contributions of this project include:

  • Design of a language for sketching based on a single new construct: the integer hole which the synthesizer replaces with an integer constant. This construct is incredibly powerful; by composing expressions with integer holes and composing them into libraries, we can provide the programmer with a rich language for expressing intent while leaving low-level details unspecified.
  • Reduction of the synthesis problem to a generalized boolean satisfiability problem. Because all the holes in the sketch are expressed in terms of integer holes, the synthesis problem can be framed as a search for a set of integer constants that make the spec equal the sketch for all inputs. 
  • A counterexample guided algorithm to solve sketch synthesis problems.
  • Development of a robust implementation of the sketch language available for download here.

The basic combinatorial sketch solver has been released, and can be found here, together with a useful tutorial. The compiler release currently includes only the functionality up to the ASPLOS 06 paper. By Jan 08, we intend to release version 1.2, which will include the code for synthesizing stencils, as described in PLDI 07, as well as support for pointers and heap-based data-structures, and improved error-messages and debugging output.

We are currently extending the synthesizer to be able to sketch concurrent and lock-free datastructures (more on this soon).

This is joint work Gilad Arnold, Chris Jones, Liviu Tacanu, and my advisor, Ras Bodik, in collaboration with Sanjit Seshia, and Vijay Saraswat. We are also colaborating with Alan Mischenko and Satrajit Chatterjee, from Robert Brayton's group, to incorporate some of their verification technology into our solver.

Software:
SKETCH compiler and official webpage.
Links:
PLDI 07 talk on sketching stencils.
A talk given at the OSQ lunch on Oct 5 2006
ASPLOS 06 talk on the combinatorial sketch solver
A talk given at our anual OSQ retreat in May 2006

A talk given to Robert Brayton's group in February

A poster(pdf)

 
 Conference Papers:
Armando Solar-Lezama, Gilad Arnold, Liviu Tancau, Rastislav Bodik, Vijay Saraswat, Sanjit Seshia, "Sketching Stencils" in ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '07)
 Armando Solar-Lezama, Liviu Tancau, Rastislav Bodik, Vijay Saraswat, Sanjit A. Seshia, "Combinatorial Sketching for Finite Programs", Proceedings of ASPLOS 2006.
Comming Soon:
Sketching Concurrent Datastructures