{-# OPTIONS --postfix-projections --prop --rewriting #-}
module Cong-Quotient where
open import Agda.Primitive
open import Lib
open import Quotient
open import Fam as _
open import Id
open import Pi
open import Cong
module _ {ic' jc' ic jc} (C : Fam {ic} {jc}) (C~ : Cong-Fam {ic'} {jc'} C) where
private
module C = Fam C
module C~ = Cong-Fam C~
Tyq : Set ic
Tyq = C.Ty // C~.Ty~
quot-Ty : C.Ty → Tyq
quot-Ty = //-in _ _
quot-Ty-≡-out : ∀ {A B} → quot-Ty A ≡ quot-Ty B → C~.Ty~ A B
quot-Ty-≡-out = //-≡-out _ _ C~.EqRel-Ty~
Tmq0 : Tyq → Set (ic ⊔ jc)
Tmq0 A = Σ C.Ty λ B → (quot-Ty B ≡ A) × C.Tm B
Tmq1 : ∀ {A} → Tmq0 A → Tmq0 A → Prop jc'
Tmq1 (B₁ , p₁ , x₁) (B₂ , p₂ , x₂) = C~.Tm~ (quot-Ty-≡-out (p₁ L.∙ L.! p₂)) x₁ x₂
Tmq : Tyq → Set (ic ⊔ jc)
Tmq A = Tmq0 A // Tmq1
Quot-Fam : Fam {_} {_}
Quot-Fam .Fam.Ty = Tyq
Quot-Fam .Fam.Tm = Tmq
quot-Tm : ∀ {A} → C.Tm A → Quot-Fam .Fam.Tm (quot-Ty A)
quot-Tm x = //-in _ _ (_ , refl , x)