(* 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.machine4.invariant6.

Unset Standard Proposition Elimination Names.

(* Minute changes
   - in 1, deleted n0
   - in 6, added n0 in initial Intros
     n0->n1, n1->2
   - optim1 and optim2

*)



Lemma parent_invariant_inductive_optim1 :
 forall (c : Config) (t : class_trans c) (s1 s2 : Site) 
   (q : queue Message) (n : s1 <> s2)
   (e : bm c s1 owner = input Message dec (input Message (inc_dec s2) q)),
 legal c ->
 (legal c ->
  forall s : Site,
  indirect_son1 c s -> exists s0 : Site, direct_son c s0 /\ ancestor c s0 s) ->
 legal (transition c (redirect_inc c s1 s2 q n e)) ->
 forall s : Site,
 indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s ->
 exists s0 : Site,
   direct_son (transition c (redirect_inc c s1 s2 q n e)) s0 /\
   ancestor (transition c (redirect_inc c s1 s2 q n e)) s0 s.
Proof.
(* Goal: forall (c : Config) (_ : class_trans c) (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s0 : Site => and (direct_son c s0) (ancestor c s0 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s0 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s0) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s0 s)) *)
  intro; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s1 s2 : Site) (q : queue Message) (_ : not (@eq Site s1 s2)) (_ : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s0 : Site => and (direct_son c s0) (ancestor c s0 s))) (_ : legal (redirect_inc_trans c s1 s2 q)) (s : Site) (_ : indirect_son1 (redirect_inc_trans c s1 s2 q) s), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  intros s1 s2 q n e H H0 Hnext; intros.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  elim (decide_rt c s1); intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy1_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy1_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3; intros; apply direct_son_intro; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: False *)
