module Implicit.Annotatability.Corollaries where

open import Implicit.Language.All
open import Implicit.Decl.Typing
open import Implicit.Annotatability.DeclPartial renaming (_⊢_#_⦂_ to _⊢p_#_⦂_)
open import Implicit.Annotatability.IF
open import Implicit.Annotatability.Elaboration


par-complete : Γ ⊢p j # e  A
              Γ ⊢d j # e  A
par-complete (⊢lit regΓ) = ⊢lit regΓ
par-complete (⊢var regΓ x∈Γ) = ⊢var regΓ x∈Γ
par-complete (⊢ann ⊢e) = ⊢ann (par-complete ⊢e)
par-complete (⊢lam₁ ⊢e) = ⊢lam₁ (par-complete ⊢e)
par-complete (⊢lam₂ ⊢e) = ⊢lam₂ (par-complete ⊢e)
par-complete (⊢app ⊢e ⊢e₁) = ⊢app (par-complete ⊢e) (par-complete ⊢e₁)
par-complete (⊢sub ⊢e B≤A gc j≢Z) = ⊢sub (par-complete ⊢e) B≤A gc j≢Z
par-complete (⊢tabs ⊢e) = ⊢tabs (par-complete ⊢e)

annotatability-real : Γ  e  A  e'
                     Γ ⊢d `□ # e'  A
annotatability-real ⊢e with annotatability ⊢e
... | bd = par-complete bd


annotatability-real' : Γ  e  A  e'
                      Γ ⊢d `■ # (e'  A)  A
annotatability-real' ⊢e = ⊢ann (annotatability-real ⊢e)