Definition disjoint_list {A} (l1 l2 : list A) :=
forall a, ~ (In a l1 /\ In a l2).
Fixpoint takeL {A} n (l : list A) : list A :=
match n with
| O => []
| S m => match l with
| [] => []
| h :: t => h :: takeL m t
end
end.
Fixpoint remove_list {A : Type} (p : A -> bool) (xs : list A) : list A :=
match xs with
| [] => []
| x' :: xs' =>
if p x'
then remove_list p xs'
else
x' :: remove_list p xs'
end.

Lemma In_remove_list_iff {A} (p : A -> bool) (xs : list A) : forall x,
In x (remove_list p xs) <-> In x xs /\ p x = false.