(* Goal: or (not (@eq Site s1 s0)) (not (@eq Site s2 owner)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  rewrite H8 in H6.
(* Goal: False *)
(* Goal: or (not (@eq Site s1 s0)) (not (@eq Site s2 owner)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  rewrite H6 in a.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8 in a; rewrite a in H6; discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s4 (Post_message Message dec (change_queue (queue Message) (bm c) s1 owner q) s1 s2 s5 owner) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  cut (s1 <> s5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8 in a; rewrite a in H6; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message dec (change_queue (queue Message) (bm c) s1 owner q) s1 s2 s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  cut (s1 <> s6).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H10 in a; rewrite a in H8; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H3; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H4; simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize H3; simpl in |- *; intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Post_message Message dec (change_queue (queue Message) (bm c) s1 owner q) s1 s2 s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  cut (s0 <> s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H6 in H5; rewrite H5 in a; discriminate.
  
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
  elim (decide_direct_son (redirect_inc_trans c s1 s2 q) s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_ancestor c x s s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s1 <> s).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; elim H6; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (direct_son c s1), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  split with s1.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s1 s *)
(* Goal: not (@eq Site s1 s) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize e H6 a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H7; intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H8; simpl in |- *; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s4 owner s5 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s1) (_ : parent c s1 s0) (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s0 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s4 <> s5).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s4 s5) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s0 s2 q) s0 s4 *)
(* Goal: not (@eq Site s1 s) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  apply not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: False *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H9.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s6 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H11.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H10; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: not (@eq Site s1 s) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize a.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s1 s0) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  inversion a0.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  elim H8.
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (bm (redirect_inc_trans c s1 s2 q) s0 owner)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite <- H13.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s4 (bm (redirect_inc_trans c s1 s2 q) s1 owner)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize (H11 s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  decompose [and] H5.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H6 H7.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_site_dec s1 s0); intro.
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite e0 in e.
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite e in H10.
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 owner q s0 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (H10 s2).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_site_dec s2 s2); intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim n0; auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  decompose [and] H5.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H6 H7.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s0 s3 *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall (_ : not (@eq Site s1 s4)) (_ : not (ancestor c s1 s4)), ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0) (_ : not (@eq Site s1 s0)) (_ : not (ancestor c s1 s0)), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H9 H10.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H8; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: False *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H9.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Site s6 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H12.
(* Goal: ancestor c s1 s4 *)
(* Goal: not (ancestor c s1 s3) *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite H13.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Site s6 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H12.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H11 H12.
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H10.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H5; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  apply (H5 s2).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite e; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  generalize H3; simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H4; simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim (H6 s3); auto.
  
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  apply (H6 s2).
(* Goal: inc_dec_in_queue s2 (bm c s0 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (redirect_inc_trans c s1 s2 q) s1), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite H7; rewrite e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s1 <> owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (direct_or_indirect_son1 (redirect_inc_trans c s1 s2 q) s1 H2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim b0; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  inversion b1.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  elim (decide_inc_dec_in_queue (redirect_inc_trans c s1 s2 q) s1); intro.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (direct_or_indirect_son1 (redirect_inc_trans c s1 s2 q) x).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.

(* from here *)

(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
intros.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
elim (decide_ancestor c x0 s s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
intro.


(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
split.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
elim H8; intro.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
rewrite <- H9; auto.

(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
generalize p; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
rewrite H9; auto.

(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply long_inv with (s1 := s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
apply parent_intro; auto.

(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
generalize H9.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H9; intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
generalize H11; elim H10; intros.
(* Goal: not (@eq Site s6 s5) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : forall _ : ancestor c s3 s1, ancestor (redirect_inc_trans c s3 s2 q) s3 s1) (_ : parent c s1 s0) (_ : ancestor c s3 s0), ancestor (redirect_inc_trans c s3 s2 q) s3 s0 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
cut (s5 <> s6).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply long with (s1 := s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
apply H11; auto.

(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)), ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0) (_ : and (not (@eq Site s1 s0)) (not (ancestor c s1 s0))), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
generalize H13.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H12; intros.
(* Goal: not (@eq Site s7 s3) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
cut (s3 <> s7).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
intro.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
simpl in |- *; auto.

(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
intro.


(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
split with x0.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
decompose [and] H7.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
split.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H9; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply direct_son_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
left; unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
elim (H13 s2); rewrite H14; rewrite e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
case (eq_site_dec s2 s2); intro; auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
generalize H8.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H10; intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
apply short.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s3 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
generalize H12.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H11; intros.
(* Goal: and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)) *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
decompose [and] H15.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply long with (s1 := s4).
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply H12.
(* Goal: and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)) *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
decompose [and] H14.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
split.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
elim H16.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
rewrite H17; apply short; auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
elim H16.
(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply long with (s1 := s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
generalize H14; elim H13; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
left; decompose [and] H17; auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
decompose [and] H7; auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
decompose [and] H7; auto.

(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
apply indirect_son1_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: False *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply (H8 s2).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
case (eq_site_dec s2 s2); intro; auto.


(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
elim H1; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
generalize H8; simpl in |- *; auto.

(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
elim H9; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
simpl in |- *.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
apply inc_dec_not_in_post.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
case (eq_site_dec s1 s3); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: False *)
(* Goal: not (inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 owner q s3 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply (H10 s2); rewrite <- e0.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
rewrite e; simpl in |- *; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
case (eq_site_dec s2 s2); intro; auto.

(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
rewrite other_queue.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
unfold not in |- *; intro.
(* Goal: False *)
(* Goal: or (not (@eq Site s3 s1)) (not (@eq Site owner owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
apply (H10 s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
auto.

(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
intro; discriminate.

(* to here *)  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H0 H x).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (decide_ancestor c x1 s s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  decompose [and] H7.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  split with x0.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H10; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s3 s1) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim b1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim H17.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_site_dec s1 s5); intro.
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (H14 s2).
(* Goal: inc_dec_in_queue s2 (bm c s3 owner) *)
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite H18; rewrite <- e0.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: not (inc_dec_in_queue s6 (bm c s5 owner)) *)
(* Goal: or (not (@eq Site s5 s1)) (not (@eq Site owner owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite <- H18.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize (parent_intro (redirect_inc_trans c s1 s2 q) x s1 b p).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (ancestor (redirect_inc_trans c s1 s2 q) x0 s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s4 s) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H9.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite <- H14; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply ancestor_transitive with (s2 := s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (bm c s6 owner)))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H14.
(* Goal: False *)
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 (input Message m q)) (_ : @eq (exc Message) (first Message (input Message m q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s4 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s4 (input Message d (input Message m q))) (_ : @eq (exc Message) (first Message (input Message d (input Message m q))) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s4 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H14.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (redirect_inc_trans c s3 s2 q) s3 s4 *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : forall _ : ancestor c s3 s1, ancestor (redirect_inc_trans c s3 s2 q) s3 s1) (_ : parent c s1 s0) (_ : ancestor c s3 s0), ancestor (redirect_inc_trans c s3 s2 q) s3 s0 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H16.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H15; simpl in |- *; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s6 s5) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : forall _ : ancestor c s3 s1, ancestor (redirect_inc_trans c s3 s2 q) s3 s1) (_ : parent c s1 s0) (_ : ancestor c s3 s0), ancestor (redirect_inc_trans c s3 s2 q) s3 s0 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s5 <> s6).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long with (s1 := s4).
(* Goal: ancestor (redirect_inc_trans c s3 s2 q) s3 s4 *)
(* Goal: parent (redirect_inc_trans c s3 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply H16.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (redirect_inc_trans c s3 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H15 H17.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim H17.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s7 s3) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s3 <> s7).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor c s3 s7 *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long with (s1 := s6).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: ancestor (rec_copy2_trans c s2) x0 s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := x).
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x0 x *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (ancestor (redirect_inc_trans c s1 s2 q) x s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)), ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0) (_ : and (not (@eq Site s1 s0)) (not (ancestor c s1 s0))), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H13.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H15.
(* Goal: False *)
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 (input Message m q)) (_ : @eq (exc Message) (first Message (input Message m q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s4 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s4 (input Message d (input Message m q))) (_ : @eq (exc Message) (first Message (input Message d (input Message m q))) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s4 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H14.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s5 s6 *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : ancestor (redirect_inc_trans c s1 s2 q) s4 s1, ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0) (_ : ancestor (redirect_inc_trans c s1 s2 q) s0 s1), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s6 <> s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s7 s1) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply ancestor_not_reflexive with (c := redirect_inc_trans c s1 s2 q).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long with (s1 := s4).
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply H15.
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s4 s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long_inv with (s1 := s5).
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H17.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H16; intros.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s6 s7 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s7 <> s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s7 s1) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply ancestor_not_reflexive with (c := redirect_inc_trans c s1 s2 q).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H17.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H16; intros.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s6 s7 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (s7 <> s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s7 s1) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) x s1 *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply ancestor_not_reflexive with (c := redirect_inc_trans c s1 s2 q).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  split with x1.
(* Goal: and (direct_son (redirect_inc_trans c s1 s2 q) x1) (ancestor (redirect_inc_trans c s1 s2 q) x1 s) *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  decompose [and] H8.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H10; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s3 s1) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim b1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim H17.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_site_dec s1 s5); intro.
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim (H14 s2).
(* Goal: inc_dec_in_queue s2 (bm c s3 owner) *)
(* Goal: not (inc_dec_in_queue s6 (change_queue (queue Message) (bm c) s1 owner q s5 owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite H18; rewrite <- e0.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: not (inc_dec_in_queue s6 (bm c s5 owner)) *)
(* Goal: or (not (@eq Site s5 s1)) (not (@eq Site owner owner)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  rewrite <- H18.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H9.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)), ancestor (redirect_inc_trans c s1 s2 q) s3 s4) (_ : parent c s4 s0) (_ : and (not (@eq Site s1 s0)) (not (ancestor c s1 s0))), ancestor (redirect_inc_trans c s1 s2 q) s3 s0 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H13.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H12; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; decompose [and] H16; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long with (s1 := s4).
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply H13.
(* Goal: and (not (@eq Site s1 s4)) (not (ancestor c s1 s4)) *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  decompose [and] H15.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim H17.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite H18; apply short; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  elim H17.
(* Goal: ancestor c s1 s5 *)
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply long with (s1 := s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (redirect_inc_trans c s1 s2 q) s4 s5 *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize H15.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H14; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply parent_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; decompose [and] H18; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  decompose [and] H8; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  decompose [and] H8; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply (H9 s2); rewrite e; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize b1; elim H1; simpl in |- *; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply indirect_son1_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_site_dec s3 s1); intro.
(* Goal: False *)
(* Goal: False *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply (H11 s2).
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite e; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  case (eq_site_dec s2 s2); intro; auto.
  
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H10.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold not in |- *; intro; elim (H11 s4); auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (x <> s1).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim b2; simpl in |- *; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  apply indirect_son1_intro; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  elim H9; intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold not in |- *; intro; elim (H11 s4); auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: not (@eq Site x s1) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply not_reflexive with (c := redirect_inc_trans c s1 s2 q).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site x owner) *)
(* Goal: Z.gt (st c x) Z0 *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply (not_owner_inc3 (redirect_inc_trans c s1 s2 q) s1 owner).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: @eq bool (rt c x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply st_rt.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site x owner) *)
(* Goal: Z.gt (st c x) Z0 *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply (not_owner_inc3 (redirect_inc_trans c s1 s2 q) s1 owner).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: Z.gt (st c x) Z0 *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  cut (st (redirect_inc_trans c s1 s2 q) x > 0)%Z.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: Z.gt (st (redirect_inc_trans c s1 s2 q) x) Z0 *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  apply positive_st with (s5 := s1).
  apply
   not_owner_inc3
    with (c := redirect_inc_trans c s1 s2 q) (s1 := s1) (s2 := owner).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q)), False *)
  rewrite H2; rewrite empty_q_to_me.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q)), False *)
  rewrite H2; rewrite empty_q_to_me.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
Qed.



Lemma parent_invariant_inductive :
 forall (c : Config) (t : class_trans c),
 legal c ->
 (legal c ->
  forall s : Site,
  indirect_son1 c s -> exists s1 : Site, direct_son c s1 /\ ancestor c s1 s) ->
 legal (transition c t) ->
 forall s : Site,
 indirect_son1 (transition c t) s ->
 exists s1 : Site,
   direct_son (transition c t) s1 /\ ancestor (transition c t) s1 s.

Proof.
  
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simple induction t.
  
  (*  1 *)
  
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s1 s2 n a H H0 Hnext; intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy1_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy1_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3; intros; apply direct_son_intro; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_trans c s1 s2) s0 s4 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq (exc Message) (first Message (bm c s1 s2)) (value Message dec)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_dec c s1 s2 e))) (s : Site) (_ : indirect_son1 (transition c (receive_dec c s1 s2 e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_dec c s1 s2 e)) s3) (ancestor (transition c (receive_dec c s1 s2 e)) s3 s)) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (long (copy_trans c s1 s2) s0 s3 s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @eq bool (rt c s0) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s1 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec s1 s0 s2 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] a0.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Post_message Message copy (bm c) s1 s2 s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Post_message Message copy (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s2 : Site) (e : @eq (exc Message) (first Message (bm c s1 s2)) (value Message dec)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_dec c s1 s2 e))) (s : Site) (_ : indirect_son1 (transition c (receive_dec c s1 s2 e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_dec c s1 s2 e)) s3) (ancestor (transition c (receive_dec c s1 s2 e)) s3 s)) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H5; rewrite H6.
(* Goal: forall _ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) owner s0) s0 owner s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s2 s0)) (not (@eq Site s1 owner))) (_ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_here.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
  
  (*  2  *)
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s1 s2 e H H0 Hnext; intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: ancestor (rec_dec_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_collect with (m := dec).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s0 (Collect_message Message (bm c) s1 s2 s3 owner) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : ancestor (rec_dec_trans c s1 s2) s3 s4) (_ : parent c s4 s0), ancestor (rec_dec_trans c s1 s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_collect with (m := dec).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_dec_trans c s1 s2) s0 s4 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (long (rec_dec_trans c s1 s2) s0 s3 s4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: inc_dec_in_queue s0 (Collect_message Message (bm c) s1 s2 s3 owner) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : ancestor (rec_dec_trans c s1 s2) s3 s4) (_ : parent c s4 s0), ancestor (rec_dec_trans c s1 s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; apply inc_dec_in_collect with (m := dec).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: @eq bool (rt c s0) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s1 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec s1 s0 s2 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H6; rewrite H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_here.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : inc_dec_in_queue s3 (first_out Message (bm c s0 owner)), False *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (inc_dec_not_in_first_out (bm c s0 owner) dec s3).
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H9.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite <- H6; rewrite <- H5; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : inc_dec_in_queue s3 (bm c s0 owner), False *)
(* Goal: inc_dec_in_queue s3 (first_out Message (bm c s0 owner)) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : not (forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s1 s3 : Site) (e : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s2 : Site => and (direct_son c s2) (ancestor c s2 s))) (_ : legal (transition c (receive_inc c s1 s3 e))) (s : Site) (_ : indirect_son1 (transition c (receive_inc c s1 s3 e)) s), @ex Site (fun s2 : Site => and (direct_son (transition c (receive_inc c s1 s3 e)) s2) (ancestor (transition c (receive_inc c s1 s3 e)) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (H8 s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.

(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
  (* 3 *)
  
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s1 s3 e H H0 Hnext; intros.
  
(* Goal: @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_rt c s1).
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy1_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy1_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3; intros; apply direct_son_intro; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s1 s0) *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : @eq bool (rt c s1) true, @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (not_inc_dec_in (bm c s0 owner) H7).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner)) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s *)
(* Goal: indirect_son1 c s *)
  elim (H8 s3).
(* Goal: In_queue Message (inc_dec s3) (bm c s2 owner) *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply first_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite <- H9; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  intros; apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
  apply
   (inc_dec_in_post (Collect_message Message (bm c) s1 owner) s5 s4 owner s3).
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : @eq bool (rt c s1) true, @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8 in a.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite a in H6; discriminate.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s4 *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s0).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  intros; apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
  apply
   (inc_dec_in_post (Collect_message Message (bm c) s1 owner) s6 s5 owner s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : @eq bool (rt c s1) true, @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H10 in a.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite a in H8; discriminate.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  generalize H3; simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H4; simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H3; simpl in |- *.
(* Goal: forall _ : @eq bool (rt c s0) true, False *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : @eq bool (rt c s1) true, @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H5; rewrite a; auto with bool.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro HA.
  
  
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
  
(* Goal: @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_ancestor c x s s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_direct_son (rec_inc_trans c s1 s3) s1).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (direct_son c s1), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  split with s1.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H1.
(* Goal: forall _ : indirect_son1 (rec_inc_trans c s1 s3) s, ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (@eq Site s1 s), ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- e0.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e0.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_inc_trans c s0 s3) s0 s0 *)
(* Goal: forall _ : not (@eq Site s1 s), ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H8 e0 e1.
(* Goal: not (@eq Site s4 s) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H9.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s6 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H12.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_inc_trans c s0 s3) s2 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s), ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e1; rewrite <- e2.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall (_ : False) (_ : @eq (exc Message) (error Message) (value Message (inc_dec s3))) (_ : not (forall _ : Site, not False)), False *)
(* Goal: forall (d : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 q) (_ : @eq (exc Message) (first Message q) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s4 (first_out Message q)) (_ : inc_dec_in_queue s4 (input Message d q)) (_ : @eq (exc Message) (first Message (input Message d q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s4 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intuition.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: ancestor (rec_inc_trans c s1 s3) s1 s *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize a e.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  elim H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (rec_inc_trans c s0 s3) s0 s2 *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s1) (_ : parent c s1 s0) (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s0 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize a0 e0.
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s4 owner s5 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s1) (_ : parent c s1 s0) (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s0 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s4 <> s5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s4 s5) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s1) (_ : parent c s1 s0) (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s0 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (not_reflexive c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s4 s5) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s1) (_ : parent c s1 s0) (_ : direct_son (rec_inc_trans c s2 s3) s2) (_ : @eq (exc Message) (first Message (bm c s2 owner)) (value Message (inc_dec s3))), ancestor (rec_inc_trans c s2 s3) s2 s0 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (not_reflexive c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_inc_trans c s2 s3) s2 s4 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (long (rec_inc_trans c s2 s3) s2 s0 s4).
(* Goal: ancestor (rec_copy3_trans c s1 s2) s0 s3 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H8.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (rec_inc_trans c s2 s3) s0 s4 *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H7 a0 e0.
(* Goal: not (@eq Site s4 s) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H9.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (parent_intro c s5 s6 H10 H11).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (long c s2 s5 s6 H12 H13).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s2 s6) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: forall _ : not (direct_son (rec_inc_trans c s1 s3) s1), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_not_reflexive with (c := c).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
  
(* Goal: and (direct_son (rec_inc_trans c s1 s3) x) (ancestor (rec_inc_trans c s1 s3) x s) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (direct_or_indirect_son1 (rec_inc_trans c s1 s3) s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; elim b; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize b0; elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s0 owner)) *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s0).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall (_ : not (@eq Site s1 s0)) (s2 : Site), not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s0 owner)) *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (H8 s2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H10.
(* Goal: inc_dec_in_queue s2 (bm c s0 owner) *)
(* Goal: forall (_ : not (@eq Site s1 s0)) (s2 : Site), not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s0 owner)) *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_collect2 (bm c) (inc_dec s3) s0 s1 owner s2).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite e0; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize b0; elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  generalize b1; elim H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec owner s5 s3 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: False *)
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s0 owner)) *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3)), inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall _ : or (not (@eq Site owner s5)) (not (@eq Site s3 owner)), inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0; rewrite <- H9.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c owner owner)) (value Message (inc_dec s3)), False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite empty_q_to_me.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall _ : or (not (@eq Site owner s5)) (not (@eq Site s3 owner)), inc_dec_in_queue s4 (Post_message Message dec (Collect_message Message (bm c) s1 owner) owner s3 s5 owner) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H10; rewrite H9.
(* Goal: forall _ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) owner s0) s0 owner s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s2 s0)) (not (@eq Site s1 owner))) (_ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_here.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  generalize H8; rewrite H9; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e0.
(* Goal: forall _ : @eq Site s1 s5, inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize o.
(* Goal: forall (_ : or (not (@eq Site owner s5)) (not (@eq Site s3 owner))) (_ : @eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim b2.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s6 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H11.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s7 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e1.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: False *)
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s0 owner)) *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  generalize H8.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_here.
(* Goal: forall (_ : inc_dec_in_queue s4 (bm c s5 owner)) (_ : @eq (exc Message) (first Message (bm c s5 owner)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (bm c s5 owner))))), inc_dec_in_queue s4 (first_out Message (bm c s5 owner)) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (bm c s5 owner).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (_ : False) (_ : @eq (exc Message) (error Message) (value Message (inc_dec s3))) (_ : not (forall _ : Site, not False)), False *)
(* Goal: forall (d : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 q) (_ : @eq (exc Message) (first Message q) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s4 (first_out Message q)) (_ : inc_dec_in_queue s4 (input Message d q)) (_ : @eq (exc Message) (first Message (input Message d q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s4 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intuition.
  
(* Goal: forall (d : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s5 q) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s5 (first_out Message q)) (_ : inc_dec_in_queue s5 (input Message d q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s5 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intros d q.
(* Goal: forall (_ : forall (_ : inc_dec_in_queue s5 q) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s5 (first_out Message q)) (_ : inc_dec_in_queue s5 (input Message d q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s5 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case q.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: False *)
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 (input Message m q)) (_ : @eq (exc Message) (first Message (input Message m q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s4 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s4 (input Message d (input Message m q))) (_ : @eq (exc Message) (first Message (input Message d (input Message m q))) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s4 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H14.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not False *)
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 (input Message m q)) (_ : @eq (exc Message) (first Message (input Message m q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s4 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s4 (input Message d (input Message m q))) (_ : @eq (exc Message) (first Message (input Message d (input Message m q))) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s4 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; contradiction.
  
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s5 (input Message m q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s5 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s5 (input Message d (input Message m q))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s5 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case d.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s4 *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s0).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (H7 b1); intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: False *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  elim H8.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
  apply
   (inc_dec_in_post (Collect_message Message (bm c) s1 owner) s6 s5 owner s3).
(* Goal: inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s6).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0; rewrite collect_here.
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  generalize H10.
(* Goal: not (@eq Site s3 s1) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) x1 s *)
(* Goal: direct_son c x1 *)
(* Goal: ancestor c x1 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  generalize e0; elim b1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H13; rewrite post_elsewhere.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s7 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e1.
(* Goal: forall _ : not (forall s2 : Site, not (inc_dec_in_queue s2 (Collect_message Message (bm c) s1 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e0.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_here.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (bm c s6 owner)))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H14.
(* Goal: forall (_ : inc_dec_in_queue s5 (bm c s6 owner)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (bm c s6 owner))))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (bm c s6 owner).
(* Goal: forall (_ : False) (_ : @eq (exc Message) (error Message) (value Message (inc_dec s3))) (_ : not (forall _ : Site, not False)), False *)
(* Goal: forall (d : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 q) (_ : @eq (exc Message) (first Message q) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s4 (first_out Message q)) (_ : inc_dec_in_queue s4 (input Message d q)) (_ : @eq (exc Message) (first Message (input Message d q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s4 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; intuition.
  
(* Goal: forall (d : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s5 q) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s5 (first_out Message q)) (_ : inc_dec_in_queue s5 (input Message d q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s5 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intros d q.
(* Goal: forall (_ : forall (_ : inc_dec_in_queue s5 q) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message q)))), inc_dec_in_queue s5 (first_out Message q)) (_ : inc_dec_in_queue s5 (input Message d q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d q))))), inc_dec_in_queue s5 (first_out Message (input Message d q)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case q.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not False *)
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s4 (input Message m q)) (_ : @eq (exc Message) (first Message (input Message m q)) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s4 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s4 (input Message d (input Message m q))) (_ : @eq (exc Message) (first Message (input Message d (input Message m q))) (value Message (inc_dec s3))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s4 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s6)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H17; intro; unfold not in |- *; intro; contradiction.
  
(* Goal: forall (m : Message) (q : queue Message) (_ : forall (_ : inc_dec_in_queue s5 (input Message m q)) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message m q))))), inc_dec_in_queue s5 (first_out Message (input Message m q))) (_ : inc_dec_in_queue s5 (input Message d (input Message m q))) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (input Message d (input Message m q)))))), inc_dec_in_queue s5 (first_out Message (input Message d (input Message m q))) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case d.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H6.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c owner owner)) (value Message (inc_dec s3)), False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite empty_q_to_me.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : ancestor c s1 s, @eq bool (rt c s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H6.
(* Goal: @eq bool (rt c s) true *)
(* Goal: forall _ : ancestor c s1 s, @eq bool (rt c s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_rt2 with (s1 := x).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply ancestor_rt with (s2 := s).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H6.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c owner owner)) (value Message (inc_dec s3)), False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite empty_q_to_me.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_inc_trans c s1 s3) x *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4 H5.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (not_inc_dec_in (bm c s0 owner) H8).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: or (not (@eq Site owner s0)) (not (@eq Site s3 owner)) *)
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H11.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H12 s3).
(* Goal: In_queue Message (inc_dec s3) (bm c s2 owner) *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply first_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
  (* ancestor *)
  
(* Goal: ancestor (rec_inc_trans c s1 s3) x s *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H5.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  generalize H7; elim H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
  apply
   (inc_dec_in_post (Collect_message Message (bm c) s1 owner) s5 s4 owner s3).
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  decompose [and] H10; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor c s1 s4 *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s0).
(* Goal: ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H7.
  
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: not (ancestor c s1 s0) *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H9.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite H12; apply short; auto.
  
(* Goal: not (ancestor c s1 s0) *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H9.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: ancestor c s1 s4 *)
(* Goal: parent (rec_inc_trans c s1 s3) s0 s4 *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s0).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: False *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize H9; elim H8.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
  apply
   (inc_dec_in_post (Collect_message Message (bm c) s1 owner) s6 s5 owner s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; decompose [and] H12; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H5.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c owner owner)) (value Message (inc_dec s3)), False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite empty_q_to_me.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (not_inc_dec_in (bm c s1 owner) H5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (H6 s3).
(* Goal: forall _ : not (In_queue Message (inc_dec s3) (bm c s1 owner)), False *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H6 s3).
(* Goal: In_queue Message (inc_dec s3) (bm c s2 owner) *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply first_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
  (* from here *)
  
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_direct_son c s).
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H2 H3 H4; elim a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H10.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s0 owner)) *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c s1 owner)) (value Message (inc_dec s3)), False *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H11.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (not_inc_dec_in (bm c s2 owner) H7).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H12 s3).
(* Goal: In_queue Message (inc_dec s3) (bm c s2 owner) *)
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (direct_son c s), indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply first_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s owner) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (direct_or_indirect_son1 c s).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; elim b; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim H1; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim H1; auto.
  
  
  
  (* 4 *)
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s1 s2 e e0 H H0 Hnext; intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy1_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy1_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3; intros; apply direct_son_intro; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_collect with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 s2 s5 owner) *)
(* Goal: or (not (@eq Site s2 s5)) (not (@eq Site owner owner)) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : not (@eq Site s2 s4), ancestor (rec_copy3_trans c s1 s2) s3 s4) (_ : parent c s4 s0) (_ : not (@eq Site s2 s0)), ancestor (rec_copy3_trans c s1 s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_collect with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: inc_dec_in_queue s5 (Collect_message Message (bm c) s1 s2 s6 owner) *)
(* Goal: or (not (@eq Site s2 s6)) (not (@eq Site owner owner)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_collect (bm c) s6 s1 s2 s5 copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: @eq bool (rt c s0) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s1 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (H6 s3).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  generalize H8.
(* Goal: forall _ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec s2 s0 s1 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9; rewrite H10.
(* Goal: forall _ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) owner s0) s0 owner s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s2 s0)) (not (@eq Site s1 owner))) (_ : inc_dec_in_queue s3 (Post_message Message dec (Collect_message Message (bm c) s1 s2) s2 s1 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_here.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  right; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec s1 s0 s2 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9; rewrite H10.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s0 owner s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (inc_dec_in_collect2 (bm c) copy s0 s0 owner s3).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H11.
(* Goal: @eq (exc Message) (first Message (bm c s0 owner)) (value Message copy) *)
(* Goal: inc_dec_in_queue s3 (Collect_message Message (bm c) s0 owner s0 owner) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (_ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H10; rewrite <- H9.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
  (* 5 *)
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s2 e e0 H H0 Hnext; intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (direct_or_indirect_son1 (rec_copy2_trans c s2) s2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s0 owner)) *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s3 (Collect_message Message (bm c) owner s2 s4 owner) *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : ancestor (rec_copy2_trans c s2) s3 s1) (_ : parent c s1 s0), ancestor (rec_copy2_trans c s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec owner s4 s2 owner).
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; decompose [and] a0.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9 in e.
(* Goal: inc_dec_in_queue s3 (Collect_message Message (bm c) owner s2 s4 owner) *)
(* Goal: forall _ : or (not (@eq Site owner s4)) (not (@eq Site s2 owner)), inc_dec_in_queue s3 (Collect_message Message (bm c) owner s2 s4 owner) *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : ancestor (rec_copy2_trans c s2) s3 s1) (_ : parent c s1 s0), ancestor (rec_copy2_trans c s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H8 in H6.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H6 in e; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; rewrite collect_elsewhere; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (delete_trans c s) s2 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H10; rewrite H8; discriminate.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_queue_dec owner s5 s2 owner); intro.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) owner s2 s5 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] a0.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H11 in e; rewrite <- H10 in H8; rewrite e in H8; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s2 <> s).
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  generalize H3; simpl in |- *; unfold Set_rec_table in |- *;
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
   rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H4; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H2 in H1.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H2 a; elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H6 H5; elim a0; intros.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s) s0 owner)) *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H10.
