Definition age1_list {A} `{ageable A} := list_forall2 age.

(* Specifications: *)
Lemma age1_list_join {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A}:
forall l (phi phi' phi2: A),
age phi phi' ->
list_join phi l phi2 ->
exists l', exists phi2', age1_list l l' /\ age phi2 phi2' /\ list_join phi' l' phi2'.
Lemma age1_list_join2 {A} {JA: Join A}{PA: Perm_alg A}{agA: ageable A}{AgeA: Age_alg A}:
forall (l: list A) phi phi2 phi2',  age1 phi2 = Some phi2' -> list_join phi l phi2 ->
exists l', exists phi',  age1 phi = Some phi' /\ age1_list l l' /\ list_join phi' l' phi2'.
Lemma list_join_split_nth {A}{JA: Join A}{PA: Perm_alg A}:
forall n (l: list A) phin phi phia phib phi2,
nth_error l n = Some phin -> list_join phi l phi2 -> join phib phia phin ->
exists phic, exists l',
replace l n phib = Some l' /\ join phi phia phic /\ list_join phic l' phi2.
Lemma list_join_join_nth {A} {JA: Join A}{PA: Perm_alg A}:
forall n (l: list A) phin phi phia phib phi2,
nth_error l n = Some phin -> list_join phi l phi2 -> join phi2 phia phib ->
exists phic, exists l',
join phin phia phic /\ replace l n phic = Some l' /\ list_join phi l' phib.