mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
25 lines
1.4 KiB
Agda
25 lines
1.4 KiB
Agda
open import Luau.Type using (Mode)
|
||
|
||
module Properties.Preservation (m : Mode) where
|
||
|
||
open import Agda.Builtin.Equality using (_≡_; refl)
|
||
open import FFI.Data.Maybe using (Maybe; just; nothing)
|
||
open import FFI.Data.Either using (Either)
|
||
open import Luau.TypeCheck(m) using (_▷_⊢ᴱ_∋_∈_⊣_; _▷_⊢ᴮ_∋_∈_⊣_; _▷_✓; nil; var; addr; app; function; block; done; return; local)
|
||
open import Luau.Syntax using (Block; Expr; yes; nil; var; addr; _$_; function_is_end; block_is_end; _∙_; return; done; local_←_; _⟨_⟩; _⟨_⟩∈_; var_∈_; name; fun; arg)
|
||
open import Luau.Type using (Type; nil; top; _⇒_; tgt)
|
||
open import Luau.VarCtxt using (VarCtxt; ∅; _↦_; _⊕_↦_; _⋒_; _⊝_; ⊕-[]) renaming (_[_] to _[_]ⱽ)
|
||
open import Luau.Addr using (Addr)
|
||
open import Luau.Var using (Var; _≡ⱽ_)
|
||
open import Luau.AddrCtxt using (AddrCtxt) renaming (_[_] to _[_]ᴬ)
|
||
open import Luau.Heap using (Heap)
|
||
open import Luau.OpSem using (_⊢_⟶ᴱ_⊣_)
|
||
open import Properties.Dec using (yes; no)
|
||
open import Properties.Equality using (_≢_; sym; trans; cong)
|
||
open import Properties.Remember using (remember; _,_)
|
||
|
||
src : Type → Type
|
||
src = Luau.Type.src m
|
||
|
||
preservationᴱ : ∀ {Σ Γ S Δ T H H′ M M′} → (Σ ▷ H ✓) → (Σ ▷ Γ ⊢ᴱ S ∋ M ∈ T ⊣ Δ) → (H ⊢ M ⟶ᴱ M′ ⊣ H′) → (Σ ▷ Γ ⊢ᴱ S ∋ M ∈ T ⊣ Δ)
|
||
preservationᴱ = ?
|