ppx_rocq is a PPX rewriter that enables plugin writers to write Rocq terms using a simple quotation system, like so:
let nat_plus_assoc = [%constr "forall x y z : nat, (x + y) + z = x + (y + z)"] ;;
- : EConstr.t Proofview.tacticppx_rocq supports all quotations from Ltac2 (%constr, %preterm), an extra quotation for concrete syntax terms (%expr), as well as additional quotations for identifiers (%ident), qualifiers (%qualid), etc. Moreover, ppx_rocq also supports anti-quotations using the %{…} notation:
let lhs = [%expr "(x + y) + z"] in
let rhs = [%expr "x + (y + z)"] in
let nat_plus_assoc = [%constr "forall x y z : nat, %expr:{lhs} = %expr:{rhs}"] ;;
- : EConstr.t Proofview.tacticTo use ppx_rocq, run dune install on this repository:
git clone https://github.com/epfl-systemf/ppx_rocq.git
cd ppx_rocq
dune build
dune installThen add ppx_rocq to the preprocessing field of your library or executable stanza:
(library
(name my_library)
; …
(preprocessing (pps ppx_rocq)))