Definition pl_produit_path_incl_def_2 (pl0 pl1 : prec_list) :=
forall (n m : nat) (plp : pl_path) (a : ad) (l : prec_list),
pl_path_incl plp (pl_produit_0 a pl0 pl1 m l) ->
pl_tl_length pl0 n ->
pl_tl_length pl1 (S n) ->
pl_essence pl0 pl1 <= m ->
(exists plp0 : pl_path,
(exists plp1 : pl_path,
plp = pl_path_product plp0 plp1 /\
pl_path_incl plp0 (prec_cons a pl0 prec_empty) /\
pl_path_incl plp1 pl1)) \/ pl_path_incl plp l.
Definition pl_produit_path_incl_def_3 (pl0 pl1 : prec_list) :=
forall (n m : nat) (plp : pl_path),
pl_path_incl plp (pl_produit_1 pl0 m pl1) ->
pl_tl_length pl0 n ->
pl_tl_length pl1 n ->
pl_essence pl0 pl1 <= m ->
exists plp0 : pl_path,
(exists plp1 : pl_path,
plp = pl_path_product plp0 plp1 /\
pl_path_incl plp0 pl0 /\ pl_path_incl plp1 pl1).

(* Specifications: *)
Lemma pl_produit_path_incl_3_0 :
forall p : prec_list, pl_produit_path_incl_def_2 p prec_empty.
Lemma pl_produit_path_incl_3_1 :
forall p : prec_list, pl_produit_path_incl_def_3 p prec_empty.
Lemma pl_produit_path_incl_3_2 :
forall p : prec_list, pl_produit_path_incl_def_3 prec_empty p.
Lemma pl_produit_path_incl_3_3 :
forall (a : ad) (la ls p : prec_list),
pl_produit_path_incl_def_2 p ls ->
pl_produit_path_incl_def_3 p la ->
pl_produit_path_incl_def_2 p (prec_cons a la ls).
Lemma pl_produit_path_incl_3_4 :
forall (a : ad) (la ls p : prec_list),
pl_produit_path_incl_def_2 la p ->
pl_produit_path_incl_def_3 ls p ->
pl_produit_path_incl_def_3 (prec_cons a la ls) p.
Lemma pl_produit_path_incl_3_5 :
forall p p' : prec_list,
pl_produit_path_incl_def_2 p p' /\ pl_produit_path_incl_def_3 p p'.
Lemma pl_produit_path_incl_3 :
forall (pl0 pl1 : prec_list) (n m : nat) (plp : pl_path),
pl_path_incl plp (pl_produit_1 pl0 m pl1) ->
pl_tl_length pl0 n ->
pl_tl_length pl1 n ->
pl_essence pl0 pl1 <= m ->
exists plp0 : pl_path,
(exists plp1 : pl_path,
plp = pl_path_product plp0 plp1 /\
pl_path_incl plp0 pl0 /\ pl_path_incl plp1 pl1).
Lemma pl_produit_path_incl_4 :
forall (pl0 pl1 : prec_list) (n : nat) (plp : pl_path),
pl_path_incl plp (pl_produit pl0 pl1) ->
pl_tl_length pl0 n ->
pl_tl_length pl1 n ->
exists plp0 : pl_path,
(exists plp1 : pl_path,
plp = pl_path_product plp0 plp1 /\
pl_path_incl plp0 pl0 /\ pl_path_incl plp1 pl1).