Definition Riemann_fine (a b : R) :=
within (fun ptd => pointed_subdiv ptd /\ SF_h ptd = Rmin a b /\ last (SF_h ptd) (SF_lx ptd) = Rmax a b)
(locally_dist (fun ptd => seq_step (SF_lx ptd))).
Global Instance Riemann_fine_filter :
forall a b, ProperFilter (Riemann_fine a b).
(** * Riemann sums *)
(** Riemann_sum *)
Section Riemann_sum.
Context {V : ModuleSpace R_Ring}.
Definition Riemann_sum (f : R -> V) (ptd : SF_seq) : V :=
foldr plus zero (pairmap (fun x y => (scal (fst y - fst x) (f (snd y)))) (SF_h ptd,zero) (SF_t ptd)).

(* Specifications: *)
Lemma Riemann_sum_cons (f : R -> V) (h0 : R * R) (ptd : SF_seq) :
Riemann_sum f (SF_cons h0 ptd) =
plus (scal (SF_h ptd - fst h0) (f (snd h0))) (Riemann_sum f ptd).
Lemma Riemann_sum_rcons (f : R -> V) ptd l0 :
Riemann_sum f (SF_rcons ptd l0) =
plus (Riemann_sum f ptd) (scal (fst l0 - last (SF_h ptd) (SF_lx ptd)) (f (snd l0))).
Lemma Riemann_sum_zero (f : R -> V) ptd :
SF_sorted Rle ptd ->
SF_h ptd = last (SF_h ptd) (SF_lx ptd) ->
Riemann_sum f ptd = zero.
Lemma Riemann_sum_map (f : R -> V) (g : R -> R) ptd :
Riemann_sum (fun x => f (g x)) ptd = Riemann_sum f (SF_map g ptd).
Lemma Riemann_sum_const (v : V) ptd :
Riemann_sum (fun _ => v) ptd = scal (last (SF_h ptd) (SF_lx ptd) - SF_h ptd) v.
Lemma Riemann_sum_scal (a : R) (f : R -> V) ptd :
Riemann_sum (fun x => scal a (f x)) ptd = scal a (Riemann_sum f ptd).
Lemma Riemann_sum_opp (f : R -> V) ptd :
Riemann_sum (fun x => opp (f x)) ptd = opp (Riemann_sum f ptd).
Lemma Riemann_sum_plus (f g : R -> V) ptd :
Riemann_sum (fun x => plus (f x) (g x)) ptd =
plus (Riemann_sum f ptd) (Riemann_sum g ptd).
Lemma Riemann_sum_minus (f g : R -> V) ptd :
Riemann_sum (fun x => minus (f x) (g x)) ptd =
minus (Riemann_sum f ptd) (Riemann_sum g ptd).