Section CompileNThreads.
Definition nth_index:= (list (option compiler_index)).
Definition list_lt: nth_index -> nth_index -> Prop:=
list_ord (opt_rel' (InjorderX compiler_sim)).
Local Ltac subst_sig:=
match goal with
H': existT _ _ _ = existT _ _ _ |- _ =>
eapply Eqdep.EqdepTheory.inj_pair2 in H'; subst
end.
Local Ltac inv_match0:=
match goal with
H: match_state 0 _ _ _ _ _ _ |- _ =>
inversion H; subst_sig; try clear H
end.

Lemma Forall_cat:
forall {A B} (f: A -> B -> Prop) a1 a2 b1 b2,
Forall2 f a1 b1 ->
Forall2 f a2 b2 ->
Forall2 f (a1 ++  a2) (b1 ++ b2).