diff options
| author | Arnaud Spiwack | 2013-11-25 19:05:48 +0100 |
|---|---|---|
| committer | Arnaud Spiwack | 2013-12-04 14:14:33 +0100 |
| commit | 078efbe2dfff0b783cd35b0b3ab2354f554e95a6 (patch) | |
| tree | e79c02a053d44a79f841a2e1ba013b12a08bd014 /plugins/Derive/g_derive.ml4 | |
| parent | 3c199b86ddf919d79ad79eb7d69f4b6f81bb73ab (diff) | |
Derive plugin.
A small plugin to support program deriving (à la Richard Bird) in Coq.
It's fairly simple:
Require Coq.Derive.Derive.
Derive f From g Upto eq As h.
Produces a goal (actually two, but the first one is automatically shelved):
|- eq g ?42
And closing the proof produces two definitions: f is instantiated with the value of ?42 (it's always transparent). And h is instantiated with the content of the proof (it is transparent or opaque depending on whether the proof was closed with Defined or Qed).
Diffstat (limited to 'plugins/Derive/g_derive.ml4')
| -rw-r--r-- | plugins/Derive/g_derive.ml4 | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/plugins/Derive/g_derive.ml4 b/plugins/Derive/g_derive.ml4 new file mode 100644 index 0000000000..354643c092 --- /dev/null +++ b/plugins/Derive/g_derive.ml4 @@ -0,0 +1,18 @@ +(************************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2012 *) +(* \VV/ **************************************************************) +(* // * This file is distributed under the terms of the *) +(* * GNU Lesser General Public License Version 2.1 *) +(************************************************************************) + +(*i camlp4deps: "grammar/grammar.cma" i*) + +(* arnaud: on a sans doute besoin des noms dans la liste. *) +(* arnaud: est-ce que VtNow signifie bien qu'on ne peut pas skipper la preuve? *) +let classify_derive_command _ = Vernacexpr.(VtStartProof ("Classic",Doesn'tGuaranteeOpacity,[]),VtNow) + +VERNAC COMMAND EXTEND Derive CLASSIFIED BY classify_derive_command +| [ "Derive" ident(f) "From" constr(init) "Upto" constr(r) "As" ident(lemma) ] -> + [ Derive.start_deriving f init r lemma ] +END |
