Proof with auto.
intro A. unfold do_well. do 2 (rewrite listd_app, (@listd_unfold_inter _ state)).
split. split... apply do_well1_2_sound... rewrite (@listd_unfold_inter _ state).
split. apply do_well3_sound... apply do_well4_5_sound...
Qed.

(* Specifications: *)
Lemma factor_hyp_lem gamma delta l s :
(listd pure_atom_denote inter TT gamma s ->
listd (fun atms s => listd pure_atom_denote un FF (atms ++ delta) s)
inter TT l s) ->
listd
(fun (atms : list pure_atom) (s' : state) =>
listd pure_atom_denote inter TT gamma s' ->
listd pure_atom_denote un FF (atms ++ delta) s') inter TT l s.