Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Typeclasses & Modules

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Typeclasses & Modules


Chronological Thread 
  • From: Clément Pit-Claudel <cpitclaudel AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Typeclasses & Modules
  • Date: Tue, 19 Nov 2019 08:27:45 -0500
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=cpitclaudel AT gmail.com; spf=Pass smtp.mailfrom=cpitclaudel AT gmail.com; spf=None smtp.helo=postmaster AT mail-qv1-f44.google.com
  • Ironport-phdr: 9a23:T2NcuxG1cN4icdyADVxuzJ1GYnF86YWxBRYc798ds5kLTJ7zps+wAkXT6L1XgUPTWs2DsrQY0rGQ6vywEjFYqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba58IRmssAncucobjYRiJ6ot1xDEvmZGd+NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG4p6sLrswLDTRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Uims4qt3VBPljjoMOjgk+2/Vl8NwlrpWrg+/qRxxw4DaY4+bO/RxcazfYdwUSnFMXtpTWiFbHo+wc4UCAugHMO1Fr4f9vVwOrR6mCASyAOPo0DpIiWHw3a0my+svCwDG3BA5E98QtHTbtsj1O7oMXuCx0aLFyinMb+tX2Tfh9IfIdgouoeyRUr1udcrc0kYvFwbfgVWRrYzpJS+a1uMIs2WC6edrSOGhi3Y/pg1vvjSiwt0gh4rJi44P1FzI6CF0zJw6KNC3UEJ3f9+pHIdNuyyfKod7QcwvTmRntSonybAKpZu2cSkLxZs5xRPSbv2KfoyT7R35UeucJSp3iXZrdb+6iRa/8VSvx+P5W8S73ltKoCpIn9/RvX4XzRPT8NKISv5l80ehxzmP0wfT5/lBIU8ulKrbL4ctwqculpYOqEjDECD7lUrsgK+ZcUUk/eeo6+D5bbn8upCcMIp0hhn/MqQohMO/Hfw1PhYSU2Wf4+ix173u8VfnTLlXivA6iKbUvZ/CKcQevKG5AgtV0og56xa4CjeryMgXnWEGLFJZZB2Hi5LmO0zTL//mCfeymFuskDJxyPDHOr3tGInCLn/GkLv5Z7Zy91ZcyBYvzdBY/59bFrYBIOvqVkDtsNzYEwQ2Phevw+fnDdV9zpkRVXiOAq+fKqPSsEWH6vghI+mWN8cpv2P2LOFg7Przh1c4n0UcdO+nx8g5cne9S99iokCUZ2bbutYdVEwOtxcyQeii3FaaUCJYY3+vU684zj4+AYOiS4zEQ9b+0/S6wC6nE8gONSh9AVeWHCKwLtjWa7I3cCuXZ/RZvHkEWLymEdJz0BivsErj1eMiILaIvCIfsp3n2Z5+4OiBzUhupwwxNNyU1iS2d08xhnkBHmZk06V2oEg7wVCGg/Ah0q5oUOdL7vYMaT8UcJvVzuh0Edf3A1uTcdKASVLgSdKjU2g8

On 2019-11-18 21:07, Vadim Zaliva wrote:
> Example below demonstrates the problem I am having. I would like to define
> Module Type which is wrapper around a type and carries over an instance of
> a typeclass for this type.
>
> Then I would like to use it when importing this module.
> The direct approach does not work, as shown below. If there is
> any way to make |Et| visible to typeclass resolution mechanism inside
> |FooProperties|? It is visible in general, not just to typeclass search:
>
> |(* Custom equality relation *) Class Equiv (T: Type) := equiv: T -> T ->
> Prop. (* A module to wrap a type which has `Equiv` instance *) Module Type
> Foo. Parameter Inline t : Type. Context `{Et: Equiv t}. (* 'foo_ok'
> definition works here, as it finds "Et" as an instance of "Equiv t" *)
> Lemma foo_ok: forall (x y: t), equiv x y. Admitted. End Foo. Module
> FooProperties (F: Foo). Import F. (* The following prints: Et : Equiv t *)
> Check Et. (* The following fails with the error: Error: Unable to satisfy
> the following constraints: In environment: x, y : t ?Equiv : "Equiv t" *)
> Lemma foo_error: forall (x y: t), equiv x y. |

Try "Existing Instance Et"?



Archive powered by MHonArc 2.6.18.

Top of Page