(* Goal: forall s2 : Site, not (inc_dec_in_queue s2 (bm (rec_copy2_trans c s) s1 owner)) *)
(* Goal: forall _ : indirect_son1 (rec_copy2_trans c s2) s2, @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H2.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s2 s).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_inc_dec_in_queue (rec_copy2_trans c s2) s2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_direct_son c x).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy2_trans c s2) x *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s2 <> x).
(* Goal: forall _ : not (@eq Site s2 x), direct_son (rec_copy2_trans c s2) x *)
(* Goal: not (@eq Site s2 x) *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim a0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: ancestor (rec_copy2_trans c s2) x s *)
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H2 in a0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e; elim a0; intros.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e2 in H4; discriminate.
  
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: inc_dec_in_queue x (bm (rec_copy2_trans c s2) s owner) *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- e1.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: @eq bool (Set_rec_table (rt c) s2 s2) true *)
(* Goal: inc_dec_in_queue x (bm (rec_copy2_trans c s2) s2 owner) *)
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold Set_rec_table in |- *; rewrite that_site.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (direct_son c x), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro HA.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H0 H x).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  split with x0.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy2_trans c s2) x0 *)
(* Goal: ancestor (rec_copy2_trans c s2) x0 s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s2 <> x0).
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H8; rewrite H6; auto with bool.
  
