Section contents.
Variables (ee: E) (ol: list ee).
Proof with auto.
intros.
cut (vec.head (Vector.cons a b) = vec.head (Vector.cons c d) /\ vec.tail (Vector.cons a b) = vec.tail (Vector.cons c d))...
rewrite H...
Qed.

Lemma case_split b: forall i j (X: Set) (f: U.monoid * X -> nat) n (vex: Vector.t (Index ee ol) (S n)) (g: natBelow (S n) -> MonoidMonadTrans.M U.monoid ne_tree_monad.ext X), IndexSeq b (vec.to_list vex) -> (b <= i)%nat -> (i < j)%nat -> (j < b + S n)%nat -> forall ca cb, 0 <= ca -> 0 <= cb ->
(forall pi, (vec.nth vex pi < i)%nat -> expec f (g pi) <= ca) ->
(forall pi, (nb_val (vec.nth vex pi) = i)%nat -> expec f (g pi) <= cb) ->
(forall pi, (i < vec.nth vex pi)%nat ->
(vec.nth vex pi < j)%nat -> expec f (g pi) = 0) ->
(forall pi, (nb_val (vec.nth vex pi) = j)%nat -> expec f (g pi) <= cb) ->
(forall pi, (j < vec.nth vex pi)%nat -> expec f (g pi) <= ca) ->
Rsum (map (expec f ∘ g) (ne_list.to_plain (ne_list.from_vec (vec.nats 0 (S n)))))
<= ca * INR (i - b) + (cb + (0 + (cb + (ca * INR(b + n - j))))).