Introduction

Introduction

One of the key technical contributions of the paper is an algorithm to find satisfying assignments to such synthesis constraints by using an off-the-shelf SMT solver

Questions

Summary

In this paper the authors present Brahma, which is a program synthesizer built to synthesize programs using component-based synthesis. The authors thoroughly formulate the component-based synthesis problem. They state that solving the component-based synthesis problem requires a formal specification which is a tuple of input variables and output variable, and the expression over the variables which specifies an input/output relationship. It also requires a set of specification (the library) which should be used to build the final solution. They show it’s possible to iteratively construct and verify the solution to the component-based synthesis problem using SAT solvers. The general approach to finding the solution seems quite naive as it is simply a top-down search through the problem space. The authors’ implementation focuses on solutions to problems in the bitwise operator space, but assert that it could be applied elsewhere with different library components. The implementation shows marked improvements over previous synthesizers which don’t formulate the problem as a component-based synthesis problem.

Strengths

Weaknesses

Questions

Yes, it is possible to specify the structural constraints as a grammar in the SyGuS format. Take the bitvector example from the paper: If our two possible operations on a bitvector V are & and - then a grammar could be written

S ::= V - O | V - V
A ::= V & V
O ::= 1
V ::= x

Given the original constraint below: ∃L∀ ~I,O,T: ψwfp(L) ∧ (φlib(T) ∧ ψconn(~I,O,T,L) ⇒ φspec(~I,O))

The ψwfp(L) does not have to change, since the well-formed programs specification should be the same is the same.

This leaves the component of the specification:

since φlib(T) represents the the specifications of the base components ψconn(~I,O,T,L) represents the interconnections between those particular components, we would need to reformulate these two pieces such that they represent only a subset of the particular library. so φlib and φconn would need to have a modified representation, possible with an argument for the value K to limit the available components.

Introduction - zac blanco