Réponse:  
let rec réécrit_le = function
    G1_EE (G1_EE (e, e'), e'') -> réécrit_le (G1_EE (e, G1_EE (e', e'')))
  | G1_EE (G1_gEd e, e') -> G2_gEdE (réécrit_le e, réécrit_le e')
  | G1_EE (G1_0, e) -> réécrit_le e
  | G1_gEd e -> G2_gEdE (réécrit_le e, G2_0)
  | G1_0 -> G2_0;;
let réécrit (G1_S e) = G2_S (réécrit_le e);;