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).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).
Lemma Riemann_sum_Chasles_0 (f : R -> V) (M : R) (x : R) ptd : forall (eps : posreal), (forall x, SF_h ptd <= x <= last (SF_h ptd) (SF_lx ptd) -> norm (f x) < M) -> SF_h ptd <= x <= last (SF_h ptd) (SF_lx ptd) -> pointed_subdiv ptd -> seq_step (SF_lx ptd) < eps -> norm (minus (plus (Riemann_sum f (SF_cut_down ptd x)) (Riemann_sum f (SF_cut_up ptd x))) (Riemann_sum f ptd)) < 2 * eps * M.
Lemma Riemann_sum_norm (f : R -> V) (g : R -> R) ptd : pointed_subdiv ptd -> (forall t, SF_h ptd <= t <= last (SF_h ptd) (SF_lx ptd) -> norm (f t) <= g t) -> norm (Riemann_sum f ptd) <= Riemann_sum g ptd.
Lemma Riemann_sum_le (f : R -> R) (g : R -> R) ptd : pointed_subdiv ptd -> (forall t, SF_h ptd <= t <= last (SF_h ptd) (SF_lx ptd) -> f t <= g t) -> Riemann_sum f ptd <= Riemann_sum g ptd.
Lemma Riemann_sum_pair {U : ModuleSpace R_Ring} {V : ModuleSpace R_Ring} (f : R -> U * V) ptd : Riemann_sum f ptd = (Riemann_sum (fun t => fst (f t)) ptd, Riemann_sum (fun t => snd (f t)) ptd).