End BUT_XY.
Section NEW_BUT_XY.
Variable Site : Set.
Hypothesis eq_site_dec : eq_dec Site.
Variable LS1 : list Site.
Variable LS2 : list Site.
Variable Data : Set.
Let Table2 := Site -> Site -> Data.
Variable f : Site -> Site -> Data -> Z.
Remark add_reduce17 : forall x y a : Z, x = y -> (x + a)%Z = (y + a)%Z.
Remark add_reduce18 : forall x y a : Z, x = y -> a = 0%Z -> x = (y + a)%Z.

(* another way of defining sigma_but:  On the one hand, it is less convenient, because the functional argument is changed, which later, if we use sigma2_simpl, will imply a tedious case analysis.   On the other hand, it is more convenient, because I can apply sigma2_but several times, there are transformed into a sigma2_table. *)
Lemma new_sigma2_sigma2_but_x_y :
forall (s0 s1 : Site) (Data : Set) (f : Site -> Site -> Data -> Z)
(t : Site -> Site -> Data),
only_once Site eq_site_dec s0 LS1 ->
only_once Site eq_site_dec s1 LS2 ->
sigma2_table Site LS1 LS2 Data f t =
(new_sigma2_but_table Site eq_site_dec LS1 LS2 Data s0 s1 f t +
f s0 s1 (t s0 s1))%Z.