Solving non-linear Horn clauses using a linear solver
Abstract
Developing an efficient non-linear Horn clause solver is a challenging task since the solver has to reason about the tree structures rather than the linear ones as in a linear solver. In this paper we propose an incremental approach to solving a set of non-linear Horn clauses using a linear Horn clause solver. We achieve this by interleaving a program transformation and a linear solver. The program transformation is based on the notion of tree dimension, which we apply to trees corresponding to Horn clause derivations. The dimension of a tree is a measure of its non-linearity -- for example a linear tree (whose nodes have at most one child) has dimension zero while a complete binary tree has dimension equal to its height. A given set of Horn clauses can be transformed into a new set of clauses (whose derivation trees are the subset of 's derivation trees with dimension at most ). We start by generating with , which is linear by definition, then pass it to a linear solver. If has a solution , and is a solution to then has a solution . If is not a solution of , we plugged to which again becomes linear and pass it to the solver and continue successively for increasing value of until we find a solution to or resources are exhausted. Experiment on some Horn clause verification benchmarks indicates that this is a promising approach for solving a set of non-linear Horn clauses using a linear solver. It indicates that many times a solution obtained for some under-approximation of becomes a solution for for a fairly small value of .
Cite
@article{arxiv.1511.06668,
title = {Solving non-linear Horn clauses using a linear solver},
author = {Bishoksan Kafle},
journal= {arXiv preprint arXiv:1511.06668},
year = {2015}
}