{-# OPTIONS --allow-unsolved-metas #-}
module euclidean where
open import Agda.Primitive renaming(Set to Type)
symmetric : (X : Type) → (X → X → Type) → Type
symmetric X R = (a b : X) → R a b → R b a
reflexive : (X : Type) → (X → X → Type) → Type
reflexive X R = (x : X) → R x x
transitive : (X : Type) → (X → X → Type) → Type
transitive X R = (a b c : X) → R a b → R b c → R a c
euclidean : (X : Type) → (X → X → Type) → Type
euclidean X R = (a b c : X) → R a b → R a c → R b c
theorem1 : (A : Type) → (Eq : A → A → Type) → euclidean A Eq → reflexive A Eq → symmetric A Eq
theorem1 A Eq eucl refl a b Eab = {!!}
data Nat : Type where
zero : Nat
succ : Nat → Nat
one = succ zero
two = succ one
three = succ two
four = succ three
add : Nat → Nat → Nat
add x zero = x
add x (succ y) = succ (add x y)
theorem2 : (A : Type) → (Eq : A → A → Type) → euclidean A Eq → reflexive A Eq → transitive A Eq
theorem2 A Eq eucl refl a b c Eab Ebc = {!!}
data CA : Type where
Ca Cb : CA
data ⊥ : Type where
data ⊤ : Type where
tt : ⊤
CEq : CA → CA → Type
CEq Ca Ca = ⊥
CEq Ca Cb = ⊤
CEq Cb Ca = ⊥
CEq Cb Cb = ⊤
remark1 : euclidean CA CEq
remark1 Ca Ca c () CEac
remark1 Ca Cb Ca CEab ()
remark1 Ca Cb Cb CEab CEac = tt
remark1 Cb Ca Ca () CEac
remark1 Cb Ca Cb () CEac
remark1 Cb Cb Ca CEab ()
remark1 Cb Cb Cb CEab CEac = tt