End PROD.
Section PROD'.
Variable A B : Type.
Variable agB: ageable B.
Let levelAB (x:prod A B) := level (snd x).
Let age1AB (x:prod A B) :=
match age1 (snd x) with
| None => None
| Some a' => Some (fst x, a')
end.

(* Specifications: *)
Lemma ag_prod'_facts : ageable_facts (prod A B) levelAB age1AB.
Definition ag_prod' :=
mkAgeable (prod A B) levelAB age1AB ag_prod'_facts.
Lemma prod'_nec_split : forall n x n' x',
@necR (prod A B) ag_prod' (x,n) (x',n') <-> necR n n' /\ x = x'.
Lemma prod'_later_split : forall n x n' x',
@laterR (prod A B) ag_prod' (x,n) (x',n') <-> laterR n n' /\ x = x'.