You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB

From stdpp Require Import gmap base relations.
From iris Require Import prelude.
11 months ago
From semantics.ts.stlc_extended Require Import lang notation.
(** * Big-step semantics *)
Implicit Types
(v : val)
11 months ago
(e : expr).
Inductive big_step : expr val Prop :=
| bs_lit (n : Z) :
big_step (LitInt n) (LitIntV n)
| bs_lam (x : binder) (e : expr) :
big_step (λ: x, e)%E (λ: x, e)%V
| bs_add e1 e2 (z1 z2 : Z) :
big_step e1 (LitIntV z1)
big_step e2 (LitIntV z2)
big_step (Plus e1 e2) (LitIntV (z1 + z2))%Z
| bs_app e1 e2 x e v2 v :
big_step e1 (LamV x e)
big_step e2 v2
big_step (subst' x (of_val v2) e) v
big_step (App e1 e2) v
(* Pairs and fst, snd *)
| bs_pair (e1 e2 : expr) (v1 v2 : val) :
big_step e1 v1
big_step e2 v2
big_step (Pair e1 e2) (PairV v1 v2)
| bs_fst (e : expr) (v1 v2: val):
big_step e (PairV v1 v2)
big_step (Fst e) v1
| bs_snd (e : expr) (v1 v2: val):
big_step e (PairV v1 v2)
big_step (Fst e) v1
(* Inj *)
| bs_inj_l e v :
big_step e v
big_step (InjL e) (InjLV v)
| bs_inj_r e v :
big_step e v
big_step (InjR e) (InjRV v)
| bs_case_l (e_inj e_l e_r: expr) (v_inj v: val):
big_step e_inj (InjLV v_inj)
big_step (e_l (of_val v_inj)) v
big_step (Case e_inj e_l e_r) v
| bs_case_r (e_inj e_l e_r: expr) (v_inj v: val):
big_step e_inj (InjRV v_inj)
big_step (e_r (of_val v_inj)) v
big_step (Case e_inj e_l e_r) v
.
#[export] Hint Constructors big_step : core.
Lemma big_step_of_val e v :
e = of_val v
big_step e v.
Proof.
intros ->.
induction v; simpl; eauto.
Qed.
Lemma big_step_val v v' :
big_step (of_val v) v' v' = v.
Proof.
enough ( e, big_step e v' e = of_val v v' = v) by naive_solver.
intros e Hb.
induction Hb in v |-*; intros Heq; subst; destruct v; inversion Heq; subst; naive_solver.
Qed.