OperationalSemantics
Set Implicit Arguments.
Require Import Coq.Program.Equality.
Require Import Definitions Lookup Sequences.
Require Import Coq.Program.Equality.
Require Import Definitions Lookup Sequences.
Reserved Notation "t1 '⟼' t2" (at level 40, t2 at level 39).
Inductive red : sta × trm → sta × trm → Prop :=
Inductive red : sta × trm → sta × trm → Prop :=
γ ∋ (p, lambda(T)t)
―――――――――――――――――――――
(γ p q) ⟼ (γ, t^q)
―――――――――――――――――――――
(γ p q) ⟼ (γ, t^q)
(γ, let x = v in t) ⟼ ((γ, x = v), t^x)
(γ, let y = p in t) ⟼ (γ, t^p)
(γ, t0) ⟼ (γ', t0')
―――――――――――――――――――――――――――――――――――――――――――――――
(γ, let x = t0 in t) ⟼ (γ', let x = t0' in t)
―――――――――――――――――――――――――――――――――――――――――――――――
(γ, let x = t0 in t) ⟼ (γ', let x = t0' in t)
| red_let_tgt : ∀ t0 t γ t0' γ',
(γ, t0) ⟼ (γ', t0') →
(γ, trm_let t0 t) ⟼ (γ', trm_let t0' t)
where "t1 '⟼' t2" := (red t1 t2).
(γ, t0) ⟼ (γ', t0') →
(γ, trm_let t0 t) ⟼ (γ', trm_let t0' t)
where "t1 '⟼' t2" := (red t1 t2).
Reflexive, transitive closure of reduction relation