Coq is a formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms and theorems together with an environment for semi-interactive development of machine-checked proofs.
Set Primitive Projections.
Set Implicit Arguments.
Set Universe Polymorphism.
Inductive paths A (x : A) : A -> Type := idpath : paths x x.
Notation "x = y :> A" := (@paths A x y).
Notation "x = y" := (x = y :> _).
Record foo := { x : Type; H : x = x }.
Create HintDb bar discriminated.
Hint Resolve H : bar.
Goal forall y : foo, @x y = @x y.
intro y.
progress auto with bar. (* failed to progress *)
Removing the @ signs from the goal "fixes" things.
If eta-expanded primitive projections are actually treated differently (as it seems they are), I would very much like a Set Printing Primitive Projections or similar that annotates which projections are primitive and which are eta-expanded; I think that some of the hardest bugs to find start with goals which depend subtlely on how you got there, and I don't want there to be yet another kind of bug for which Set Printing All doesn't give you enough to re-create the buggy context in a new goal.
Removing the
@
signs from the goal "fixes" things.If eta-expanded primitive projections are actually treated differently (as it seems they are), I would very much like a
Set Printing Primitive Projections
or similar that annotates which projections are primitive and which are eta-expanded; I think that some of the hardest bugs to find start with goals which depend subtlely on how you got there, and I don't want there to be yet another kind of bug for whichSet Printing All
doesn't give you enough to re-create the buggy context in a new goal.