Ltac evalDet_tac :=
    match goal with
      | [H1 : evalDet_steps ?x (cs_done ?a1 ?s1), H2 : evalDet_steps ?x (@cs_eof _) |- _ ] => exfalso; eauto using evalDet_steps_done_eof_func; intuition
      | [H : evalDet_steps (cs_more (Bind _ _) _) (cs_done _ _) |- _ ] => apply evalDet_steps_bind_done_inv in H
      | [H : evalDet_steps (cs_more (Bind _ _) _) (@cs_eof _) |- _ ] => apply evalDet_steps_bind_eof_inv in H; intuition
      | [H : exists _ : _, _ |- _ ] => destruct H; intuition
      | [H1 : evalDet_steps ?x (cs_done ?a1 ?s1), H2 : evalDet_steps ?x (cs_done ?a2 ?s2) |- _ ] => assert (a1 = a2 /\ s1 = s2); eauto using evalDet_steps_done_func; intuition; subst; clear H1; eauto
    end.

(* Specifications: *)
Theorem evalDet_done_eof_func: forall (A : Set) (c : Comp A) (a : A) (s : Blist), evalDet c s (ca_done a) -> evalDet c s (@ca_eof A) -> False.
Lemma getSupport_In_evalDet_step_done : forall (A : Set)(c : Comp A) a s s', evalDet_step c s = cs_done a s' -> In a (getSupport c).
Lemma getSupport_In_evalDet_step_more : forall (A : Set)(c c' : Comp A) s s' a, evalDet_step c s = cs_more c' s' -> In a (getSupport c') -> In a (getSupport c).
Lemma getSupport_In_evalDet_steps_h : forall (A : Set)(x y : comp_state A), evalDet_steps x y -> forall (c : Comp A) a s s', x = (cs_more c s) -> y = (cs_done a s') -> In a (getSupport c).
Lemma getSupport_In_evalDet_steps : forall (A : Set)(c : Comp A) a s s', evalDet_steps (cs_more c s) (cs_done a s') -> In a (getSupport c).
Theorem getSupport_In_evalDet : forall (A : Set)(c : Comp A) a s, evalDet c s (ca_done a) -> In a (getSupport c).