Introduction

Introduction

Overview

Synquid Language

Questions

Summary

This paper presents a new method for synthesizing recursive programs using the structure of the grammar (refinement types) which helps type check the program output, and using liquid types can help refine the search space for the synthesis problem.

The contributions are twofold. First, a new mechanism for liquid type checking is introduced which uses a combination of top-down and bottom-up approach of type propagation. Second, a new “liquid abduction” rule is applied which also enables checking of branching terms within a program.

Additionally, the Synquid language specifies a fixed set of terms and types which can be used in its synthesis, which is relatively expressive that includes (non-exhaustively) refinement, branching, functions, scalars, and more.

The results show that that Synquid is able to effectively synthesize recursive programs that are arguably more complex than other papers we have studied recently, showing that it can synthesize programs for binary tree or list insertions.

Strengths

Weaknesses

Well, arguably The word “judgment” should be “judgement” in the final paragraph of the example subsection of 3.2, but it depends on who you ask. According to the following link “judgment” may be more common in british english: https://www.thesaurus.com/e/grammar/judgement-vs-judgment/

EUSolver uses conditional abduction to solve subproblems, but then continues to enuerate programs on the unsolved subproblems. This approach needs to synthesize the condition which needs to be met in order to properly solve the subproblems. On the other hand, synquid’s liquid abduction tries to infer the type of one of the branches first, and then deduce what the condition may be based on the types. In both EUSolver and synquid the papers rely on fast mechanisms to determine the condition.

Introduction - zac blanco