Section SIGMA_TABLE3.
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 t : Table2.
Variable s0 s1 : Site.
Variable d0 : Data.
Variable f : Site -> Site -> Data -> Z.
Variable f1 : Site -> Site -> Data -> Z.
Variable f2 : Site -> Site -> Data -> Z.
(*Definition fun_sum_site2 := [f1,f2: Site -> Site->Data->Z] [s1,s2: Site] [a: Data] `(f1 s1 s2 a) + (f2 s1 s2 a)`.*)
Definition fun_sum_site2 (f1 f2 : Site -> Site -> Data -> Z)
(s1 : Site) :=
fun_sum_site Site Data (fun (s2 : Site) (a : Data) => f1 s1 s2 a)
(fun (s2 : Site) (a : Data) => f2 s1 s2 a).
Definition fun_minus_site2 (f1 f2 : Site -> Site -> Data -> Z)
(s1 : Site) :=
fun_minus_site Site Data (fun (s2 : Site) (a : Data) => f1 s1 s2 a)
(fun (s2 : Site) (a : Data) => f2 s1 s2 a).
(*** ***)
Definition a_fun (s : Site) := f s1 s (t s1 s).
Remark sigma2_change_1 :
forall (l : list Site) (n0 : Z),
only_once Site eq_site_dec s0 l ->
(sigma Site l (change_x0 Site Z eq_site_dec a_fun s0 n0) + a_fun s0 - n0)%Z =
sigma Site l a_fun.
Remark add_reduce1 :
forall x y z a b c : Z, (x + y - z - a + z)%Z = (x + y - a)%Z.
Remark add_reduce2 :
forall x y z a b c : Z,
(x + y)%Z = (z + a - b + c)%Z -> (x + y)%Z = (a + z - b + c)%Z.

Lemma sigma2_table_simpl_property :
forall (t : Site -> Site -> Data)
(P : (Site -> Site -> Data) -> Site -> Site -> Set)
(f1 f2 : Site -> Site -> Data -> Z),
(forall (s1 s2 : Site) (d : Data), P t s1 s2 -> f1 s1 s2 d = f2 s1 s2 d) ->
(forall s1 s2 : Site, P t s1 s2) ->
sigma2_table Site LS1 LS2 Data f1 t = sigma2_table Site LS1 LS2 Data f2 t.