{-# OPTIONS --without-K --exact-split --rewriting --overlapping-instances #-}

module Pi.Experiments.Equiv.Equiv2 where

open import Pi.Syntax.Pi+.NonIndexed as Pi
open import Pi.UFin.UFin

open import Pi.Common.Extra

open import Pi.Experiments.Equiv.Equiv0
open import Pi.Experiments.Equiv.Equiv1

open import lib.Basics
open import lib.types.Fin
open import lib.types.List
open import lib.types.Truncation
open import lib.NType2
open import lib.types.SetQuotient
open import lib.types.Coproduct

eval₂ : {X Y : U} {p q : X ⟷₁ Y }  p ⟷₂ q  eval₁ p == eval₁ q
eval₂ {p = p} {q = q} α = TODO-

quote₂ : {X Y : UFin} {p q : X == Y} (α : p == q)  quote₁ p ⟷₂ quote₁ q
quote₂ {p = p} {q = q} α = transport  e  quote₁ p ⟷₂ quote₁ e) α id⟷₂

quote-eval₂ : {X Y : U} {p q : X ⟷₁ Y } (α : p ⟷₂ q)  quote₂ (eval₂ α) ⟷₃
    trans⟷₂ (quote-eval₁ p) (trans⟷₂ (id⟷₂  (α  id⟷₂)) (!⟷₂ (quote-eval₁ q)))
quote-eval₂ {p = p} {q = q} α = trunc (quote₂ (eval₂ α)) (trans⟷₂ (quote-eval₁ p) (trans⟷₂ (id⟷₂  (α  id⟷₂)) (!⟷₂ (quote-eval₁ q))))

eval-quote₂ : {X Y : UFin} {p q : X == Y} (α : p == q)  eval₂ (quote₂ α) == ap  e  eval₁ (quote₁ e)) α
eval-quote₂ α = prop-has-all-paths _ _