Section CFGs.
Notation sig := nat.
Definition rule : Type := sig * list sig.
Definition cfg : Type := sig * list rule.
Definition rules (G : cfg) := snd G.
Definition startsym (G : cfg) := fst G.
Inductive rew_cfg : cfg -> list sig -> list sig -> Prop:=
|rewR R x a y v : (a,v) el rules R -> rew_cfg R (x++[a]++y) (x++v++y).
Hint Constructors rew_cfg.

(* Specifications: *)
Lemma rewrite_sing R a x :
(a, x) el rules R -> rew_cfg R [a] x.