Theory RelationalSemFSet
section "Declarative semantics as a relational semantics"
theory RelationalSemFSet
imports Lambda ValuesFSet
begin
inductive rel_sem :: "env ⇒ exp ⇒ val ⇒ bool" ("_ ⊢ _ ⇒ _" [52,52,52] 51) where
rnat[intro!]: "ρ ⊢ ENat n ⇒ VNat n" |
rprim[intro!]: "⟦ ρ ⊢ e1 ⇒ VNat n1; ρ ⊢ e2 ⇒ VNat n2 ⟧ ⟹ ρ ⊢ EPrim f e1 e2 ⇒ VNat (f n1 n2)" |
rvar[intro!]: "⟦ lookup ρ x = Some v'; v ⊑ v' ⟧ ⟹ ρ ⊢ EVar x ⇒ v" |
rlam[intro!]: "⟦ ∀ v v'. (v,v') ∈ fset t ⟶ (x,v)#ρ ⊢ e ⇒ v' ⟧
⟹ ρ ⊢ ELam x e ⇒ VFun t" |
rapp[intro!]: "⟦ ρ ⊢ e1 ⇒ VFun t; ρ ⊢ e2 ⇒ v2; (v3,v3') ∈ fset t; v3 ⊑ v2; v ⊑ v3'⟧
⟹ ρ ⊢ EApp e1 e2 ⇒ v" |
rifnz[intro!]: "⟦ ρ ⊢ e1 ⇒ VNat n; n ≠ 0; ρ ⊢ e2 ⇒ v ⟧ ⟹ ρ ⊢ EIf e1 e2 e3 ⇒ v" |
rifz[intro!]: "⟦ ρ ⊢ e1 ⇒ VNat n; n = 0; ρ ⊢ e3 ⇒ v ⟧ ⟹ ρ ⊢ EIf e1 e2 e3 ⇒ v"
end