Section Abelian.
Variable op : Monoid.com_law 1.
Local Notation "'*%M'" := op (at level 0).
Local Notation "x * y" := (op x y).
Arguments bigID [I r].
Arguments bigD1 [I] j [P F].
Arguments cardD1x [I A].
Arguments partition_big [I s J P] p Q [F].
Arguments reindex_omap [I J] h h' [P F].
Arguments reindex_onto [I J] h h' [P F].
Arguments reindex [I J] h [P F].
Arguments big_enum_val_cond [I A] P F.
Arguments big_enum_rank_cond [I A x] xA P F.
Arguments exchange_big_dep [I J rI rJ P Q] xQ [F].

Lemma exchange_big_dep_nat m1 n1 m2 n2 (P : pred nat) (Q : rel nat)
(xQ : pred nat) F :
(forall i j, m1 <= i < n1 -> m2 <= j < n2 -> P i -> Q i j -> xQ j) ->
\big[*%M/1]_(m1 <= i < n1 | P i) \big[*%M/1]_(m2 <= j < n2 | Q i j) F i j =
\big[*%M/1]_(m2 <= j < n2 | xQ j)
\big[*%M/1]_(m1 <= i < n1 | P i && Q i j) F i j.