variable {A : Type}

structure has_refl (R : A → A → Prop) : Prop :=
(refl : ∀ a, R a a)

structure is_equiv (R : A → A → Prop) extends has_refl R : Prop :=
(symm : ∀ a b, R a b → R b a)
(trans : ∀ a b c, R a b → R b c → R a c)

#check @is_equiv.refl
#check @is_equiv.symm
#check @is_equiv.trans
#check @is_equiv.to_has_refl
