proposition: Lemma filter_and {A} : forall (pred1 pred2 : A -> bool) (l : List.list A), List.filter (fun a => pred1 a && pred2 a) l = List.filter pred2 (List.filter pred1 l).
proof: Proof. induction l; simpl; eauto. case_eq (pred1 a); simpl; intros H; eauto; case_eq (pred2 a); simpl; intros; rewrite IHl; eauto. 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