Fixpoint pl_path_product (p0 p1 : pl_path) {struct p1} : pl_path :=
match p0, p1 with
| pl_path_nil, pl_path_nil => pl_path_nil
| pl_path_nil, pl_path_cons a b => pl_path_nil
| pl_path_cons a b, pl_path_nil => pl_path_nil
| pl_path_cons a0 b0, pl_path_cons a1 b1 =>
pl_path_cons (iad_conv a0 a1) (pl_path_product b0 b1)
end.

(* Specifications: *)
Lemma pl_path_product_n :
forall (n : nat) (p0 p1 : pl_path),
pl_path_length p0 = n ->
pl_path_length p1 = n -> pl_path_length (pl_path_product p0 p1) = n.
Lemma pl_produit_path_incl_inj :
forall (plp0 plp1 plp2 plp3 : pl_path) (n : nat),
pl_path_length plp0 = n ->
pl_path_length plp1 = n ->
pl_path_length plp2 = n ->
pl_path_length plp3 = n ->
pl_path_product plp0 plp1 = pl_path_product plp2 plp3 ->
plp0 = plp2 /\ plp1 = plp3.