Module Share : SHARE_MODEL := tree_shares.Share.Definition share : Type := Share.t.Instance pa_share : Perm_alg share := Share.pa.Instance sa_share : Sep_alg share := Share.sa.Instance ca_share : Canc_alg share := Share.ca.Definition emptyshare : share := Share.bot.Definition fullshare : share := Share.top.

(* Specifications: *)
Theorem leq_join_sub : forall s1 s2:Share.t, s1 <= s2 <-> join_sub s1 s2.
Lemma top_correct' : forall x:t, join_sub x top.
Lemma bot_identity : identity bot.
Lemma identity_share_bot : forall s, identity s -> s = bot.
Lemma factoryOverlap' : forall f1 f2 n1 n2, isTokenFactory f1 n1 -> isTokenFactory f2 n2 -> joins f1 f2 -> False.
Lemma identityToken' : forall x, isToken x 0 <-> identity x.
Lemma nonidentityToken' : forall x n, (n > 0)%nat -> isToken x n -> nonidentity x.
Lemma nonidentityFactory' : forall x n, isTokenFactory x n -> nonidentity x.
Lemma split_join : forall x1 x2 x, split x = (x1,x2) -> join x1 x2 x.
Lemma split_nontrivial' : forall x1 x2 x, split x = (x1, x2) -> (identity x1 \/ identity x2) -> identity x.
Lemma rel_leq : forall a x, join_sub (rel a x) a.
Lemma rel_join : forall a x y z, join x y z -> join (rel a x) (rel a y) (rel a z).
Lemma rel_join2 : forall a x y s, nonidentity a -> join (rel a x) (rel a y) s -> exists z, s = rel a z /\ join x y z.
Lemma rel_nontrivial : forall a x, identity (rel a x) -> (identity a \/ identity x).