From 26925a4f41ed14881846648bf43448d07f1873d7 Mon Sep 17 00:00:00 2001 From: Chloe Brown Date: Sat, 13 Mar 2021 20:07:24 +0000 Subject: Move some properties to Properties. --- src/Cfe/Judgement/Properties.agda | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src/Cfe/Judgement/Properties.agda') diff --git a/src/Cfe/Judgement/Properties.agda b/src/Cfe/Judgement/Properties.agda index b5183eb..101994b 100644 --- a/src/Cfe/Judgement/Properties.agda +++ b/src/Cfe/Judgement/Properties.agda @@ -19,6 +19,56 @@ open import Data.Vec.Properties open import Function open import Relation.Binary.PropositionalEquality +≅-refl : ∀ {a A m} {xs : Vec {a} A m} → xs ≅ xs +≅-refl {xs = []} = []≅[] +≅-refl {xs = x ∷ xs} = refl ∷ ≅-refl + +≅-reflexive : ∀ {a A m} {xs : Vec {a} A m} {ys} → xs ≡ ys → xs ≅ ys +≅-reflexive refl = ≅-refl + +≅-length : ∀ {a A m n} {xs : Vec {a} A m} {ys : Vec _ n} → xs ≅ ys → m ≡ n +≅-length []≅[] = refl +≅-length (_ ∷ xs≅ys) = cong suc (≅-length xs≅ys) + +≅⇒≡ : ∀ {a A m n} {xs : Vec {a} A m} {ys : Vec _ n} → (xs≅ys : xs ≅ ys) → vcast (≅-length xs≅ys) xs ≡ ys +≅⇒≡ []≅[] = refl +≅⇒≡ (x≡y ∷ xs≅ys) = cong₂ _∷_ x≡y (≅⇒≡ xs≅ys) + +++ˡ : ∀ {a A m n k} {xs : Vec {a} A m} {ys : Vec _ n} (zs : Vec _ k) → xs ≅ ys → zs ++ xs ≅ zs ++ ys +++ˡ [] xs≅ys = xs≅ys +++ˡ (z ∷ zs) xs≅ys = refl ∷ ++ˡ zs xs≅ys + +cast₁ : ∀ {m₁ m₂ n} {Γ₁ : Vec _ m₁} {Γ₂ : Vec _ m₂} {Δ : Vec _ n} {e τ} → (eq : Γ₁ ≅ Γ₂) → Γ₁ , Δ ⊢ e ∶ τ → Γ₂ , Δ ⊢ cast (cong (n ℕ.+_) (≅-length eq)) e ∶ τ +cast₁ eq Eps = Eps +cast₁ eq (Char c) = Char c +cast₁ eq Bot = Bot +cast₁ {n = n} {Γ₁} {Δ = Δ} eq (Var {i = i} i≥n) = + subst₂ (_, Δ ⊢ cast (cong (n ℕ.+_) (≅-length eq)) (Var i) ∶_) + (≅⇒≡ eq) + (eq′ Γ₁ i≥n (≅-length eq)) + (Var (ge (≅-length eq) i≥n)) + where + open import Data.Empty using (⊥-elim) + open import Data.Fin.Properties using (toℕ