Require Export VST.concurrency.paco.src.paconotation VST.concurrency.paco.src.pacotac VST.concurrency.paco.src.pacodef VST.concurrency.paco.src.pacotacuser.
Set Implicit Arguments.
(** ** Predicates of Arity 0 *)
(** 1 Mutual Coinduction *)
Section Arg0_1.
Definition monotone0 (gf: rel0 -> rel0) :=
forall r r' (IN: gf r) (LE: r <0= r'), gf r'.
Variable gf : rel0 -> rel0.
Implicit Arguments gf [].

(* Specifications: *)
Theorem paco0_acc: forall
l r (OBG: forall rr (INC: r <0= rr) (CIH: l <_paco_0= rr), l <_paco_0= paco0 gf rr),
l <0= paco0 gf r.
Theorem paco0_mon: monotone0 (paco0 gf).
Theorem paco0_2_1_acc: forall
l r_0 r_1 (OBG: forall rr (INC: r_1 <0= rr) (CIH: l <_paco_0= rr), l <_paco_0= paco0_2_1 gf_0 gf_1 r_0 rr),
l <0= paco0_2_1 gf_0 gf_1 r_0 r_1.
Theorem paco0_2_0_mon: monotone0_2 (paco0_2_0 gf_0 gf_1).
Theorem paco0_3_1_acc: forall
l r_0 r_1 r_2 (OBG: forall rr (INC: r_1 <0= rr) (CIH: l <_paco_0= rr), l <_paco_0= paco0_3_1 gf_0 gf_1 gf_2 r_0 rr r_2),
l <0= paco0_3_1 gf_0 gf_1 gf_2 r_0 r_1 r_2.
Theorem paco0_3_2_acc: forall
l r_0 r_1 r_2 (OBG: forall rr (INC: r_2 <0= rr) (CIH: l <_paco_0= rr), l <_paco_0= paco0_3_2 gf_0 gf_1 gf_2 r_0 r_1 rr),
l <0= paco0_3_2 gf_0 gf_1 gf_2 r_0 r_1 r_2.
Theorem paco0_3_0_mon: monotone0_3 (paco0_3_0 gf_0 gf_1 gf_2).