Solving non-linear Horn clauses using a linear Horn clause solver
Bishoksan Kafle (Roskilde University), John P. Gallagher (Roskilde, University, IMDEA Software Institute), Pierre Ganty (IMDEA Software, Institute, Spain)

TL;DR
This paper presents a method to solve non-linear Horn clauses by transforming them into linear ones using tree dimension, enabling the use of linear Horn clause solvers for satisfiability checking.
Contribution
The paper introduces a novel transformation based on tree dimension to linearize non-linear Horn clauses, allowing existing linear solvers to handle non-linear problems.
Findings
Prototype implementation shows promising results on verification problems.
The approach effectively linearizes non-linear clauses for satisfiability checking.
Using lower-dimensional solutions aids in linearizing higher-dimensional clauses.
Abstract
In this paper we show that checking satisfiability of a set of non-linear Horn clauses (also called a non-linear Horn clause program) can be achieved using a solver for linear Horn clauses. We achieve this by interleaving a program transformation with a satisfiability checker for linear Horn clauses (also called a solver for linear Horn clauses). The program transformation is based on the notion of tree dimension, which we apply to a set of non-linear clauses, yielding a set whose derivation trees have bounded dimension. Such a set of clauses can be linearised. The main algorithm then proceeds by applying the linearisation transformation and solver for linear Horn clauses to a sequence of sets of clauses with successively increasing dimension bound. The approach is then further developed by using a solution of clauses of lower dimension to (partially) linearise clauses of higher…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
