Ltac evalDet_tac1 :=
    match goal with
      | [H : cs_more _ _ = cs_more _ _ |- _ ] => inversion H; clear H; subst
      | [|- evalDet_steps ?c ?c ] => econstructor
      | [H : evalDet_steps (evalDet_step ?c ?s) _ |- evalDet_steps (cs_more (Bind ?c _) ?s) _ ] => inversion H; clear H; subst
      | [H : (evalDet_step ?c ?s) = _ |- evalDet_steps (cs_more (Bind ?c _) ?s) _ ] => econstructor; simpl
      | [|- context[match ?x with | cs_done _ _ => _ | cs_eof _ => _ | cs_more _ _ => _ end] ] => case_eq x; intuition

    end.

(* Specifications: *)
Theorem evalDet_steps_bind_more : forall(A B : Set)(c1 : Comp B)(c2 : B -> Comp A) s c1' s', evalDet_steps (cs_more c1 s) (cs_more c1' s') -> evalDet_steps (cs_more (Bind c1 c2) s) (cs_more (Bind c1' c2) s').
Lemma evalDet_steps_done_inv_h : forall (A : Set)(x y : comp_state A), evalDet_steps x y -> forall (c : Comp A)(a : A) s s', x = (cs_more c s) -> y = (cs_done a s') -> exists c'' s'', evalDet_steps (cs_more c s) (cs_more c'' s'') /\ evalDet_step c'' s'' = (cs_done a s').
Lemma evalDet_steps_done_inv : forall (A : Set)(c : Comp A)(a : A) s s', evalDet_steps (cs_more c s) (cs_done a s') -> exists c'' s'', evalDet_steps (cs_more c s) (cs_more c'' s'') /\ evalDet_step c'' s'' = (cs_done a s').
Lemma evalDet_steps_eof_inv_h : forall (A : Set)(x y : comp_state A), evalDet_steps x y -> forall (c : Comp A) s, x = (cs_more c s) -> y = (@cs_eof A) -> exists c'' s'', evalDet_steps (cs_more c s) (cs_more c'' s'') /\ evalDet_step c'' s'' = (@cs_eof A).
Lemma evalDet_steps_eof_inv : forall (A : Set)(c : Comp A) s, evalDet_steps (cs_more c s) (@cs_eof A) -> exists c'' s'', evalDet_steps (cs_more c s) (cs_more c'' s'') /\ evalDet_step c'' s'' = (@cs_eof A).
Theorem evalDet_steps_bind_done : forall(A B : Set)(c1 : Comp B)(c2 : B -> Comp A) a s s', evalDet_steps (cs_more c1 s) (cs_done a s') -> evalDet_steps (cs_more (Bind c1 c2) s) (cs_more (c2 a) s').
Theorem evalDet_bind_eof : forall(A B : Set)(c1 : Comp B)(c2 : B -> Comp A) s, evalDet_steps (cs_more c1 s) (@cs_eof B) -> evalDet_steps (cs_more (Bind c1 c2) s) (@cs_eof A).