(** ** Specific filters *)
(** Filters for pairs *)
Inductive filter_prod {T U : Type} (F G : _ -> Prop) (P : T * U -> Prop) : Prop :=
Filter_prod (Q : T -> Prop) (R : U -> Prop) :
F Q -> G R -> (forall x y, Q x -> R y -> P (x, y)) -> filter_prod F G P.
Global Instance filter_prod_filter :
forall T U (F : (T -> Prop) -> Prop) (G : (U -> Prop) -> Prop),
Filter F -> Filter G -> Filter (filter_prod F G).
Global Instance filter_prod_proper' {T1 T2 : Type}
{F : (T1 -> Prop) -> Prop} {G : (T2 -> Prop) -> Prop}
{FF : ProperFilter' F} {FG : ProperFilter' G} :
ProperFilter' (filter_prod F G).
Global Instance filter_prod_proper {T1 T2 : Type}
{F : (T1 -> Prop) -> Prop} {G : (T2 -> Prop) -> Prop}
{FF : ProperFilter F} {FG : ProperFilter G} :
ProperFilter (filter_prod F G).

Lemma filterlim_pair :
forall {T U V F G H} {FF : Filter F},
forall (f : T -> U) (g : T -> V),
filterlim f F G ->
filterlim g F H ->
filterlim (fun x => (f x, g x)) F (filter_prod G H).