Properties of Terms #
This file contains lemmas about the typeOf function on Terms.
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Cedar.Thm.typeOf_term_record_attr_value
{r : Data.Map Spec.Attr SymCC.Term}
{rty : Data.Map Spec.Attr SymCC.TermType}
{a : Spec.Attr}
{ty : SymCC.TermType}
(h₁ : (SymCC.Term.record r).typeOf = SymCC.TermType.record rty)
(h₂ : rty.find? a = some ty)
:
theorem
Cedar.Thm.typeOf_term_record_attr_value_none
{r : Data.Map Spec.Attr SymCC.Term}
{rty : Data.Map Spec.Attr SymCC.TermType}
{a : Spec.Attr}
(h₁ : (SymCC.Term.record r).typeOf = SymCC.TermType.record rty)
(h₂ : rty.find? a = none)
:
theorem
Cedar.Thm.typeOf_term_record_attr_value_typeOf
{rty : Data.Map Spec.Attr SymCC.TermType}
{r : Data.Map Spec.Attr SymCC.Term}
{a : Spec.Attr}
{t : SymCC.Term}
(h₁ : (SymCC.Term.record r).typeOf = SymCC.TermType.record rty)
(h₂ : r.find? a = some t)
:
theorem
Cedar.Thm.typeOf_term_record_attr_value_eq
{r₁ r₂ : Data.Map Spec.Attr SymCC.Term}
{rty : Data.Map Spec.Attr SymCC.TermType}
{a : Spec.Attr}
{t₁ t₂ : SymCC.Term}
(hty₁ : (SymCC.Term.record r₁).typeOf = SymCC.TermType.record rty)
(hty₂ : (SymCC.Term.record r₂).typeOf = SymCC.TermType.record rty)
(ht₁ : r₁.find? a = some t₁)
(ht₂ : r₂.find? a = some t₂)
:
theorem
Cedar.Thm.typeOf_term_record_tail
{a : Spec.Attr}
{t₁ t₂ : SymCC.Term}
{tl₁ tl₂ : List (Spec.Attr × SymCC.Term)}
:
(SymCC.Term.record (Data.Map.mk ((a, t₁) :: tl₁))).typeOf = (SymCC.Term.record (Data.Map.mk ((a, t₂) :: tl₂))).typeOf →
(SymCC.Term.record (Data.Map.mk tl₁)).typeOf = (SymCC.Term.record (Data.Map.mk tl₂)).typeOf
@[simp]
theorem
Cedar.Thm.typeOf_wf_term_is_wf
{εs : SymCC.SymEntities}
{t : SymCC.Term}
:
SymCC.Term.WellFormed εs t → SymCC.TermType.WellFormed εs t.typeOf
theorem
Cedar.Thm.wfp_term_implies_wf_ty
{εs : SymCC.SymEntities}
{t : SymCC.Term}
(h : SymCC.Term.WellFormedPartialApp εs t)
:
theorem
Cedar.Thm.typeOf_option_wf_terms_is_wf
{εs : SymCC.SymEntities}
{hd : SymCC.Term}
{tl ts : List SymCC.Term}
{ty : SymCC.TermType}
:
ts = hd :: tl →
(∀ (t : SymCC.Term), t ∈ ts → SymCC.Term.WellFormed εs t) →
(∀ (t : SymCC.Term), t ∈ ts → t.typeOf = ty.option) → SymCC.TermType.WellFormed εs ty
theorem
Cedar.Thm.typeOf_term_record_cedarType?_some_implies_attr_cedarType?_some
{a : Spec.Attr}
{t : SymCC.Term}
{r : Data.Map Spec.Attr SymCC.Term}
{ty : Validation.CedarType}
:
theorem
Cedar.Thm.isPrimType_implies_prim_type
{ty : SymCC.TermType}
:
ty.isPrimType = true → ∃ (pty : SymCC.TermPrimType), ty = SymCC.TermType.prim pty
theorem
Cedar.Thm.isEntityType_implies_entity_type
{ty : SymCC.TermType}
:
ty.isEntityType = true → ∃ (ety : Spec.EntityType), ty = SymCC.TermType.entity ety
theorem
Cedar.Thm.isOptionEntityType_implies_option_entity_type
{ty : SymCC.TermType}
:
ty.isOptionEntityType = true → ∃ (ety : Spec.EntityType), ty = (SymCC.TermType.entity ety).option
theorem
Cedar.Thm.typeOf_ifAllSome_option_type
{gs : List SymCC.Term}
{t : SymCC.Term}
{ty : SymCC.TermType}
: