Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] How to use a Coercion defined in a Module?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] How to use a Coercion defined in a Module?


Chronological Thread 
  • From: "Kyle Stemen" <ncyms8r3x2 AT snkmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] How to use a Coercion defined in a Module?
  • Date: Fri, 14 Jul 2023 23:50:50 -0700
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=ncyms8r3x2 AT snkmail.com; spf=Pass smtp.mailfrom=ncyms8r3x2 AT snkmail.com; spf=None smtp.helo=postmaster AT sneak2.sneakemail.com
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:wEEUZ6Pj9k9tVsBcTsijsMiBIKoaSvp037BL7TEUdfUxSKalfq +V/MjzuSWUtN9VYh8dcLO7VJVoI0mslqKdiLN5VdzOYOClggSVxepZnOnfKlPbakjDH5ZmpM BdT5Q=
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 64b241d9_nenpsU6lP8rJM0zsOPMIEvLBk/p/W59E6M9qncwbox6iX4e ERbeeisVOaiYqsuX1L4tZN3kNV3thIuKbNz8wpg==

I'm not sure what the proper fix is, but the problem is that the coercion isn't getting used, because ModTypeImpl.S is only equal to nat after unfolding.

On Fri, Jul 14, 2023 at 11:09 PM Chris Dams chris.dams.nl-at-gmail.com |coq-club/Example Allow| <k3xf67o2kbvxpwt AT sneakemail.com> wrote:
Dear All,

I am trying to define a Coercion inside a Module. When trying to use
this Coercion outside the Module, it seems to be running into trouble.
See example below. Is it possible to define a Coercion inside a module
that accepts something from the Module Type and use it outside the
Module?

Kind Regards,
Chris


Module Type ModType.
   Axiom S: Set.
   Axiom T: Set.
End ModType.

Module Mod (M: ModType).
   Export M.
   Axiom f: S -> T.
   Coercion f: S >-> T.
End Mod.

Module ModTypeImpl <: ModType.
   Definition S: Set := nat.
   Definition T: Set := bool.
End ModTypeImpl.

Module ModImpl := Mod ModTypeImpl.
Import ModImpl.

(* Error: The term "1" has type "nat" while it is expected to have
type "bool". *)
(* Check negb 1. *)

(* Error: The term "1" has type "nat" while it is expected to have
type "bool". *)
Fail Check negb 1.

(* Casting works *)
Check (negb: ModTypeImpl.T -> bool) (1 : ModTypeImpl.S).

(* Declaring more coercions fixes it. *)
Definition unfold_S (n: nat) : ModTypeImpl.S := n.
Coercion unfold_S: nat >-> ModTypeImpl.S.
Definition fold_T (b : ModTypeImpl.T) : bool := b.
Coercion fold_T: ModTypeImpl.T >-> bool.

Check negb 1.
 

Definition ff: nat -> bool := f.
Coercion ff: nat >-> bool.

(* No error: apparently it was made to work with the coercion ff,
which is defined
   to be f. But f was also made a coercion above in Mod. *)
Check negb 1.



Archive powered by MHonArc 2.6.19+.

Top of Page