Section PROD'.
Variable A : Type.
Variable J_A: Join A.
Variable saA : Perm_alg A.
Variable B: Type.
Variable J_B: Join B.
Variable saB : Perm_alg B.
Variable agB : ageable B.
Variable asb : Age_alg B.
End PROD'.
Definition relation_mul {A: Type} (R0 R1: relation A) (x y: A) := exists z, R0 x z /\ R1 z y.
Fixpoint relation_power {A: Type} (n: nat) (R: relation A) :=
match n with
| O => eq
| S n0 => relation_mul R (relation_power n0 R)
end.
Fixpoint partial_fun_power {A: Type} (n: nat) (f: A -> option A) (x: A) :=
match n with
| O => Some x
| S n0 => match f x with
| Some fx => partial_fun_power n0 f fx
| None => None
end
end.

Lemma power_age_parallel': forall {A:Type} {agA:ageable A} {JA: Join A} {PA: Perm_alg A} {SaA: Sep_alg A} {XA: Age_alg A} (x x' y: A) n,
core x = core y ->
relation_power n age x x' ->
exists y', relation_power n age y y' /\ core x' = core y'.