module Implicit.Language.Regular.Properties where
open import Implicit.Language.Base
open import Implicit.Language.Shift.All
open import Implicit.Language.Lookup.All
open import Implicit.Language.OpenClose.Base
open import Implicit.Language.Regular.Base
∋∙-𝕣 : 𝕣 Γ ∋∙ X
→ Γ ∋∙ X
∋∙-𝕣 {Γ = Γ , A} (S, inΓ) = S, (∋∙-𝕣 inΓ)
∋∙-𝕣 {Γ = Γ ,^} (S^ inΓ) = S^ (∋∙-𝕣 inΓ)
∋∙-𝕣 {Γ = Γ ,∙} Z = Z
∋∙-𝕣 {Γ = Γ ,∙} (S∙ inΓ) = S∙ (∋∙-𝕣 inΓ)
∋∙-𝕣 {Γ = Γ ,= A} (S= inΓ) = S= (∋∙-𝕣 inΓ)
∋∙-𝕣 {Γ = Γ ⋈} inΓ = S⋈ inΓ
∋∙-𝕣' : Γ ∋∙ X
→ 𝕣 Γ ∋∙ X
∋∙-𝕣' Z = Z
∋∙-𝕣' (S, inΓ) = S, (∋∙-𝕣' inΓ)
∋∙-𝕣' (S∙ inΓ) = S∙ (∋∙-𝕣' inΓ)
∋∙-𝕣' (S= inΓ) = S= (∋∙-𝕣' inΓ)
∋∙-𝕣' (S^ inΓ) = S^ (∋∙-𝕣' inΓ)
∋∙-𝕣' (S⋈ inΓ) = inΓ
⊢r-𝕣 : 𝕣 Γ ⊢r A
→ Γ ⊢r A
⊢r-𝕣 ⊢r-int = ⊢r-int
⊢r-𝕣 (⊢r-var-∙ inΓ) = ⊢r-var-∙ (∋∙-𝕣 inΓ)
⊢r-𝕣 (⊢r-arr regA regA₁) = ⊢r-arr (⊢r-𝕣 regA) (⊢r-𝕣 regA₁)
⊢r-𝕣 (⊢r-∀ regA) = ⊢r-∀ (⊢r-𝕣 regA)
⊢r-𝕣' : Γ ⊢r A
→ 𝕣 Γ ⊢r A
⊢r-𝕣' ⊢r-int = ⊢r-int
⊢r-𝕣' (⊢r-var-∙ inΓ) = ⊢r-var-∙ (∋∙-𝕣' inΓ)
⊢r-𝕣' (⊢r-arr regA regA₁) = ⊢r-arr (⊢r-𝕣' regA) (⊢r-𝕣' regA₁)
⊢r-𝕣' (⊢r-∀ regA) = ⊢r-∀ (⊢r-𝕣' regA)
⊢r-⊢c : Γ ⊢r A
→ Γ ⊢c A
⊢r-⊢c ⊢r-int = ⊢c-int
⊢r-⊢c (⊢r-var-∙ inΓ) = ⊢c-var-∙ inΓ
⊢r-⊢c (⊢r-arr regA regA₁) = ⊢c-arr (⊢r-⊢c regA) (⊢r-⊢c regA₁)
⊢r-⊢c (⊢r-∀ regA) = ⊢c-∀ (⊢r-⊢c regA)