Section Weak.
(** A `label' is either the silent action, or a visible one *)
Inductive Lbl: Type := T | L(a: A).
Definition reduction_t := reduction Lbl.
Variable X: Type.
Variable Red: reduction_t X.
(** Weak transition relation *)
Definition Weak: reduction_t X := fun l =>
match l with
| T => star (Red T)
| L a => comp (star (Red T)) (comp (Red (L a)) (star (Red T)))
end.
(** Transition relation for expansion *)
Definition EWeak: reduction_t X := fun l =>
match l with
| T => union2 (eq (A:=X)) (Red T)
| L a => Red (L a)
end.
(** Transition relation for relaxed expansion *)
Definition REWeak: reduction_t X := fun l =>
match l with
| T => union2 (eq (A:=X)) (Red T)
| L a => comp (Red (L a)) (star (Red T))
end.

Lemma weak_refl: forall x, Weak T x x.