Require Export Undecidability.Synthetic.Definitions Lia.
Definition discrete X := decidable (fun '(x,y) => x = y :> X).
(* Facts on reflects *)
(* Type-theoretic characterisations *)
(* Closure properties of decidability *)
(* Proper lemmas *)
Instance Proper_decides {X} :
Proper (pointwise_relation X (@eq bool) ==> pointwise_relation X iff ==> iff ) (@decider X).
Instance Proper_decidable {X} :
Proper (pointwise_relation X iff ==> iff) (@decidable X).
(* Closure properties of discreteness *)

Lemma discrete_prod X Y : discrete X -> discrete Y -> discrete (X * Y).