Documentation

Cedar.Thm.Validation.Typechecker.BinaryApp.Mem

This file proves that typechecking of .binaryApp .mem expressions is sound.

theorem Cedar.Thm.acts_maybeDescendentOf_false_implies_not_ancestor_type {euid : Spec.EntityUID} {ety : Spec.EntityType} {data : Spec.EntityData} {entry : Validation.ActionSchemaEntry} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} (hwf : InstanceOfWellFormedEnvironment request entities env) (hdesc : env.acts.maybeDescendentOf euid.ty ety = false) (hent_found : Data.Map.find? entities euid = some data) (hacts_entry : Data.Map.find? env.acts euid = some entry) (euid' : Spec.EntityUID) :
euid' data.ancestorseuid'.ty ety
theorem Cedar.Thm.entity_type_in_false_implies_inₑ_false {euid₁ euid₂ : Spec.EntityUID} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} (h₁ : InstanceOfWellFormedEnvironment request entities env) (h₂ : env.descendentOf euid₁.ty euid₂.ty = false) :
Spec.inₑ euid₁ euid₂ entities = false
theorem Cedar.Thm.action_type_in_eq_action_inₑ (euid₁ euid₂ : Spec.EntityUID) {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} (h₁ : InstanceOfWellFormedEnvironment request entities env) (h₂ : env.acts.contains euid₁ = true) :
Spec.inₑ euid₁ euid₂ entities = env.acts.descendentOf euid₁ euid₂
theorem Cedar.Thm.type_of_mem_is_soundₑ {x₁ x₂ : Spec.Expr} {c₁ c₁' c₂' : Validation.Capabilities} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} {ety₁ ety₂ : Spec.EntityType} (h₁ : CapabilitiesInvariant c₁ request entities) (h₂ : InstanceOfWellFormedEnvironment request entities env) (h₃ : (Validation.typeOf x₁ c₁ env).typeOf = Except.ok (Validation.CedarType.entity ety₁, c₁')) (h₄ : (Validation.typeOf x₂ c₁ env).typeOf = Except.ok (Validation.CedarType.entity ety₂, c₂')) (ih₁ : TypeOfIsSound x₁) (ih₂ : TypeOfIsSound x₂) :
theorem Cedar.Thm.entity_type_in_false_implies_inₛ_false {euid : Spec.EntityUID} {euids : List Spec.EntityUID} {ety : Spec.EntityType} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} (h₁ : InstanceOfWellFormedEnvironment request entities env) (h₂ : env.descendentOf euid.ty ety = false) (h₃ : ∀ (euid : Spec.EntityUID), euid euidseuid.ty = ety) :
Data.Set.any (fun (x : Spec.EntityUID) => Spec.inₑ euid x entities) (Data.Set.make euids) = false
theorem Cedar.Thm.mapM'_eval_lits_eq_prims {ps : List Spec.Prim} {vs : List Spec.Value} {request : Spec.Request} {entities : Spec.Entities} (h₁ : List.mapM' (fun (x : Spec.Expr) => Spec.evaluate x request entities) (List.map Spec.Expr.lit ps) = Except.ok vs) :
theorem Cedar.Thm.action_type_in_eq_action_inₛ {auid : Spec.EntityUID} {euids euids' : List Spec.EntityUID} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} (h₁ : InstanceOfWellFormedEnvironment request entities env) (h₂ : env.acts.contains auid = true) (h₃ : euids euids') :
Data.Set.any (fun (x : Spec.EntityUID) => Spec.inₑ auid x entities) (Data.Set.make euids) = true (euid : Spec.EntityUID), euid euids' env.acts.descendentOf auid euid = true
theorem Cedar.Thm.type_of_mem_is_soundₛ {x₁ x₂ : Spec.Expr} {c₁ c₁' c₂' : Validation.Capabilities} {env : Validation.TypeEnv} {request : Spec.Request} {entities : Spec.Entities} {ety₁ ety₂ : Spec.EntityType} (h₁ : CapabilitiesInvariant c₁ request entities) (h₂ : InstanceOfWellFormedEnvironment request entities env) (h₃ : (Validation.typeOf x₁ c₁ env).typeOf = Except.ok (Validation.CedarType.entity ety₁, c₁')) (h₄ : (Validation.typeOf x₂ c₁ env).typeOf = Except.ok ((Validation.CedarType.entity ety₂).set, c₂')) (ih₁ : TypeOfIsSound x₁) (ih₂ : TypeOfIsSound x₂) :
theorem Cedar.Thm.type_of_mem_is_sound {x₁ x₂ : Spec.Expr} {c₁ c₂ : Validation.Capabilities} {env : Validation.TypeEnv} {ty : Validation.TypedExpr} {request : Spec.Request} {entities : Spec.Entities} (h₁ : CapabilitiesInvariant c₁ request entities) (h₂ : InstanceOfWellFormedEnvironment request entities env) (h₃ : Validation.typeOf (Spec.Expr.binaryApp Spec.BinaryOp.mem x₁ x₂) c₁ env = Except.ok (ty, c₂)) (ih₁ : TypeOfIsSound x₁) (ih₂ : TypeOfIsSound x₂) :