Definition rec_copy3_trans (c : Config) (s1 s2 : Site) :=
  mkconfig (S (time c)) (Update_table (dt c) s2 (S (time c))) 
    (st c) (Set_rec_table (rt c) s2)
    (Post_message (inc_dec s1) (Collect_message (bm c) s1 s2) s2 owner).

(* Specifications: *)
Lemma rcop3_trans_le_dt_time : dt c0 s0 <= time c0 -> dt (rec_copy3_trans c0 s1 s2) s0 <= time (rec_copy3_trans c0 s1 s2).
Lemma rcop3_trans_diff_site : (In_queue Message copy (bm c0 s3 s4) -> s3 <> s4) -> In_queue Message copy (bm (rec_copy3_trans c0 s1 s2) s3 s4) -> s3 <> s4.
Lemma rcop3_trans_rt : Int (rt (rec_copy3_trans c0 s1 s2) s0) = (if eq_site_dec s0 s2 then (Int (rt c0 s0) + 1)%Z else Int (rt c0 s0)).
Lemma rcop3_trans_in_queue : s0 <> s1 -> In_queue Message (inc_dec s0) (bm (rec_copy3_trans c0 s1 s2) s3 s4) -> In_queue Message (inc_dec s0) (bm c0 s3 s4).
Lemma rcop3_trans_in_other_queue : s2 <> s3 \/ s4 <> owner -> In_queue Message (inc_dec s0) (bm (rec_copy3_trans c0 s1 s2) s3 s4) -> In_queue Message (inc_dec s0) (bm c0 s3 s4).
Lemma rcop3_trans_st_rt : ((st c0 s0 > 0)%Z -> rt c0 s0 = true) -> (st (rec_copy3_trans c0 s1 s2) s0 > 0)%Z -> rt (rec_copy3_trans c0 s1 s2) s0 = true.
Lemma rcop3_trans_ctrl_copy : forall s3 : Site, ctrl_copy s0 s3 (bm (rec_copy3_trans c0 s1 s2)) = (if eq_site_dec s0 s1 then if eq_site_dec s3 s2 then (ctrl_copy s0 s3 (bm c0) - 1)%Z else ctrl_copy s0 s3 (bm c0) else ctrl_copy s0 s3 (bm c0)).
Lemma rcop3_trans_ctrl_dec : forall s3 : Site, ctrl_dec s0 s3 (bm (rec_copy3_trans c0 s1 s2)) = ctrl_dec s0 s3 (bm c0).
Lemma rcop3_trans_ctrl_inc : forall s3 : Site, ctrl_inc s0 s3 (bm (rec_copy3_trans c0 s1 s2)) = (if eq_site_dec s0 s1 then if eq_site_dec s3 s2 then (ctrl_inc s0 s3 (bm c0) + 1)%Z else ctrl_inc s0 s3 (bm c0) else ctrl_inc s0 s3 (bm c0)).