Library Equations.HSetInstances
From Equations Require Import Init DepElim HSets.
Set Universe Polymorphism.
Instance eqdec_hset (A : Type) `(EqDec A) : HSet A.
Proof.
red. red. apply eq_proofs_unicity.
Defined.
Standard instances.
Instance unit_eqdec : EqDec unit.
Proof. eqdec_proof. Defined.
Instance bool_eqdec : EqDec bool.
Proof. eqdec_proof. Defined.
Instance nat_eqdec : EqDec nat.
Proof. eqdec_proof. Defined.
Instance prod_eqdec {A B} `(EqDec A) `(EqDec B) : EqDec (prod A B).
Proof. eqdec_proof. Defined.
Instance sum_eqdec {A B} `(EqDec A) `(EqDec B) : EqDec (A + B).
Proof. eqdec_proof. Defined.
Instance list_eqdec {A} `(EqDec A) : EqDec (list A).
Proof. eqdec_proof. Defined.
Any signature made up entirely of decidable types is decidable.
Polymorphic Definition eqdec_sig_Id@{i} {A : Type@{i}} {B : A -> Type@{i}}
`(HSets.EqDec A) `(forall a, HSets.EqDec (B a)) :
HSets.EqDec@{i} (sigma A B).
Proof.
Set Printing Universes.
intros. intros [xa xb] [ya yb].
case (HSets.eq_dec xa ya). intros Hxya. destruct Hxya. case (HSets.eq_dec xb yb).
+ intros He; destruct He. left. reflexivity.
+ intros. right. apply Id_simplification_sigma2@{i i}. apply e.
+ intros. right. apply Id_simplification_sigma1@{i i}.
intros He _; revert He. apply e.
Defined.
Existing Instance eqdec_sig_Id.