Skip to content
Snippets Groups Projects
Commit 4d5ff4eb authored by Ralf Jung's avatar Ralf Jung
Browse files

work on language interface

parent 0e6d307c
No related branches found
No related tags found
No related merge requests found
...@@ -4,18 +4,18 @@ Class Language (E V S : Type) := { ...@@ -4,18 +4,18 @@ Class Language (E V S : Type) := {
to_expr : V E; to_expr : V E;
of_expr : E option V; of_expr : E option V;
atomic : E Prop; atomic : E Prop;
prim_step : (E * S) (E * S) option E Prop; prim_step : E S E S option E Prop;
of_to_expr v : of_expr (to_expr v) = Some v; of_to_expr v : of_expr (to_expr v) = Some v;
to_of_expr e v : of_expr e = Some v to_expr v = e; to_of_expr e v : of_expr e = Some v to_expr v = e;
values_stuck e σ s' ef : prim_step (e,σ) s' ef of_expr e = None; values_stuck e σ e' σ' ef : prim_step e σ e' σ' ef of_expr e = None;
atomic_not_value e : atomic e of_expr e = None; atomic_not_value e : atomic e of_expr e = None;
atomic_step e1 σ1 e2 σ2 ef : atomic_step e1 σ1 e2 σ2 ef :
atomic e1 atomic e1
prim_step (e1,σ1) (e2,σ2) ef prim_step e1 σ1 e2 σ2 ef
is_Some (of_expr e2) is_Some (of_expr e2)
}. }.
Section foo. Section Lang.
Context `{Language E V St}. Context `{Language E V St}.
Definition cfg : Type := (list E * St)%type. Definition cfg : Type := (list E * St)%type.
...@@ -23,9 +23,17 @@ Section foo. ...@@ -23,9 +23,17 @@ Section foo.
| step_atomic e1 σ1 e2 σ2 ef t1 t2 : | step_atomic e1 σ1 e2 σ2 ef t1 t2 :
ρ1 = (t1 ++ e1 :: t2, σ1) ρ1 = (t1 ++ e1 :: t2, σ1)
ρ1 = (t1 ++ e2 :: t2 ++ option_list ef, σ2) ρ1 = (t1 ++ e2 :: t2 ++ option_list ef, σ2)
prim_step (e1, σ1) (e2, σ2) ef prim_step e1 σ1 e2 σ2 ef
step ρ1 ρ2. step ρ1 ρ2.
Definition steps := rtc step. Definition steps := rtc step.
Definition stepn := nsteps step. Definition stepn := nsteps step.
End foo.
\ No newline at end of file Definition is_ctx (ctx : E -> E) : Prop :=
(forall e, is_Some (of_expr (ctx e)) -> is_Some (of_expr e)) /\
(forall e1 σ1 e2 σ2 ef, prim_step e1 σ1 e2 σ2 ef -> prim_step (ctx e1) σ1 (ctx e2) σ2 ef) /\
(forall e1' σ1 e2 σ2 ef, of_expr e1' = None -> prim_step (ctx e1') σ1 e2 σ2 ef ->
exists e2', e2 = ctx e2' /\ prim_step e1' σ1 e2' σ2 ef).
End Lang.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment