Skip to Content.
Sympa Menu

ssreflect - Re: [ssreflect] eqType for records ?

Subject: Ssreflect Users Discussion List

List archive

Re: [ssreflect] eqType for records ?


Chronological Thread 
  • From: Emilio Jesús Gallego Arias <>
  • To: Christian Doczkal <>
  • Cc:
  • Subject: Re: [ssreflect] eqType for records ?
  • Date: Tue, 19 Jun 2018 12:45:25 -0400
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
  • Ironport-phdr: 9a23:7GtYthYqUL565KxXezuBw0b/LSx+4OfEezUN459isYplN5qZoMq7bnLW6fgltlLVR4KTs6sC17KL9fi4EUU7or+5+EgYd5JNUxJXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCa9bL9oMBm6sRjau9ULj4dlNqs/0AbCrGFSe+RRy2NoJFaTkAj568yt4pNt8Dletuw4+cJYXqr0Y6o3TbpDDDQ7KG81/9HktQPCTQSU+HQRVHgdnwdSDAjE6BH6WYrxsjf/u+Fg1iSWIdH6QLYpUjm58axlVAHnhzsGNz4h8WHYlMpwjL5AoBm8oxBz2pPYbJ2JOPZ7eK7WYNEUSndbXstJVyJPHJ6yb4wBD+QPP+lWrIfyqFQSohalGQmgGPnixiNUinLs36A31fkqHwHc3AwnGtIDqHvarND0NKcWUOC1y7HHwzHdYPNNwy/985DHfBE7rvGIWbJ/b8XRyU43GA7ZlFWQqJbqPyiI3ekKrWeW9OVhWOGzh2I9rAFxuDevy94qh4LUhYwV0kjJ+Th6zYs2P9G0VlB3bN++HJdNtSyWKpF6Tt4sTm12oCo3yqEKtYSlcCQW1Zgr3RDSZv6df4WM7R/uUvuaLy1ii3J/Yr2/gg6/8Ui+xe34Ucm5yFlLoylZntXWsXANzRPT5tCGSvt74EihxS6C2x3Q5+xHO0w4i7TXJp87zrItlJcfrF7PEjL4lUnolKOWc18r+ums6+TpeLXmoZqcOpdqhQzlPaUjmdCzDf4/MggUUGiX4f6826H7/U3lXLVKieU7krLCsJDAO8sbqKq5DBFJ3YY/8Bu/FDen0NEAnXYdNl5FeRSHj5LoO17UOvz4A+2/0ByQl2JAx+rHJaHgC5OFAn/IgrToef4p4E5GyREvzNlZoZ5TAaMCKfbbV0nq8djJCRl/PRbikMj9D9Ao+4YfXWOINY2UKzHJhnCB4uYiLO67TZUUsS21f/UN9662y3gjlglOLuGSwZILZSXgTbxdKEKDbC+p249ZSDZYjk8FVOXvzWa6f3tWbne2Ubg742BpGNL+S4DZSdL02eDT7GKABpRTI1t+JBWUC365JZXUA7ELci3AepY8wAxBbqCoTsoa7T/rtAL+zOs1PrqMvCoCusC62Q==
  • Organization: X80 Heavy Industries

Christian Doczkal
<>
writes:

> Section Rec2EQ.
> Variables (A : eqType) (B : A -> eqType).
> Record T := mkT { fst : A ; snd : B fst}.
>
> Definition rec2_eq (x y : T) :=
> let: (mkT x1 x2,mkT y1 y2) := (x,y) in Tagged B x2 == Tagged B y2.
>
> Lemma rec2_eqP : Equality.axiom rec2_eq.
> Proof.
> move => [x1 x2] [y1 y2]. apply: (iffP idP); rewrite /rec2_eq.
> - rewrite -tag_eqE /tag_eq /= => /andP [/eqP ?]. subst x1.
> by rewrite tagged_asE => /eqP->.
> - case => ? H ; subst y1. by rewrite /Tagged H.
> Qed.
>
> Canonical T_eqType := EqType T (EqMixin rec2_eqP).
> End Rec2EQ.

Also note that I think that using the subtype interface is preferable in
this case, so you can inherit all the interfaces that record members
possess:

8<----------------------------------------------------------------------8<
From mathcomp Require Import all_ssreflect.

Section Rec2Sub.

Variables (A : Type) (B : A -> Type).
Record T := mkT { fst : A ; snd : B fst}.

Definition of_T f : { fst : A & B fst } := existT _ f.(fst) f.(snd).
Definition to_T '(existT fst snd) := {| fst := fst; snd := snd |}.

Definition T_sub : @subType { fst : A & B fst} xpredT.
apply: (@NewType _ _ of_T to_T); last by case.
by move=> P K [fst snd]; have := K (existT _ fst snd).
Defined.

Canonical T_subType := Eval hnf in T_sub.
End Rec2Sub.

Section Rec2EqType.
Variables (A : eqType) (B : A -> eqType).
Canonical T_eqType := Eval hnf in EqType _ [eqMixin of (@T A B) by <: ].
End Rec2EqType.

Section Rec2ChoiceType.
Variables (A : choiceType) (B : A -> choiceType).
Canonical T_choiceType := Eval hnf in ChoiceType _ [choiceMixin of (@T A B)
by <: ].
End Rec2ChoiceType.
8<----------------------------------------------------------------------8<

E.



Archive powered by MHonArc 2.6.18.

Top of Page