induction ls1; intuition; simpl in *.
specialize (IHls1 ls2).
remember (split (ls1 ++ ls2)) as z.
destruct z.
remember (split ls1) as y.
destruct y.
simpl in *.
subst.
trivial.
Qed.

Theorem fst_split_flatten_eq :
forall (A B : Type)(ls : list (list (A * B))),
fst (split (flatten ls)) =
flatten (map (fun x => fst (split x)) ls).