(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)
Require Export DistributedReferenceCounting.machine2.invariant0.
Require Export DistributedReferenceCounting.machine2.invariant1.
Require Export DistributedReferenceCounting.machine2.invariant2.
Require Export DistributedReferenceCounting.machine2.invariant3.
Require Export DistributedReferenceCounting.machine2.invariant4.
Unset Standard Proposition Elimination Names.
(* changes: only a few changes in ancestor_not_reflexive for transition  6 ,  where n0->n1, n1-> n2, n2-> n3. *)
Section INVARIANT6.
Variable c0 : Config.
Fixpoint inc_dec_in_queue (s : Site) (q : queue Message) {struct q} : Prop :=
match q with
| empty => False
| input (inc_dec s2) q' =>
if eq_site_dec s2 s then True else False
| input _ q' => inc_dec_in_queue s q'
end.
(* note that the contrary is not true ! *)

Lemma inc_dec_queue_equal :
forall (q : queue Message) (s1 s2 : Site),
inc_dec_in_queue s1 q -> inc_dec_in_queue s2 q -> s1 = s2.