Notes

Notes

Summary

This paper presents a new approach to solving a type of synthesis problem using probabilistic grammars and A* search. One of the main optimizations the authors present in this paper is the structuring of the synthesis problem as a graph search, where an algorithm like A* may be applied to the search. The authors also introduce the idea of PHOGs (probabilistic higher-order grammars) which allow assignment of probabilities to the problem grammars in order to search for solutions efficiently. Given the right inputs the combination of these two techniques results in a fast search for synthesis solutions. The authors are also able to apply previously studied optimization techniques in SyGuS problems such as equivalence purning and divide-and-conquer enumeration (EUSolver) to further improve the performance of their system.

Strengths

Weaknesses

I think this question has a typo. I am going to assume that “PCGF” is actually “PCFG” and stands for “probabilistic context free grammar” assuming the G and F in the acronym were switched.

e.g. for the first line, the production would look like:

Pr(S –> “.” Rep(x, “-“, S)) = …

I’ve never learned about 3-grams before. But presuming the wikipedia page is accurate, then you might represent the 3-gram as the probability of a variable x being

Pr(S –> “.” (Rep, “-“, S))

I think these other probabilistic models could at minimum be as accurate if they capture as much or more information than the PHOG. The PHOG attemtps to capture the surrounding context, so for a particular n-gram or PCFG were able to capture the same context, then they could be as accurate. PCFGs don’t seem to capture the search context which would lead me to believe they probably can’t achieve the same performance.

Plainly, h(S) = 0.1 means 0.1 is the upper bound on probability that S or an expression derived from S could be the solution. Part of the reason is the specification of the grammar. The reason this is the case is that the grammar specifies the production rule of S –> c being 0.1

pts: {“–__”} n1 = Len(Rep(S, “-“, “”)) n2 = Len(Rep(S, “.”, “”))

Notes - zac blanco