[coq] Add example of HB mathcomp eqtype

This commit is contained in:
Julin S 2024-04-06 12:49:57 +05:30
parent f48d2fec9f
commit 26c7c5974b
1 changed files with 51 additions and 0 deletions

51
coq/third-party/hb-eqtype.v vendored Normal file
View File

@ -0,0 +1,51 @@
From HB Require Import structures.
From mathcomp Require Import all_ssreflect.
Inductive t: Type :=
| Zero: t
| One: t
| Add: t -> t -> t.
Fixpoint eqb (a b: t): bool :=
match a, b with
| Zero, Zero => true
| One, One => true
| Add x1 y1, Add x2 y2 => eqb x1 x2 && eqb y1 y2
| _, _ => false
end.
Section EqLemmas.
Lemma lm_eqb1 (a: t): a = a -> eqb a a.
Proof.
elim: a => //= a IHa b IHb H.
by rewrite IHa // IHb.
Qed.
Lemma lm_eqb2r (a b: t): a = b -> eqb a b.
Proof.
move <-.
by apply: lm_eqb1.
Qed.
Lemma lm_eqb2l (a b: t): eqb a b -> a = b.
Proof.
elim: a b => [||a IHa b IHb]; case => // x y /andP [H1 H2].
by rewrite (IHa x H1) (IHb y H2).
Qed.
Theorem eqP (a b: t): reflect (a=b) (eqb a b).
Proof.
apply (iffP idP).
- apply: lm_eqb2l.
- apply: lm_eqb2r.
Qed.
End EqLemmas.
HB.instance Definition _ := hasDecEq.Build t eqP.
HB.about t.
(*
HB: t is canonically equipped with structures:
- eqtype.Equality
(from "(stdin)", line 2)
*)