Open JasonGross opened 2 years ago
I think it would be useful to have these tactics and utilities in coqutil. Some questions:
Tactics
, Datatypes
and the Word
subfolders as high-compatibility folders (supporting older Coq versions), while only supporting the most recent released Coq version in the remaining subfolders?FixCoqMistakes.v
looks like it would be good to have in coqutil too, but I wonder why it has to export GlobalSettings.v
? Could we have it in coqutil without GlobalSettings.v
?I quickly went through the tactics/utilities you listed above and looked for equivalent ones in coqutil, and here's what I found:
coqutil.Tactics.Tactics.destruct_one_match_...
coqutil.Tactics.forward.unique_pose
head
/head_of_app
already appears in 3 different locations in coqutil
- A large but not-especially-coherently-organized library of utility lemmas about
Z
coqutil.Decidable
based on BoolSpec
rather than sumbool
(because we don't want proofs of Props to appear in code that's meant to be executed)
also in coqutil.Datatypes.HList
coqutil.Datatypes.List
also contains some lemmas about option (list _)
and list (option _)
FixCoqMistakes sounds like https://github.com/mit-plv/coqutil/blob/master/src/coqutil/sanity.v
https://coq.inria.fr/refman/changes.html
Changed: The default tactic used by firstorder is auto with core instead of auto with ; see Solvers for logic and equality for details; old behavior can be reset by using the -compat 8.12 command-line flag; to ease the migration of legacy code, the default solver can be set to debug auto with with Set Firstorder Solver debug auto with * (#11760, by Vincent Laporte).
Should any/all/most of the fiat-crypto
src/Util
directory be migrated to coqutil? (Currently this directory is more-or-less replicated across fiat, rewriter, and fiat-crypto, with fiat-crypto containing the most complete and up-to-date version.)An incomplete list of tactics, roughly in order from most-used to least-used:
match
subject to various conditions such as "only this type of variable", "only terms which contain no matches inside themselves", "only in the hyps", "only in the conclusion", "only variables" (with intelligent insertion of equations)assumption
,auto
,lia
, etc)pose
andassert
which are suitable for use inrepeat
blocks by ensuring that they don't pose duplicatesiff
,and
, produnderneath binders in a way that preserves the binders, e.g., turning
forall x y, P x y /\ Q x yinto
forall x y, P x yand
forall x y, Q x y`set
orsubst
on all evarssubst
that works modulo relationssubst
on all local definitionstransparent assert
etransitivity
that accepts argumentsdestruct
that attempts to work with convoy-pattern terms appearing in the goalespecialize
tac_on_subterms
, to be used as e.g.tac_on_subterms ring_simplify
intros *
tryif
for returning constrsreplace_with_vm_compute
for getting aroundvm_compute
not inserting castsif
statementsAn incomplete list of other utilities:
Z
, including automation for:lia
,nia
, orlra
at the leavesZ.modulo
, which is factored into a tacticsubst
which will solve linear equations in variables overZ
to substituteZ.testbit
nat
,list
,N
,Q
, MSetsreflect
culminating in a general tactic for turning boolean equality hypotheses into propositionsstring
, includingShow
,ShowLevel
(for printing with precedence), andShowLines
(printing to lists of strings rather than single strings, for better efficiency) and theory around themwf
and more factsArg
module (maybe this should be split off to a separate project and added on opam? (perhaps to be combined with the method for extracting main functions and executables in OCaml and Haskell?)eq
N
s into primesx = x
witheq_refl
when equality onx
is decidableLet_In
constant for not inlininglet ... in ...
and a monad around thisinversion_sigma
) foroption
,nat
,list
,prod
,prod
with primitive projections,sum
, primitive projection versions ofsig
,sigT
, etc,sumbool
Prop
soption (list _)
andlist (option _)