# Binary reflecting maps of equivalence relations ```agda module foundation.binary-reflecting-maps-equivalence-relations where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.equality-dependent-function-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopy-induction open import foundation.subtype-identity-principle open import foundation.universe-levels open import foundation-core.equivalence-relations open import foundation-core.equivalences open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.propositions open import foundation-core.sets open import foundation-core.torsorial-type-families ``` </details> ## Idea Consider two types `A` and `B` equipped with equivalence relations `R` and `S`. A binary reflecting map from `A` to `B` to `X` is a binary map `f : A → B → X` such that for any to `R`-related elements `x` and `x'` in `A` and any two `S`-related elements `y` and `y'` in `B` we have `f x y = f x' y'` in `X`. ```agda module _ {l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} (R : equivalence-relation l3 A) (S : equivalence-relation l4 B) where binary-reflects-equivalence-relation : {X : UU l5} (f : A → B → X) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5) binary-reflects-equivalence-relation f = {x x' : A} {y y' : B} → sim-equivalence-relation R x x' → sim-equivalence-relation S y y' → f x y = f x' y' binary-reflecting-map-equivalence-relation : (X : UU l5) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5) binary-reflecting-map-equivalence-relation X = Σ (A → B → X) binary-reflects-equivalence-relation map-binary-reflecting-map-equivalence-relation : {X : UU l5} → binary-reflecting-map-equivalence-relation X → A → B → X map-binary-reflecting-map-equivalence-relation = pr1 reflects-binary-reflecting-map-equivalence-relation : {X : UU l5} (f : binary-reflecting-map-equivalence-relation X) → binary-reflects-equivalence-relation ( map-binary-reflecting-map-equivalence-relation f) reflects-binary-reflecting-map-equivalence-relation = pr2 is-prop-binary-reflects-equivalence-relation : (X : Set l5) (f : A → B → type-Set X) → is-prop (binary-reflects-equivalence-relation f) is-prop-binary-reflects-equivalence-relation X f = is-prop-implicit-Π ( λ x → is-prop-implicit-Π ( λ x' → is-prop-implicit-Π ( λ y → is-prop-implicit-Π ( λ y' → is-prop-function-type ( is-prop-function-type ( is-set-type-Set X (f x y) (f x' y'))))))) binary-reflects-prop-equivalence-relation : (X : Set l5) (f : A → B → type-Set X) → Prop (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ l5) pr1 (binary-reflects-prop-equivalence-relation X f) = binary-reflects-equivalence-relation f pr2 (binary-reflects-prop-equivalence-relation X f) = is-prop-binary-reflects-equivalence-relation X f ``` ### Characterizing the identity type of binary reflecting maps into sets ```agda module _ {l1 l2 l3 l4 l5 : Level} {A : UU l1} (R : equivalence-relation l2 A) {B : UU l3} (S : equivalence-relation l4 B) (C : Set l5) (f : binary-reflecting-map-equivalence-relation R S (type-Set C)) where htpy-binary-reflecting-map-equivalence-relation : (g : binary-reflecting-map-equivalence-relation R S (type-Set C)) → UU (l1 ⊔ l3 ⊔ l5) htpy-binary-reflecting-map-equivalence-relation g = (x : A) (y : B) → map-binary-reflecting-map-equivalence-relation R S f x y = map-binary-reflecting-map-equivalence-relation R S g x y refl-htpy-binary-reflecting-map-equivalence-relation : htpy-binary-reflecting-map-equivalence-relation f refl-htpy-binary-reflecting-map-equivalence-relation x y = refl htpy-eq-binary-reflecting-map-equivalence-relation : (g : binary-reflecting-map-equivalence-relation R S (type-Set C)) → (f = g) → htpy-binary-reflecting-map-equivalence-relation g htpy-eq-binary-reflecting-map-equivalence-relation .f refl = refl-htpy-binary-reflecting-map-equivalence-relation is-torsorial-htpy-binary-reflecting-map-equivalence-relation : is-torsorial (htpy-binary-reflecting-map-equivalence-relation) is-torsorial-htpy-binary-reflecting-map-equivalence-relation = is-torsorial-Eq-subtype ( is-torsorial-Eq-Π ( λ x → is-torsorial-htpy ( map-binary-reflecting-map-equivalence-relation R S f x))) ( is-prop-binary-reflects-equivalence-relation R S C) ( map-binary-reflecting-map-equivalence-relation R S f) ( λ x → refl-htpy) ( reflects-binary-reflecting-map-equivalence-relation R S f) is-equiv-htpy-eq-binary-reflecting-map-equivalence-relation : (g : binary-reflecting-map-equivalence-relation R S (type-Set C)) → is-equiv (htpy-eq-binary-reflecting-map-equivalence-relation g) is-equiv-htpy-eq-binary-reflecting-map-equivalence-relation = fundamental-theorem-id is-torsorial-htpy-binary-reflecting-map-equivalence-relation htpy-eq-binary-reflecting-map-equivalence-relation extensionality-binary-reflecting-map-equivalence-relation : (g : binary-reflecting-map-equivalence-relation R S (type-Set C)) → (f = g) ≃ htpy-binary-reflecting-map-equivalence-relation g pr1 (extensionality-binary-reflecting-map-equivalence-relation g) = htpy-eq-binary-reflecting-map-equivalence-relation g pr2 (extensionality-binary-reflecting-map-equivalence-relation g) = is-equiv-htpy-eq-binary-reflecting-map-equivalence-relation g eq-htpy-binary-reflecting-map-equivalence-relation : (g : binary-reflecting-map-equivalence-relation R S (type-Set C)) → htpy-binary-reflecting-map-equivalence-relation g → (f = g) eq-htpy-binary-reflecting-map-equivalence-relation g = map-inv-equiv (extensionality-binary-reflecting-map-equivalence-relation g) ```