{-# OPTIONS --without-K --exact-split --rewriting #-}
module Pi.Equiv.Equiv0Hat where
open import Pi.Syntax.Pi+.Indexed as Pi
open import Pi.Syntax.Pi^ as Pi^
open import Pi.UFin.UFin
open import Pi.Common.Extra
open import lib.Basics
open import lib.types.Fin
open import lib.types.List hiding (_++_)
open import lib.types.Truncation
open import lib.NType2
open import lib.types.SetQuotient
open import lib.types.Coproduct
open import lib.types.Nat as N renaming (_+_ to _++_)
private
variable
n m o p : ℕ
quote^₀ : (n : ℕ) → U n
quote^₀ O = O
quote^₀ (S n) = I U.+ quote^₀ n
quote^₀++ : (n m : ℕ) → quote^₀ (n ++ m) ⟷₁ quote^₀ n U.+ quote^₀ m
quote^₀++ O m = uniti₊l
quote^₀++ (S n) m = (id⟷₁ ⊕ quote^₀++ n m) ◎ assocl₊
eval^₀ : U n → ℕ
eval^₀ {n} t = n
quote-eval^₀ : (t : U n) → quote^₀ (eval^₀ t) ⟷₁ t
quote-eval^₀ O = id⟷₁
quote-eval^₀ I = unite₊r
quote-eval^₀ (t₁ U.+ t₂) = quote^₀++ (eval^₀ t₁) (eval^₀ t₂) ◎ (quote-eval^₀ t₁ ⊕ quote-eval^₀ t₂)
eval-quote^==₀ : (n : ℕ) → eval^₀ (quote^₀ n) == n
eval-quote^==₀ n = idp
eval-quote^₀ : (n : ℕ) → eval^₀ (quote^₀ n) ⟷₁^ n
eval-quote^₀ n = id⟷₁^