Skip to Content.
Sympa Menu

coq-club - [Coq-Club] Coq 8.6 typeclasses behavior change

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] Coq 8.6 typeclasses behavior change


Chronological Thread 
  • From: Ralf Jung <jung AT mpi-sws.org>
  • To: coq-club AT inria.fr
  • Subject: [Coq-Club] Coq 8.6 typeclasses behavior change
  • Date: Wed, 16 Nov 2016 14:14:54 +0100
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=jung AT mpi-sws.org; spf=Pass smtp.mailfrom=jung AT mpi-sws.org; spf=None smtp.helo=postmaster AT hera.mpi-klsb.mpg.de
  • Ironport-phdr: 9a23:pIbG+hInpqiDanhHxNmcpTZWNBhigK39O0sv0rFitYgQL/XxwZ3uMQTl6Ol3ixeRBMOAuqkC0rad7/+ocFdDyK7JiGoFfp1IWk1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZrKeTpAI7SiNm82/yv95HJbQhFgDSwbalvIBi5ogncucsbipZ+J6gszRfEvmFGcPlMy2NyIlKTkRf85sOu85Nm7i9dpfEv+dNeXKvjZ6g3QqBWAzogM2Au+c3krgLDQheV5nsdSWoZjBxFCBXY4R7gX5fxtiz6tvdh2CSfIMb7Q6w4VSik4qx2ThLjlSUJOCMj8GzPlMJ+jL9VrhGvqRNxzIHbfI6bOeFifq7fZ94WWXZNU8hTWiFHH4iyb5EPD+0EPetAs4fyvV8OrRWjDgeoGePvzDBIjWLx0K04zuQhFw7G0RclH9IWsXTYtc71NakJUeyvy6nI1zrDYupQ1Dzg64bIaggsreyCUL90a8bd1E0iGxnYglmKpoHoOzWY3fkXvWeB9epvT+evhnYnqw5vpjivwd8hionXiYIP0F/I7yB5wJ40JdGhS057ZcWkH4BKuyGfL4t2TdkuTHx2tyoiy70Gv4C0fDQSxZg6yRPSb+aLf5WM7x75SeqdOzh1iXZ9dLK6nRmy8EygyuPmVsmz1VZHtihFksTKtnACzBHT79CHSvpk8ke61zePzBrf6uZeIUA7jabbMYIuwqYslpoPtkTOBjP5mELvjKOPakok/vWo5P/8b7X9pp6cMpd0hRvkPqQvnMy/G+U4PRIUU2iV4+TvnIHkqEb+WfBBiuA8uqjfqpHTY8oB9YCjBAoA6I8n5V6dEjGpmIAagH8IBFddeVeckJOvPEvBdqOrRcyjikihxW84j8vNOafsV83A

Hi all,

while porting our development to Coq 8.6, we stumbled upon a backwards
incompatibility with respect to typeclass resolution and Extern hints.
In previous Coq versions, if applying a typeclass instance created goals
that are not typeclasses, Extern hints would still be executed:

Class Foo (x : nat).

Instance foo x : x = 2 -> Foo x.
Hint Extern 0 (_ = _) => reflexivity : typeclass_instances.

Typeclasses eauto := debug.
Check (_ : Foo 2).
(*
Debug: 1.1: apply foo on (Foo 2)
Debug: 1.1.1.1: (*external*) reflexivity on (2 = 2)

foo 2 eq_refl : Foo 2
: Foo 2
*)

That was with Coq 8.5. However, with 8.6, resolution fails:

(*
Debug: 1: looking for (Foo 2) without backtracking
Debug: 1: no match for (Foo 2) , 1 possibilities

?f : Foo 2
: Foo 2
where
?f : [ |- Foo 2]
*)

Was this a deliberate change of behavior? If yes, what is the rationale?
I don't find this mentioned in the CHANGELOG.

For now, we found a work-around (make the Extern Hint apply to the shape
of the goal *before* the instance is applied). However, this is harder
to maintain because we essentially have to both write the instance, and
then write a Hint Extern matching whenever the instance matches,
applying the instance manually, and then solving the arriving goals with
tactics.

Kind regards,
Ralf



Archive powered by MHonArc 2.6.18.

Top of Page