(def-constant quotient
"lambda(rel:[ind_1,ind_1 -> prop], lambda(x:ind_1, indic{z:ind_1, rel(x,z)}))"
(theory generic-theory-1))
(def-theorem quotient-map-for-equivalence-relations
"forall(rel:[ind_1,ind_1 -> prop],
equiv%predicate(rel)
implies
forall(x,y:ind_1, rel(x,y) iff quotient(rel)(x)=quotient(rel)(y)))"
(usages transportable-macete)
reverse
(theory generic-theory-1)
(proof
(
(apply-macete-with-minor-premises characterization-of-equivalence-predicates)
unfold-defined-constants
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0 0 0)")
extensionality
simplify
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0)")
simplify
(backchain "with(p:prop,forall(a,b:ind_1,p));")
(backchain "with(p:prop,forall(a,b,c:ind_1,p));")
(instantiate-existential ("x"))
(backchain "with(p:prop,forall(a,b:ind_1,p));"))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 1)")
(contrapose "with(p:prop,not(p));")
(backchain "with(p:prop,forall(a,b:ind_1,p));")
(backchain "with(p:prop,forall(a,b,c:ind_1,p));")
(instantiate-existential ("y"))
(backchain "with(p:prop,forall(a,b:ind_1,p));")
(backchain "with(p:prop,forall(a,b:ind_1,p));")))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0 1 0)")
(contrapose "with(f:sets[ind_1],f=f);")
extensionality
simplify
(instantiate-existential ("y"))
simplify)
)))