unfold Derivestar in |- *.
intros N_dans_X N_dans_V1 N_dans_V2 G_1 G_2 inter_V1_V2_empty u v
Derivestar_Ru.
pattern u, v in |- *.
apply Derivestar_Ru.
auto.
intros u0 v0 w Der_Ru inmon_v0_imp_Rstar_R2_v0 inmon_u0.
apply Rstar_R with v0.
prolog [ sym_inter isGram2 inter_union isGram4 inmon_Der_imp_Der_d2 ] 4.
(*Apply inmon_Der_imp_Der_d2. Assumption. Assumption. Assumption. Apply isGram4 with S1;Assumption. Apply isGram4 with S2;Assumption. Apply inter_union. Apply isGram2 with R1 S1; Assumption. Apply sym_inter;Assumption. Assumption. Assumption.*)
prolog [ inmon_Der_imp_inmon_d2 ] 3.
(*Apply inmon_v0_imp_Rstar_R2_v0. Apply inmon_Der_imp_inmon_d2 with u0;Assumption.*)
Qed.

Lemma Gunion_disj_Derive1 :
~ dans S X ->
~ dans S V1 ->
~ dans S V2 ->
isGram X V1 R1 S1 ->
isGram X V2 R2 S2 ->
forall u : Word,
Derive Ru (cons S nil) u -> cons S1 nil = u :>Word \/ cons S2 nil = u :>Word.