(def-language relational-language
(base-types uu)
(constants
(equiv "[uu,uu,prop]"0)))
(def-theory relational-theory
(language relational-language)
(component-theories h-o-real-arithmetic)
(axioms
(equiv-transitivity
"forall(a,b,c:uu, a equiv b and b equiv c implies a equiv c)")
(equiv-reflexivity
"forall(a:uu, a equiv a)")
(equiv-symmetry
"forall(a,b:uu, a equiv b implies b equiv a)")))
(def-constant equiv%class
"lambda(x:uu, indic{y:uu, x equiv y})"
(theory relational-theory))
(def-constant equiv%class_q
"lambda(a:sets[uu], forsome(y:uu, a=equiv%class(y)))"
(theory relational-theory))
(def-theorem ()
"forsome(a:sets[uu], equiv%class_q(a))"
(theory relational-theory)
(proof
(
(instantiate-existential ("with(x:uu,equiv%class(x))"))
unfold-defined-constants
unfold-defined-constants
(instantiate-existential ("x"))
unfold-defined-constants
)))
(def-atomic-sort uu_q
"equiv%class_q"
(theory relational-theory))
(def-theory-ensemble relational-theory)
(def-theory-ensemble-multiple relational-theory 2)
(def-theory-ensemble-overloadings metric-spaces (1))
(def-overloading equiv
(relational-theory equiv)
(relational-theory-2-tuples equiv_0)
(relational-theory-2-tuples equiv_1))
(def-constant equiv%on%classes%unary
"lambda(f:[uu_0,uu_1], forall(a,b:uu_0, a equiv b implies f(a) equiv f(b)))"
(theory relational-theory-2-tuples))