module Implicit.Decl2Interm.Corollaries where
open import Implicit.Language.All
import Implicit.Decl.All as D
open import Implicit.Decl.All
open import Implicit.Interm.All
open import Implicit.Decl2Interm.Main
complete+' : Γ ⊢d j # A% ≤ B
→ Γ ≫ A ⇘ A%
→ Γ ⊢ j # A ⌞ ≤⁺ ⌝ B
complete+' s grd = complete+ (⊢d→⊢d² s) grd
complete+0' : Γ ⋈ ⊢d j # A ≤ B
→ Γ ⋈ ⊢r A
→ Γ ⋈ ⊢r B
→ Γ ⋈ ⊢ j # A ⌞ ≤⁺ ⌝ B
complete+0' s regA regB = complete+' s (⊢r-≫-eq regA)
complete-' : Γ ⊢d `□ # A ≤ B%
→ Γ ≫ B ⇘ B%
→ Γ ⊢ `□ # A ⌞ ≤⁻ ⌝ B
complete-' s grd = complete- (⊢d→⊢d² s) grd
⊢complete : Γ ⊢d j # e ⦂ A
→ Γ ⊢ j # e ⦂ A
⊢complete (⊢lit regΓ) = ⊢lit regΓ
⊢complete (⊢var regΓ x∈Γ) = ⊢var regΓ x∈Γ
⊢complete (⊢ann ⊢e) = ⊢ann (⊢complete ⊢e)
⊢complete (⊢lam₁ ⊢e) = ⊢lam₁ (⊢complete ⊢e)
⊢complete (⊢lam₂ ⊢e) = ⊢lam₂ (⊢complete ⊢e)
⊢complete (⊢app ⊢e ⊢e₁) = ⊢app (⊢complete ⊢e) (⊢complete ⊢e₁)
⊢complete (⊢sub ⊢e B≤A gc j≢Z) = ⊢sub (⊢complete ⊢e) (complete+ (⊢d→⊢d² B≤A) (⊢r-≫-eq (⊢r-𝕣 (D.t-⊢r ⊢e)))) gc j≢Z
⊢complete (⊢tabs ⊢e) = ⊢tabs (⊢complete ⊢e)
⊢complete (⊢tapp ⊢e st regA s) = ⊢tapp (⊢complete ⊢e) st regA (complete+ (⊢d→⊢d² s) (⊢r-≫-eq (⊢r-𝕣 (st0-⊢r (D.t-⊢r ⊢e) st regA))))