module A201605.AltArtemov.Old.Common.Ty.WithG where open import A201605.AltArtemov.Try2.Tm public data Ty (g : ℕ) : ℕ → Set where ⊥ : ∀ {n} → Ty g n _⊃_ : ∀ {n} → Ty g n → Ty g n → Ty g n _∧_ : ∀ {n} → Ty g n → Ty g n → Ty g n _∶_ : ∀ {n} → Tm g n → Ty g n → Ty g (suc n) infixr 5 _⊃_ infixr 15 _∶_ ren-ty : ∀ {g g′ n} → g′ ≥ g → Ty g n → Ty g′ n ren-ty h ⊥ = ⊥ ren-ty h (A ⊃ B) = ren-ty h A ⊃ ren-ty h B ren-ty h (A ∧ B) = ren-ty h A ∧ ren-ty h B ren-ty h (t ∶ A) = ren-tm h t ∶ ren-ty h A wk-ty : ∀ {g n} → Ty g n → Ty (suc g) n wk-ty = ren-ty ≥wk wk*-ty : ∀ {g n} → Ty 0 n → Ty g n wk*-ty = ren-ty ≥to ren-ty-id : ∀ {g n} (A : Ty g n) → ren-ty ≥id A ≡ A ren-ty-id ⊥ = refl ren-ty-id (A ⊃ B) = cong₂ _⊃_ (ren-ty-id A) (ren-ty-id B) ren-ty-id (A ∧ B) = cong₂ _∧_ (ren-ty-id A) (ren-ty-id B) ren-ty-id (t ∶ A) = cong₂ _∶_ (ren-tm-id t) (ren-ty-id A) ren-ty-○ : ∀ {g g′ g″ n} (h′ : g″ ≥ g′) (h : g′ ≥ g) (A : Ty g n) → ren-ty h′ (ren-ty h A) ≡ ren-ty (h′ ○ h) A ren-ty-○ h′ h ⊥ = refl ren-ty-○ h′ h (A ⊃ B) = cong₂ _⊃_ (ren-ty-○ h′ h A) (ren-ty-○ h′ h B) ren-ty-○ h′ h (A ∧ B) = cong₂ _∧_ (ren-ty-○ h′ h A) (ren-ty-○ h′ h B) ren-ty-○ h′ h (t ∶ A) = cong₂ _∶_ (ren-tm-○ h′ h t) (ren-ty-○ h′ h A)