Ltac cgen H := generalize H; clear H.Definition reduction := A -> relation X.Definition incl_r: relation reduction := fun R1 R2 => forall a, incl (R1 a) (R2 a).Definition eeq_r: relation reduction := fun R1 R2 => forall a, eeq (R1 a) (R2 a).Definition diagram_r(RX: reduction A X) R (RY: reduction A Y) S := forall a, diagram (RX a) R (RY a) S.(** A `label' is either the silent action, or a visible one *)  
    Inductive Lbl: Type := T | L(a: A).(** A `label' is either the silent action, or a visible one *)  
    Inductive Lbl: Type := T | L(a: A).(** A `label' is either the silent action, or a visible one *)  
    Inductive Lbl: Type := T | L(a: A).Definition reduction_t := reduction Lbl.(** 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_tau: forall y l x z, Red l x y -> Weak T y z -> Weak l x z.