Proof using.
induction l1; intros; simpl in *; repeat break_match.
- auto.
- find_inversion. find_higher_order_rewrite.
repeat break_match. repeat find_inversion.
repeat find_rewrite. find_inversion.
auto.
Qed.

(* Specifications: *)
Lemma correspond_preserved_snoc :
forall sigma tr_1 tr_m st sigma' st' i l,
correspond st sigma tr_1 tr_m ->
handler i st = (l, st') ->
state (sigma' Primary) = state (sigma Primary) ->
queue (sigma' Primary) = queue (sigma Primary) ++ [i] ->
correspond st' sigma' (tr_1 ++ [(i,l)]) (tr_m ++ [(Primary, inl (Request i))]).