ebresafegaga / FPOP

Family Polymorphism for a proof assistant, an artifact. Paper : https://dl.acm.org/doi/10.1145/3591286

Home Page:https://cs.uwaterloo.ca/~yizhou/papers/fpop-pldi2023-tr.pdf

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FPOP, Family Polymorphism for Proof Assistant, a Prototype.

Build Instruction

We need to pins to

  1. Ocaml base compiler to 4.13.1
  2. coq to 8.15.0,

Build Source Code

directly run

dune build

Run all the showcase commands from the guide

We have pack all the coqc commnds into testshowcase.sh in FPOP directory.

The following commands are run under the FPOP directory

We warn that, these tests are time consuming

cd FPOP
cat testshowcase.sh

The reader can directly try to run them via this shell file, and check output*.txt for the dump info.

Currently we cannot turn off the debug dump.


Directory Structure

  1. showcase_test/ includes all the showcase included in the paper
  2. src/ and theories/ includes all the source code of our plugin. LibTactics.v and Maps.v are directly from Software Foundation

about src directory

  1. src/familytype.ml contains the main functionality of our plugin. For example, the internal data structure (representing family) and the translation from this internal data structure to Coq's command.
  2. src/fampoly.mlg is the mlg file extending the Vernacular syntax for our plugin
  3. src/famprogram.ml mainly interacts with the user. It contains the function that fampoly.mlg will invoke
  4. src/fenv.ml handles the environment/definitions of the families in our internal structure
  5. src/finduction.ml implements the FRecursion facility
  6. src/finh.ml implements the inheritance facility
  7. src/ftheorem.ml makes it possible to use proof script to work with our plugin
  8. src/utils and src/CCCache.ml are helpers. CCCache.ml is directly copied from OCaml-containers (Thanks Simon Cruanes!)

Known Bugs

  1. The debug dump will be generated during the usage of our plugin. We currently doesn't support turning it off
  2. Families have to be wrapped inside one module. (i.e. There has to be a very top level module, then we can define family inside this module)
  3. Not working well with VSCoq 0.3.8's "Interpret to End" Command. Because this command is actually interpreting the proof script in a parallel way. Current implementation breaks some of this assumption

Known Bugs on MacOS

  1. When running coqc on two Analysis_showcase, it might took around 3 times the expected time. It won't immediately terminate after the final command Print Analysis_showcase.LangCP.
  2. VSCoq on MacOS is not working well with our plugin

Artifact Avaliable at

https://doi.org/10.5281/zenodo.7800226

About

Family Polymorphism for a proof assistant, an artifact. Paper : https://dl.acm.org/doi/10.1145/3591286

https://cs.uwaterloo.ca/~yizhou/papers/fpop-pldi2023-tr.pdf

License:MIT License


Languages

Language:Coq 53.6%Language:OCaml 46.2%Language:Shell 0.1%Language:Makefile 0.1%