{-# OPTIONS --without-K --safe #-}

module NonCumulative.Statics.Ascribed.Simpl where

open import Lib

open import NonCumulative.Statics.Ascribed.Full
open import NonCumulative.Statics.Ascribed.Refl
open import NonCumulative.Statics.Ascribed.Presup
open import NonCumulative.Statics.Ascribed.CtxEquiv
open import NonCumulative.Statics.Ascribed.Inversion
open import NonCumulative.Statics.Ascribed.Misc

∷-cong-simp :  {i} 
               Γ  Δ 
              Γ  T  T′ ∶[ 1 + i ] Se i 
              ----------------
               (T  i)  Γ  (T′  i)  Δ
∷-cong-simp Γ≈Δ T≈T′
  with presup-≈ T≈T′
...  | _ , ⊢T , ⊢T′ , _ = ∷-cong Γ≈Δ ⊢T (ctxeq-tm Γ≈Δ ⊢T′) T≈T′ (ctxeq-≈ Γ≈Δ T≈T′)

Π-cong-simp :  {i j k} 
              Γ  S  S′ ∶[ 1 + i ] Se i 
              (S  i)  Γ  T  T′ ∶[ 1 + j ] Se j 
              k  max i j 
              ------------------------------------------
              Γ  Π (S  i) (T  j)  Π (S′  i) (T′  j) ∶[ 1 + k ] Se k
Π-cong-simp S≈S′ T≈T′ k≡maxij
  with _ , ⊢S , _presup-≈ S≈S′ = Π-cong ⊢S S≈S′ T≈T′ k≡maxij

rec-cong-simp :  {i} 
                N₀  Γ  T  T′ ∶[ 1 + i ] Se i 
                Γ  s  s′ ∶[ i ] T [| ze  N₀ ] 
                (T  i)  N₀  Γ  r  r′ ∶[ i ] T [ (wk  wk) , su (v 1)  N₀ ] 
                Γ  t  t′ ∶[ 0 ] N 
                --------------------------------------------
                Γ  rec (T  i) s r t  rec (T′  i) s′ r′ t′ ∶[ i ] T [| t  N₀ ]
rec-cong-simp  T≈T′ s≈s′ r≈r′ t≈t′
  with _ , ⊢T , _ , _presup-≈ T≈T′ = rec-cong ⊢T T≈T′ s≈s′ r≈r′ t≈t′

Λ-cong-simp :  {i j k} 
              Γ  S  S′ ∶[ 1 + i ] Se i 
              (S  i)  Γ  t  t′ ∶[ j ] T 
              k  max i j 
              --------------------------------
              Γ  Λ (S  i) t  Λ (S′  i) t′ ∶[ k ] Π (S  i) (T  j)
Λ-cong-simp S≈S′ t≈t′ k≡maxij
  with _ , ⊢S , _presup-≈ S≈S′ = Λ-cong ⊢S S≈S′ t≈t′ k≡maxij

[]-cong-Se-simp :  {i}  Δ  T  T′ ∶[ 1 + i ] Se i  Γ ⊢s σ  σ′  Δ  Γ  T [ σ ]  T′ [ σ′ ] ∶[ 1 + i ] Se i
[]-cong-Se-simp T≈T′ σ≈σ′
  with _ , ⊢σ , _presup-s-≈ σ≈σ′ 
  = []-cong-Se T≈T′ ⊢σ σ≈σ′

[]-cong-Se-simp′ :  {i}  Δ  T ∶[ 1 + i ] Se i  Γ ⊢s σ  σ′  Δ  Γ  T [ σ ]  T [ σ′ ] ∶[ 1 + i ] Se i
[]-cong-Se-simp′ ⊢T σ≈σ′ = []-cong-Se-simp (≈-refl ⊢T) σ≈σ′

,-cong-simp :  {i} 
              Γ ⊢s σ  σ′  Δ 
              Δ  T  T′ ∶[ 1 + i ] Se i 
              Γ  t  t′ ∶[ i ] T [ σ ] 
              -----------------------------
              Γ ⊢s σ , t  T  i  σ′ , t′  T′  i  (T  i)  Δ
,-cong-simp σ≈σ′ T≈T′ t≈t′
  with _ , ⊢T , _presup-≈ T≈T′
  = ,-cong σ≈σ′ ⊢T T≈T′ t≈t′

$-cong-simp :  {i j k} 
              Γ  r  r′ ∶[ k ] Π (S  i) (T  j) 
              Γ  s  s′ ∶[ i ] S 
              k  max i j 
              -------------------------------
              Γ  r $ s  r′ $ s′ ∶[ j ] T [| s  S  i ]
$-cong-simp r≈r′ s≈s′ k≡maxij
  with _ , _ , _ , ⊢ΠSTpresup-≈ r≈r′
  with _ , ⊢S , ⊢TΠ-inv ⊢ΠST
  = $-cong ⊢S ⊢T r≈r′ s≈s′ k≡maxij