Instance agB : ageable B := (ag_bij _ _ ag bijAB).

(* Specifications: *)
Theorem asa_bijection : @Age_alg B (Join_bij _ _ _ bijAB) agB.
Theorem asa_prod : @Age_alg (prod A B) _ (ag_prod A B agA).
Theorem asa_prod' : @Age_alg (prod A B) _ (ag_prod' A B agB).
Lemma joins_fashionR {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{XA: Age_alg A} : forall x y, joins x y -> fashionR x y.
Lemma comparable_fashionR {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A} {agA: ageable A} {XA: Age_alg A} : forall x y, comparable x y -> fashionR x y.
Lemma age_identity {A} `{asaA: Age_alg A}: forall phi phi', age phi phi'-> identity phi -> identity phi'.
Lemma age_comparable {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A} {agA: ageable A}{asaA: Age_alg A}: forall phi1 phi2 phi1' phi2', age phi1 phi1' -> age phi2 phi2' -> comparable phi1 phi2 -> comparable phi1' phi2'.
Lemma asa_nat : @Age_alg nat (Join_equiv nat) ag_nat.
Lemma nec_identity {A} `{asaA: Age_alg A}: forall phi phi', necR phi phi'-> identity phi -> identity phi'.
Lemma nec_join2 {A} `{asaA : Age_alg A}: forall {x y z z' : A}, join x y z -> necR z z' -> exists x', exists y', join x' y' z' /\ necR x x' /\ necR y y'.
Lemma nec_join {A} `{asaA : Age_alg A}: forall {x y z x' : A}, join x y z -> necR x x' -> exists y' , exists z' , join x' y' z' /\ necR y y' /\ necR z z'.
Lemma nec_join4 {A} `{asaA : Age_alg A}: forall z x' y' z' : A, join x' y' z' -> necR z z' -> exists x, exists y, join x y z /\ necR x x' /\ necR y y'.
Lemma join_level {A}{JA: Join A}{PA: Perm_alg A}{AG: ageable A}{AgeA: Age_alg A}: forall x y z, join x y z -> level x = level z /\ level y = level z.
Lemma level_core {A}{JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{agA: ageable A}{AgeA: Age_alg A}: forall m:A, level (core m) = level m.
Lemma age_core_eq {A}{JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{agA: ageable A}{AgeA: Age_alg A}: forall x y x' y', age x x' -> age y y' -> core x = core y -> core x' = core y'.
Lemma age_twin {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{AG: ageable A}{XA: Age_alg A}: forall phi1 phi2 n phi1', level phi1 = level phi2 -> ageN n phi1 = Some phi1' -> exists phi2', ageN n phi2 = Some phi2' /\ level phi1' = level phi2'.
Lemma age1_join_eq {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A} : forall phi1 phi2 phi3, join phi1 phi2 phi3 -> forall phi1', age1 phi1 = Some phi1' -> forall phi2', age1 phi2 = Some phi2' -> forall phi3', age1 phi3 = Some phi3' -> join phi1' phi2' phi3'.
Lemma strong_nat_ind (P : nat -> Prop) (IH : forall n, (forall i, lt i n -> P i) -> P n) n : P n.
Lemma age_core {A}{JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{agA: ageable A}{AgeA: Age_alg A}: forall x y : A, age x y -> age (core x) (core y).
Lemma necR_core {A}{JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{agA: ageable A}{AgeA: Age_alg A}: forall x y : A, necR x y -> necR (core x) (core y).