Ltac use_star_step_diamond :=
match goal with
| [ S1: Star ?L _ ?t1 _, S2: Star ?L _ ?t2 _ |- _ ] =>
let t := fresh "t" in let P := fresh "P" in let EQ := fresh "EQ" in
destruct (star_step_diamond _ _ _ S1 _ _ S2)
as [t [ [P EQ] | [P EQ] ]]; subst
end.
Ltac use_nostep :=
match goal with
| [ S: Step ?L ?s _ _, NO: Nostep ?L ?s |- _ ] => elim (NO _ _ S)
end.

Lemma star_step_triangle:
forall s0 t1 s1 t2 s2,
Star L s0 t1 s1 ->
Star L s0 t2 s2 ->
Nostep L s2 ->
exists t,
Star L s1 t s2 /\ t2 = t1 ** t.