(* Goal: ancestor (rec_copy2_trans c s2) x0 s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := x).
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e; rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  right; unfold not in |- *; intro; generalize e0.
(* Goal: forall _ : @eq (exc Message) (first Message (bm c owner owner)) (value Message (inc_dec s3)), False *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite empty_q_to_me.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  simpl in |- *; discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (delete_trans c s) s2 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  intros; apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: inc_dec_in_queue s4 (bm (rec_copy2_trans c s2) s5 owner) *)
(* Goal: parent (rec_copy2_trans c s2) x s *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H10; rewrite H8; auto with bool.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; rewrite collect_elsewhere; auto.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  right; unfold not in |- *; intro; generalize e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H10; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite <- e1; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite that_site; auto.
  
(* Goal: inc_dec_in_queue x (bm (rec_copy2_trans c s2) s owner) *)
(* Goal: indirect_son1 c x *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- e1.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (inc_dec_in_queue x (bm c s2 owner)).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site x owner) *)
(* Goal: inc_dec_in_queue x (bm c s2 owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (inc_dec_in x (bm c s2 owner) H2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (not_owner_inc3 c s2 owner H x H3); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (positive_st c x s2 H4 H H3); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (st_rt c x H H4 H5); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c x owner))) *)
(* Goal: inc_dec_in_queue x (bm c s2 owner) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (direct_or_indirect_son1 c x H4 H6).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; elim HA; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site s1 s2) *)
(* Goal: forall (sa sb : Site) (_ : ancestor c sa sb) (_ : not (@eq Site sb s2)), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim b0.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize p; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e0; rewrite H2; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site x owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (inc_dec_in_queue x (bm c s2 owner)).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (@eq Site x owner) *)
(* Goal: inc_dec_in_queue x (bm c s2 owner) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (inc_dec_in x (bm c s2 owner) H2).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (not_owner_inc3 c s2 owner H x H3); intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize p; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: or (not (@eq Site owner s2)) (not (@eq Site s2 owner)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e0; rewrite H2; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e1; elim b; intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite e1; rewrite <- e2; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize n; elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  generalize n0; elim H5; intros; apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite collect_elsewhere; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  right; unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e0; rewrite H8; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (delete_trans c s) s2 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s1).
(* Goal: ancestor (delete_trans c s) s2 s1 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e; elim H5; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e1; elim H8; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: not (@eq Site s2 s6) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e2; rewrite H11; rewrite H9; auto with bool.
  
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e1; elim H10.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s2 s8) *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *.
(* Goal: forall _ : @eq Site s2 s8, False *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; generalize e2.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H13; rewrite H11; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize n0; elim H7; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; rewrite collect_elsewhere; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  right; unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e0; rewrite H10; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize n; elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  generalize H3; simpl in |- *; unfold Set_rec_table in |- *;
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
   rewrite other_site; auto.
  
(* Goal: forall _ : inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner), inc_dec_in_queue s3 (bm c s0 owner) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site s1 owner)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4; simpl in |- *; rewrite collect_elsewhere.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  right; unfold not in |- *; intro; generalize e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H5; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H2; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite that_site; auto.
  
  (* 6 *)
  
  
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s1 s2 e n n0 e0 H H0 Hnext; intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s2 s).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (decide_direct_son c s1 n).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (direct_son c s1), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  split with s1.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : forall s1 : Site, not (inc_dec_in_queue s1 (bm (rec_copy2_trans c s2) s2 owner)), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s1 : Site => and (direct_son (rec_copy2_trans c s2) s1) (ancestor (rec_copy2_trans c s2) s1 s)) *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize e0; elim a.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall _ : @eq Site s2 s8, False *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e2.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H5; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s3 (Collect_message Message (bm c) s0 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: forall _ : not (direct_son c s1), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s2 owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e3; rewrite collect_here.
(* Goal: not (inc_dec_in_queue s3 (first_out Message (bm c s0 owner))) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (s3 : Site), not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_first_out with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite <- e3; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; rewrite collect_elsewhere; auto.
  
(* Goal: forall _ : @eq Site s2 s8, False *)
(* Goal: parent (rec_copy2_trans c s2) s1 s3 *)
(* Goal: indirect_son1 c s *)
(* Goal: not (@eq Site s2 owner) *)
(* Goal: @eq bool (rt (rec_copy2_trans c s2) s2) true *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro; generalize e2.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H5; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite <- e1; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite that_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite e1; rewrite post_here; simpl in |- *.
(* Goal: if eq_site_dec s1 s1 then True else False *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim n1; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (direct_or_indirect_son1 c s1 n).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; elim b; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H0 H s1 b0).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_queue_dec s1 s0 s2 owner).
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro; decompose [and] a.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (Collect_message Message (bm c) s6 owner s6 owner))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H9; rewrite collect_here.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s3 (first_out Message (bm c s0 owner))) *)
(* Goal: forall (_ : or (not (@eq Site s1 s0)) (not (@eq Site s2 owner))) (s3 : Site), not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_first_out with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite <- H8; rewrite <- H9; auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; rewrite collect_elsewhere; auto.
  
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left; unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: ancestor (delete_trans c s) s2 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s1).
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s1 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H4.
  (* I could not eliminate H5 directly cos sites were renamed
     in  (rec_copy3_trans c s1 s2) .
     So I generalize the term as follows.  *)
  cut
   (forall sa sb : Site,
    ancestor c sa sb -> sb <> s2 -> ancestor (rec_copy3_trans c s1 s2) sa sb).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s1 *)
