(** * Particular SF_seq *)
Definition SF_seq_f1 {T : Type} (f1 : R -> T) (P : seq R) : SF_seq :=
mkSF_seq (head 0 P) (pairmap (fun x y => (y, f1 x)) (head 0 P) (behead P)).
Definition SF_seq_f2 {T : Type} (f2 : R -> R -> T) (P : seq R) : SF_seq :=
mkSF_seq (head 0 P) (pairmap (fun x y => (y, f2 x y)) (head 0 P) (behead P)).

(* Specifications: *)
Lemma SF_cons_f1 {T : Type} (f1 : R -> T) (h : R) (P : seq R) :
(0 < size P)%nat -> SF_seq_f1 f1 (h::P) = SF_cons (h,f1 h) (SF_seq_f1 f1 P).
Lemma SF_cons_f2 {T : Type} (f2 : R -> R -> T) (h : R) (P : seq R) :
(0 < size P)%nat ->
SF_seq_f2 f2 (h::P) = SF_cons (h,f2 h (head 0 P)) (SF_seq_f2 f2 P).
Lemma SF_size_f1 {T : Type} (f1 : R -> T) P :
SF_size (SF_seq_f1 f1 P) = Peano.pred (size P).
Lemma SF_size_f2 {T : Type} (f2 : R -> R -> T) P :
SF_size (SF_seq_f2 f2 P) = Peano.pred (size P).
Lemma SF_lx_f1 {T : Type} (f1 : R -> T) P :
(0 < size P)%nat -> SF_lx (SF_seq_f1 f1 P) = P.
Lemma SF_lx_f2 {T : Type} (f2 : R -> R -> T) P :
(0 < size P)%nat ->
SF_lx (SF_seq_f2 f2 P) = P.
Lemma SF_ly_f1 {T : Type} (f1 : R -> T) P :
SF_ly (SF_seq_f1 f1 P) = Rcomplements.belast (map f1 P).
Lemma SF_ly_f2 {T : Type} (f2 : R -> R -> T) P :
SF_ly (SF_seq_f2 f2 P) = behead (pairmap f2 0 P).
Lemma SF_sorted_f1 {T : Type} (f1 : R -> T) P Ord :
(sorted Ord P) <-> (SF_sorted Ord (SF_seq_f1 f1 P)).
Lemma SF_sorted_f2 {T : Type} (f2 : R -> R -> T) P Ord :
(sorted Ord P) <-> (SF_sorted Ord (SF_seq_f2 f2 P)).
Lemma SF_rev_f2 {T : Type} (f2 : R -> R -> T) P : (forall x y, f2 x y = f2 y x) ->
SF_rev (SF_seq_f2 f2 P) = SF_seq_f2 f2 (rev P).
Lemma SF_map_f1 {T T0 : Type} (f : T -> T0) (f1 : R -> T) P :
SF_map f (SF_seq_f1 f1 P) = SF_seq_f1 (fun x => f (f1 x)) P.
Lemma SF_map_f2 {T T0 : Type} (f : T -> T0) (f2 : R -> R -> T) P :
SF_map f (SF_seq_f2 f2 P) = SF_seq_f2 (fun x y => f (f2 x y)) P.
Lemma ptd_f2 (f : R -> R -> R) s :
sorted Rle s -> (forall x y, x <= y -> x <= f x y <= y)
-> pointed_subdiv (SF_seq_f2 f s).