3 research outputs found
MirrorShard: Proof by Computational Reflection with Verified Hints
We describe a method for building composable and extensible verification
procedures within the Coq proof assistant. Unlike traditional methods that rely
on run-time generation and checking of proofs, we use verified-correct
procedures with Coq soundness proofs. Though they are internalized in Coq's
logic, our provers support sound extension by users with hints over new
domains, enabling automated reasoning about user-defined abstract predicates.
We maintain soundness by developing an architecture for modular packaging,
construction, and composition of hint databases, which had previously only been
implemented in Coq at the level of its dynamically typed, proof-generating
tactic language. Our provers also include rich handling of unification
variables, enabling integration with other tactic-based deduction steps within
Coq. We have implemented our techniques in MirrorShard, an open-source
framework for reflective verification. We demonstrate its applicability by
instantiating it to separation logic in order to reason about imperative
program verification
Improving Coq Propositional Reasoning Using a Lazy CNF Conversion Scheme
Abstract. In an attempt to improve automation capabilities in the Coq proof assistant, we develop a tactic for the propositional fragment based on the DPLL procedure. Although formulas naturally arising in interactive proofs do not require a state-of-the-art SAT solver, the conversion to clausal form required by DPLL strongly damages the performance of the procedure. In this paper, we present a reflexive DPLL algorithm formalized in Coq which outperforms the existing tactics. It is tightly coupled with a lazy CNF conversion scheme which, unlike Tseitin-style approaches, does not disrupt the procedure. This conversion relies on a lazy mechanism which requires slight adaptations of the original DPLL. As far as we know, this is the first formal proof of this mechanism and its Coq implementation raises interesting challenges.
Common equivalence and size after forgetting
Forgetting variables from a propositional formula may increase its size.
Introducing new variables is a way to shorten it. Both operations can be
expressed in terms of common equivalence, a weakened version of equivalence. In
turn, common equivalence can be expressed in terms of forgetting. An algorithm
for forgetting and checking common equivalence in polynomial space is given for
the Horn case; it is polynomial-time for the subclass of single-head formulae.
Minimizing after forgetting is polynomial-time if the formula is also acyclic
and variables cannot be introduced, NP-hard when they can