(* Goal: forall (sa sb : Site) (_ : ancestor c sa sb) (_ : not (@eq Site sb s2)), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H5.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Site s1 s2) *)
(* Goal: forall (sa sb : Site) (_ : ancestor c sa sb) (_ : not (@eq Site sb s2)), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim b0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: forall (sa sb : Site) (_ : ancestor c sa sb) (_ : not (@eq Site sb s2)), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite <- H10; rewrite H8; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H6.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H5.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  intros; apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  generalize H8; elim H7; intros; apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 s2 s5 owner) *)
(* Goal: or (not (@eq Site s2 s5)) (not (@eq Site owner owner)) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : not (@eq Site s4 s2), ancestor (rec_copy3_trans c s1 s2) s3 s4) (_ : parent c s4 s0) (_ : not (@eq Site s0 s2)), ancestor (rec_copy3_trans c s1 s2) s3 s0 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_collect (bm c) s5 s1 s2 s4 copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: ancestor (rec_copy3_trans c s1 s2) s0 s3 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H8.
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (redirect_inc_trans c s1 s2 q) s3 s4 *)
(* Goal: ancestor (redirect_inc_trans c s1 s2 q) s3 s5 *)
(* Goal: direct_son c x0 *)
(* Goal: ancestor c x0 s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall _ : indirect_son1 (redirect_inc_trans c s1 s2 q) x, @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: not (@eq Site x owner) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) x) true *)
(* Goal: @ex Site (fun s0 : Site => and (direct_son (redirect_inc_trans c s1 s2 q) s0) (ancestor (redirect_inc_trans c s1 s2 q) s0 s)) *)
(* Goal: @eq bool (rt (redirect_inc_trans c s1 s2 q) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: not (@eq Site s1 owner) *)
  unfold not in |- *; intro; generalize H12.
(* Goal: forall _ : @eq bool (rt c s8) true, False *)
(* Goal: forall (s3 s1 s0 : Site) (_ : ancestor c s3 s1) (_ : not (@eq Site s1 s2)) (_ : parent c s1 s0), not (@eq Site s0 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H14; rewrite e; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H13; intros.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (first_out Message (bm c s6 owner)))), inc_dec_in_queue s5 (first_out Message (bm c s6 owner)) *)
(* Goal: or (not (@eq Site owner s7)) (not (@eq Site s3 owner)) *)
(* Goal: forall _ : not (@eq Site s1 s6), inc_dec_in_queue s5 (Collect_message Message (bm c) s1 owner s6 owner) *)
(* Goal: forall s4 : Site, not (@eq Message dec (inc_dec s4)) *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize H14.
(* Goal: forall _ : @eq bool (rt c s9) true, False *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H16; rewrite e; auto with bool.
  
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  generalize H10.
(* Goal: not (@eq Site s4 s) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H9.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: inc_dec_in_queue s5 (Collect_message Message (bm c) s1 s2 s6 owner) *)
(* Goal: or (not (@eq Site s2 s6)) (not (@eq Site owner owner)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_collect (bm c) s6 s1 s2 s5 copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite e1; unfold Set_rec_table in |- *; rewrite that_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite e1; rewrite post_here; simpl in |- *.
(* Goal: if eq_site_dec s1 s1 then True else False *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize e1; elim H1; simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner)).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (inc_dec_in s1 (bm (rec_copy3_trans c s1 s2) s2 owner) H5).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s1 <> owner).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (positive_st (rec_copy3_trans c s1 s2) s1 s2 H7 Hnext H6).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @eq bool (rt c s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: inc_dec_in_queue s1 (bm (rec_copy3_trans c s1 s2) s2 owner) *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize (st_rt (rec_copy3_trans c s1 s2) s1 Hnext H7 H8).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: forall _ : not (@eq Site s1 s5), inc_dec_in_queue s4 (Collect_message Message (bm c) s1 owner s5 owner) *)
(* Goal: or (not (@eq Site owner s5)) (not (@eq Site s3 owner)) *)
(* Goal: forall (s2 s4 s0 : Site) (_ : ancestor c s2 s4) (_ : forall _ : indirect_son1 (rec_inc_trans c s1 s3) s1, ancestor (rec_inc_trans c s1 s3) s2 s4) (_ : parent c s4 s0) (_ : indirect_son1 (rec_inc_trans c s1 s3) s1), ancestor (rec_inc_trans c s1 s3) s2 s0 *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: @eq bool (rt (rec_inc_trans c s1 s3) s1) true *)
(* Goal: not (@eq Site s1 owner) *)
(* Goal: forall _ : and (not (@eq Site s1 s)) (not (ancestor c s1 s)), @ex Site (fun s2 : Site => and (direct_son (rec_inc_trans c s1 s3) s2) (ancestor (rec_inc_trans c s1 s3) s2 s)) *)
(* Goal: direct_son c x *)
(* Goal: ancestor c x s *)
(* Goal: indirect_son1 c s1 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) true) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy1 c s1 s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy1 c s1 s2 e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy1 c s1 s2 e e0)) s3) (ancestor (transition c (receive_copy1 c s1 s2 e e0)) s3 s)) *)
(* Goal: forall (s2 : Site) (e : @eq bool (rt c s2) false) (e0 : @eq (exc Message) (first Message (bm c owner s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c (receive_copy2 c s2 e e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy2 c s2 e e0)) s), @ex Site (fun s1 : Site => and (direct_son (transition c (receive_copy2 c s2 e e0)) s1) (ancestor (transition c (receive_copy2 c s2 e e0)) s1 s)) *)
(* Goal: forall (s1 s2 : Site) (e : @eq bool (rt c s2) false) (n : not (@eq Site s1 owner)) (n0 : not (@eq Site s2 owner)) (e0 : @eq (exc Message) (first Message (bm c s1 s2)) (value Message copy)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (receive_copy3 c s1 s2 e n n0 e0))) (s : Site) (_ : indirect_son1 (transition c (receive_copy3 c s1 s2 e n n0 e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3) (ancestor (transition c (receive_copy3 c s1 s2 e n n0 e0)) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e0.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  rewrite H9; rewrite empty_q_to_me; simpl in |- *.
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite post_here; simpl in |- *; auto.
(* Goal: if eq_site_dec s1 s1 then True else False *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s1 s1).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
     (* ~s2=s *)
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_collect with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  left.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H8; rewrite H6; auto with bool.
  
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize n1.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize n2; elim H5; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: inc_dec_in_queue s4 (Collect_message Message (bm c) s1 s2 s5 owner) *)
(* Goal: or (not (@eq Site s2 s5)) (not (@eq Site owner owner)) *)
(* Goal: forall (s3 s4 s0 : Site) (_ : ancestor c s3 s4) (_ : forall _ : not (@eq Site s2 s4), ancestor (rec_copy3_trans c s1 s2) s3 s4) (_ : parent c s4 s0) (_ : not (@eq Site s2 s0)), ancestor (rec_copy3_trans c s1 s2) s3 s0 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_collect with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: ancestor (delete_trans c s) s2 s1 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H8; intros.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: not (@eq Site s2 s7) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H11; rewrite H9; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H10; intros.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall _ : @eq bool (rt c s2) false, False *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H13; rewrite H11; auto with bool.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize n2; elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite post_elsewhere.
(* Goal: inc_dec_in_queue s5 (Collect_message Message (bm c) s1 s2 s6 owner) *)
(* Goal: or (not (@eq Site s2 s6)) (not (@eq Site owner owner)) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_collect (bm c) s6 s1 s2 s5 copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize n1; elim H1; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H3; simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Set_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4; simpl in |- *.
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; rewrite post_elsewhere.
(* Goal: not (inc_dec_in_queue s3 (Collect_message Message (bm c) s1 s2 s0 owner)) *)
(* Goal: or (not (@eq Site s2 s0)) (not (@eq Site owner owner)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_collect with (m := copy).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  generalize (H5 s3); auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
  (* 7 *)
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros s e e0 n H H0 Hnext; intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim (H0 H s0).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son (delete_trans c s) s1) (ancestor (delete_trans c s) s1 s0)) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  decompose [and] H2.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: direct_son (delete_trans c s) x *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s <> x).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: direct_son (rec_copy3_trans c s1 s2) x *)
(* Goal: ancestor (rec_copy3_trans c s1 s2) x s *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H5; elim H3.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply direct_son_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold Reset_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: not (inc_dec_in_queue s2 (Post_message Message dec (bm c) s owner s1 owner)) *)
(* Goal: not (@eq Site s x) *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_not_in_post.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (ancestor_has_positive_st c H x s0 H4); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize H5; rewrite <- H6; rewrite e.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: False *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  omega.
  
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H1.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H6; elim H5; intros.
(* Goal: parent (delete_trans c s) s3 s4 *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s4 <> s).
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  intro; apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Reset_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite post_elsewhere; auto.
  
(* Goal: not (@eq Site s4 s) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H9.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : indirect_son1 (delete_trans c s) s1, ancestor (delete_trans c s) s2 s1) (_ : parent c s1 s0) (_ : indirect_son1 (delete_trans c s) s0), ancestor (delete_trans c s) s2 s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H13 in H11.
  generalize H11; unfold Reset_rec_table in |- *; rewrite that_site;
   auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: ancestor (delete_trans c s) s2 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply long with (s1 := s1).
(* Goal: ancestor (delete_trans c s) s2 s1 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply H6.
(* Goal: forall _ : not (@eq Site sb s2), ancestor (rec_copy3_trans c s1 s2) sa sb *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H7; elim H5.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: not (@eq Site s5 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H10.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s6 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s5) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (not_owner_inc3 c s7 owner H).
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Reset_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim H9; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (short c s5 s3 H10); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (ancestor_has_positive_st c H s5 s3 H11); intro.
(* Goal: not (@eq Site s s5) *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s5 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize e.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite H13; intro.
(* Goal: False *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite e1 in H12; omega.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H9; intros.
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (Post_message Message dec (bm c) s owner s7 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  case (eq_site_dec s s7).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite e1; rewrite post_here; simpl in |- *; auto.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : not (@eq Site s s7), not (forall s1 : Site, not (inc_dec_in_queue s1 (Post_message Message dec (bm c) s owner s7 owner))) *)
(* Goal: forall (s2 s1 s0 : Site) (_ : ancestor c s2 s1) (_ : forall _ : parent c s1 s3, indirect_son1 (delete_trans c s) s1) (_ : parent c s1 s0) (_ : parent c s0 s3), indirect_son1 (delete_trans c s) s0 *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (H13 s6).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: inc_dec_in_queue s5 (Post_message Message (inc_dec s1) (Collect_message Message (bm c) s1 s2) s2 owner s6 owner) *)
(* Goal: indirect_son1 c s *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; rewrite post_elsewhere.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  apply (H13 s6); auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  left; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
  
(* Goal: not (@eq Site s6 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H12.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: not (@eq Site s7 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (not_owner_inc3 c s8 owner H).
(* Goal: In_queue Message (inc_dec s7) (bm c s8 owner) *)
(* Goal: @eq bool (rt (delete_trans c s) s6) true *)
(* Goal: not (forall s1 : Site, not (inc_dec_in_queue s1 (bm (delete_trans c s) s6 owner))) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Reset_rec_table in |- *; rewrite other_site; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim H11; auto.
  
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (short c s6 s3 H12); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  generalize (ancestor_has_positive_st c H s6 s3 H13); intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: ancestor (delete_trans c s) x s0 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  rewrite H15 in e; rewrite e in H14; omega.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H11; intros.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  unfold not in |- *; intros.
(* Goal: False *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (H15 s7).
(* Goal: inc_dec_in_queue s7 (Post_message Message dec (bm c) s owner s8 owner) *)
(* Goal: parent (delete_trans c s) s1 s3 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply inc_dec_in_post.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  intro; discriminate.
  
(* Goal: not (@eq Site s3 s2) *)
(* Goal: parent (rec_copy3_trans c s1 s2) s3 s4 *)
(* Goal: parent (rec_copy3_trans c s1 s2) s1 s *)
(* Goal: @eq bool (rt c s1) true *)
(* Goal: forall _ : not (@eq Site s2 s), @ex Site (fun s3 : Site => and (direct_son (rec_copy3_trans c s1 s2) s3) (ancestor (rec_copy3_trans c s1 s2) s3 s)) *)
(* Goal: forall (s : Site) (e : @eq Z (st c s) Z0) (e0 : @eq bool (rt c s) true) (n : not (@eq Site s owner)) (_ : legal c) (_ : forall (_ : legal c) (s0 : Site) (_ : indirect_son1 c s0), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s0))) (_ : legal (transition c (delete_entry c s e e0 n))) (s0 : Site) (_ : indirect_son1 (transition c (delete_entry c s e e0 n)) s0), @ex Site (fun s1 : Site => and (direct_son (transition c (delete_entry c s e e0 n)) s1) (ancestor (transition c (delete_entry c s e e0 n)) s1 s0)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  generalize H8; elim H7.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (delete_trans c s) s4 s5 *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  cut (s5 <> s).
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; unfold Reset_rec_table in |- *; rewrite other_site; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  rewrite post_elsewhere; auto.
  
(* Goal: not (@eq Site s5 s) *)
(* Goal: indirect_son1 c s0 *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  elim H11.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
  generalize H13; rewrite H15; simpl in |- *; unfold Reset_rec_table in |- *;
   rewrite that_site; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H1; elim H1; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
  generalize H3; simpl in |- *; unfold Reset_rec_table in |- *;
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
   rewrite other_site; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: not (@eq Site s s2) *)
(* Goal: not (forall s2 : Site, not (inc_dec_in_queue s2 (bm c s1 owner))) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  unfold not in |- *; intro; generalize H7.
  rewrite H9; simpl in |- *; unfold Reset_rec_table in |- *;
   rewrite that_site; auto with bool.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H4; simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  elim H6.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (H7 s2).
(* Goal: inc_dec_in_queue s2 (bm c s1 owner) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  apply (inc_dec_in_post2 (bm c) s1 s2 s owner dec).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: not (@eq Message dec (inc_dec s2)) *)
(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  discriminate.

(* optim 1 *)

(* Goal: forall (s1 s2 : Site) (q : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 owner) (input Message dec (input Message (inc_dec s2) q))) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (redirect_inc c s1 s2 q n e))) (s : Site) (_ : indirect_son1 (transition c (redirect_inc c s1 s2 q n e)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (redirect_inc c s1 s2 q n e)) s3) (ancestor (transition c (redirect_inc c s1 s2 q n e)) s3 s)) *)
(* Goal: forall (s1 s2 : Site) (q1 q2 q3 q4 : queue Message) (n : not (@eq Site s1 s2)) (e : @eq (queue Message) (bm c s1 s2) (append Message q1 (input Message copy q2))) (e0 : @eq (queue Message) (append Message q1 q2) (append Message q3 q4)) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s3 : Site => and (direct_son c s3) (ancestor c s3 s))) (_ : legal (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0))) (s : Site) (_ : indirect_son1 (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s), @ex Site (fun s3 : Site => and (direct_son (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3) (ancestor (transition c (copy_out_of_band c s1 s2 q1 q2 q3 q4 n e e0)) s3 s)) *)
  exact (parent_invariant_inductive_optim1 c t).

(* optim 2 *)

(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *; intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
  elim (H0 H s).
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  decompose [and] H3.
(* Goal: @ex Site (fun s3 : Site => and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) s3) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s3 s)) *)
(* Goal: indirect_son1 c s *)
  split with x.
(* Goal: and (direct_son (copy_out_of_band_trans c s1 s2 q3 q4) x) (ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s) *)
(* Goal: indirect_son1 c s *)
  split.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim H4; intros; apply direct_son_intro; auto.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_queue_dec s1 s0 s2 owner); intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9; rewrite H10.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (change_queue (queue Message) (bm c) s0 owner (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite that_queue.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner)) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) x s *)
(* Goal: indirect_son1 c s *)
  elim (H8 s3).
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9 in e.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H10 in e.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: inc_dec_in_queue s3 (append Message q1 (input Message copy q2)) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply inc_dec_in_append with (q3 := q3) (q4 := q4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim o; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H5; intros.
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply short.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s0 s3 *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  elim H6.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_queue_dec s1 s5 s2 owner); intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9; rewrite H10.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (change_queue (queue Message) (bm c) s0 owner (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite that_queue.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H9 in e.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  rewrite H10 in e.
(* Goal: inc_dec_in_queue s4 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s4 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s5 owner) *)
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  generalize H8.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  apply inc_dec_in_append with (q3 := q1) (q4 := q2).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim o; auto.
  
(* Goal: ancestor (copy_out_of_band_trans c s1 s2 q3 q4) s0 s4 *)
(* Goal: indirect_son1 c s *)
  apply long with (s1 := s3).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H8; intros.
(* Goal: parent (copy_out_of_band_trans c s1 s2 q3 q4) s5 s6 *)
(* Goal: indirect_son1 c s *)
  apply parent_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_queue_dec s1 s6 s2 owner); intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  rewrite H11; rewrite H12.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (change_queue (queue Message) (bm c) s0 owner (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite that_queue.
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  rewrite H11 in e; rewrite H12 in e.
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  generalize H10.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: inc_dec_in_queue s5 (append Message q3 (input Message copy q4)) *)
(* Goal: inc_dec_in_queue s5 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s6 owner) *)
(* Goal: indirect_son1 c s *)
  apply inc_dec_in_append with (q3 := q1) (q4 := q2).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim o; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H2; intros.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply indirect_son1_intro.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  generalize H4; simpl in |- *; auto.
  
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  generalize H5; simpl in |- *.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  case (eq_queue_dec s1 s0 s2 owner); intro.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  decompose [and] a.
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite H6; rewrite H7.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (change_queue (queue Message) (bm c) s0 owner (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite that_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite H6 in e.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite H7 in e.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4)))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite e.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  elim H8.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  intro.
(* Goal: forall s1 : Site, not (inc_dec_in_queue s1 (append Message q3 (input Message copy q4))) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  unfold not in |- *; intro.
(* Goal: False *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply (H9 s3).
(* Goal: inc_dec_in_queue s3 (append Message q1 (input Message copy q2)) *)
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  apply inc_dec_in_append with (q3 := q3) (q4 := q4).
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s3 : Site, not (inc_dec_in_queue s3 (change_queue (queue Message) (bm c) s1 s2 (append Message q3 (input Message copy q4)) s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
  rewrite other_queue.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  auto.
  
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  elim o; auto.

Qed.


Lemma parent_invariant :
 forall c : Config,
 legal c ->
 forall s : Site,
 indirect_son1 c s -> exists s1 : Site, direct_son c s1 /\ ancestor c s1 s.
Proof.
(* Goal: forall (c : Config) (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s)) *)
  intros c H.
(* Goal: forall (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s)) *)
  generalize H.
(* Goal: forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s)) *)
  elim H.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H1.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rt config_init s) true) (_ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm config_init s owner)))), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  simpl in |- *.
(* Goal: forall (s : Site) (_ : not (@eq Site s owner)) (_ : @eq bool (rec_init s) true) (_ : not (forall _ : Site, not False)), @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  intros.
(* Goal: @ex Site (fun s1 : Site => and (direct_son config_init s1) (ancestor config_init s1 s0)) *)
(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  elim H4.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  intro; auto.
(* Goal: forall _ : not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))), not (forall s1 : Site, not (inc_dec_in_queue s1 (bm c s0 owner))) *)
(* Goal: or (not (@eq Site s0 s1)) (not (@eq Site owner s2)) *)
  unfold not in |- *; auto.

(* Goal: forall (c : Config) (t : class_trans c) (_ : legal c) (_ : forall (_ : legal c) (s : Site) (_ : indirect_son1 c s), @ex Site (fun s1 : Site => and (direct_son c s1) (ancestor c s1 s))) (_ : legal (transition c t)) (s : Site) (_ : indirect_son1 (transition c t) s), @ex Site (fun s1 : Site => and (direct_son (transition c t) s1) (ancestor (transition c t) s1 s)) *)
  exact parent_invariant_inductive.
Qed.


