This code is largely based on work by Daniel W. H. James and Ralf Hinze from their paper A Reflection-based Proof Tactic for Lattices in Coq. It also includes techniques presented by Arthur Azevedo de Amorim in his blog entry on Writing reflective tactics.
To use, provide type class instances for LOSet
and its related type classes:
Order
, Reflexive
, Transitive
and Lattice
. You will then be able to use
the tactic lattice
to solve goals expressed as inequalities that use the
ord
operator (also ≤
) from the Order
type class.
The code is straightforward enough that it can also serve as a template for
other decision procedures you might want to write, which are too complex for
Coq's own Quote
library.