proposition: Lemma filter_and' : forall {A} pred1 pred2, forall (seq: list A), List.filter (fun x => andb (pred1 x) (pred2 x)) seq = List.filter pred1 (List.filter pred2 seq).
proof: Proof. intros; induction seq; simpl; [ | destruct (pred1 a) eqn:eq1; destruct (pred2 a) eqn:eq2]; simpl; try rewrite eq1; try rewrite eq2; trivial; f_equal; trivial. Qed.
imports: Fiat.Common.Coq__8_4__8_5__Compat Coq.ZArith.ZArith Coq.Lists.List Coq.Lists.SetoidList Coq.Bool.Bool Fiat.Common Fiat.Common.List.Operations Fiat.Common.Equality Fiat.Common.List.FlattenList Fiat.Common.LogicFacts