(* kill empty détruit tous les états vides *)

(* Specifications: *)
Lemma dt_kill_empty_kill_empty_0 :
forall (d : preDTA) (p p' : prec_list),
prec_list_kill (dta_non_empty_states d) p = Some p' ->
exists plp : pl_path, pl_path_incl plp p'.
Lemma dt_kill_empty_kill_empty_1 :
forall (d : preDTA) (plp : pl_path) (tl : term_list),
pl_path_recon d tl plp <->
pl_path_recon (preDTA_kill (dta_non_empty_states d) d) tl plp.
Lemma dt_kill_empty_kill_empty_2 :
forall (d : preDTA) (p : prec_list) (plp : pl_path),
pl_path_incl plp p ->
pl_path_true plp (dta_non_empty_states d) ->
exists tl : term_list, pl_path_recon d tl plp.
Lemma dt_kill_empty_kill_empty_3 :
forall (d : preDTA) (a : ad) (s : state) (sigma : signature),
MapGet state (preDTA_kill (dta_non_empty_states d) d) a = Some s ->
predta_correct_wrt_sign d sigma ->
exists t : term, reconnaissance (preDTA_kill (dta_non_empty_states d) d) a t.
Lemma dt_kill_empty_kill_empty :
forall (d : preDTA) (a : ad) (sigma : signature),
predta_correct_wrt_sign d sigma ->
((exists s : state,
MapGet state (preDTA_kill (dta_non_empty_states d) d) a = Some s) <->
(exists t : term, reconnaissance d a t)).