(** ** SF_fun *)
Definition SF_fun_f1 {T : Type} (f1 : R -> T) (P : seq R) x : T :=
SF_fun (SF_seq_f1 f1 P) (f1 0) x.
Definition SF_fun_f2 {T : Type} (f2 : R -> R -> T) (P : seq R) x :=
SF_fun (SF_seq_f2 f2 P) (f2 0 0) x.
(** * Uniform partition *)
Definition unif_part (a b : R) (n : nat) : seq R :=
mkseq (fun i => a + (INR i) * (b - a) / (INR n + 1)) (S (S n)).

(* Specifications: *)
Lemma unif_part_bound (a b : R) (n : nat) :
unif_part a b n = rev (unif_part b a n).
Lemma unif_part_sort (a b : R) (n : nat) : a <= b -> sorted Rle (unif_part a b n).
Lemma head_unif_part x0 (a b : R) (n : nat) :
head x0 (unif_part a b n) = a.
Lemma last_unif_part x0 (a b : R) (n : nat) :
last x0 (unif_part a b n) = b.
Lemma unif_part_nat (a b : R) (n : nat) (x : R) : (a <= x <= b) ->
{i : nat |
nth 0 (unif_part a b n) i <= x < nth 0 (unif_part a b n) (S i) /\
(S (S i) < size (unif_part a b n))%nat} +
{nth 0 (unif_part a b n) (n) <= x <=
nth 0 (unif_part a b n) (S n)}.
Lemma seq_step_unif_part (a b : R) (n : nat) :
seq_step (unif_part a b n) = Rabs ((b - a) / (INR n + 1)).
Lemma seq_step_unif_part_ex (a b : R) (eps : posreal) :
{n : nat | seq_step (unif_part a b n) < eps}.
Lemma unif_part_S a b n :
unif_part a b (S n) = a :: unif_part ((a * INR (S n) + b) / INR (S (S n))) b n.