Section SIGMA_BUT.
Variable Site : Set.
Hypothesis eq_site_dec : eq_dec Site.
Variable LS0 : list Site.
Variable LS1 : list Site.
Variable LS2 : list Site.
Variable Data : Set.
Let Table := Site -> Data.
Variable t : Table.
Variable s s0 s1 owner : Site.
Variable s2 : Site.
Variable d0 : Data.
Variable f : Site -> Site -> Site -> Data -> Z.
Variable pred : Data -> bool.
Variable
decidable_predicate : forall a : Data, {pred a = true} + {pred a = false}.

Lemma permute_sigma_reduce :
forall q : queue Data,
sigma Site LS0 (fun s : Site => reduce Data (f s s1 s2) q) =
reduce Data (fun d : Data => sigma Site LS0 (fun s : Site => f s s1 s2 d)) q.