30 lines
770 B
Text
30 lines
770 B
Text
|
import standard
|
||
|
|
||
|
namespace setoid
|
||
|
inductive setoid : Type :=
|
||
|
| mk_setoid: Π (A : Type), (A → A → Bool) → setoid
|
||
|
|
||
|
definition carrier (s : setoid)
|
||
|
:= setoid_rec (λ a eq, a) s
|
||
|
|
||
|
definition eqv {s : setoid} : carrier s → carrier s → Bool
|
||
|
:= setoid_rec (λ a eqv, eqv) s
|
||
|
|
||
|
infix `≈`:50 := eqv
|
||
|
|
||
|
coercion carrier
|
||
|
|
||
|
inductive morphism (s1 s2 : setoid) : Type :=
|
||
|
| mk_morphism : Π (f : s1 → s2), (∀ x y, x ≈ y → f x ≈ f y) → morphism s1 s2
|
||
|
|
||
|
set_option pp.universes true
|
||
|
|
||
|
check mk_morphism
|
||
|
check λ (s1 s2 : setoid), s1
|
||
|
check λ (s1 s2 : Type), s1
|
||
|
|
||
|
inductive morphism2 (s1 : setoid) (s2 : setoid) : Type :=
|
||
|
| mk_morphism2 : Π (f : s1 → s2), (∀ x y, x ≈ y → f x ≈ f y) → morphism2 s1 s2
|
||
|
|
||
|
check mk_morphism2
|
||
|
end
|