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_but_reduce :
forall q : queue Data,
sigma_but Site owner eq_site_dec LS0
(fun s : Site => reduce Data (f s s1 s2) q) =
reduce Data
(fun d : Data =>
sigma_but Site owner eq_site_dec LS0 (fun s : Site => f s s1 s2 d)) q.