Definition olist (p : list (Term A n)) := DescA (fP p).

(* Specifications: *)
Theorem olistOne : forall a b : Term A n, ltT b a -> olist (pX a (pX b pO)).
Theorem olistO : olist pO.
Lemma app2_inv : forall (x y z t : mon n) (p : listA), (p ++ consA x nilA) ++ consA y nilA = consA z (consA t nilA) -> x = z /\ y = t.
Theorem olist_ltT : forall (l : list (Term A n)) (a b : Term A n), olist (l ++ pX a (pX b pO)) -> ltT b a.
Theorem olist_cons : forall (l : list _) a b, ltT b a -> olist (pX b l) -> olist (pX a (pX b l)).
Lemma fp_tail : forall x p, fP (p ++ x :: nil) = fP p ++ T2M x :: nil.
Lemma descA_subst : forall a b : listA, b = a -> DescA a -> DescA b.
Theorem olist_pX_eqT : forall a b p, olist (pX a p) -> eqT a b -> olist (pX b p).
Theorem olist_pX_order : forall l a b, olist (pX a (pX b l)) -> ltT b a.
Theorem olist_X : forall (l : list _) a, olist (pX a l) -> olist l.
Theorem olist_imp_olist : forall l a b, olist (pX a (pX b l)) -> olist (pX a l).