Towards Clause Learning \`a la Carte through VarMonads
More and more languages have a need for constraint solving capabilities for features like error detection or automatic code generation. Imagine a dependently typed language that can immediately implement a program as soon as its type is given. In SAT-solving, there have been several techniques to sp...
Gespeichert in:
Hauptverfasser: | , |
---|---|
Format: | Artikel |
Sprache: | eng |
Schlagworte: | |
Online-Zugang: | Volltext bestellen |
Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
Zusammenfassung: | More and more languages have a need for constraint solving capabilities for
features like error detection or automatic code generation. Imagine a
dependently typed language that can immediately implement a program as soon as
its type is given. In SAT-solving, there have been several techniques to speed
up a search process for satisfying assignments to variables that could be used
for program synthesis. One of these techniques is clause learning where, if a
search branch runs into a conflict, the cause of the conflict is analysed and
used to create a new clause that lets a branch fail earlier if the conflict
arises again. We provide a framework with which this technique can come for
free not just for Boolean solvers, but for any constraint solver running on
recursive algebraic data types. We achieve this by tracking the read operations
that happen before a variable is assigned and use this information to create
the dependency graph needed for conflict analysis.
Our results are implemented in Agda for best readability, but they transfer
to other functional languages as well. For brevity, we do not provide an entire
search system utilizing the clause learning, but it will become clear from the
formalisms that our technique indeed enables a clause learning search system to
be built. |
---|---|
DOI: | 10.48550/arxiv.2208.10460 |