+ [2: exists [apply 〈O,OQ〉] simplify; constructor 1; split; try assumption;
+ try reflexivity; apply q_lt_to_le; assumption;
+ |1: cases (bars f); [exists [apply 〈O,OQ〉] simplify; constructor 3; split;try assumption;reflexivity;]
+ cases (value ⅆ[i,start f] (b::l)) (p Hp);
+ cases (Hp (q_dist_ge_OQ ? ?)); clear Hp value; [cases H1; destruct H2]
+ cases H1; clear H1; lapply (sum_bases_O (b::l) (\fst p)) as H1;
+ [2: apply (q_le_trans ??? H2); rewrite > H; apply q_eq_to_le;
+ rewrite > q_d_x_x; reflexivity;
+ |1: exists [apply p] simplify; constructor 4; rewrite > H1; split;
+ try split; try rewrite > q_d_x_x; try autobatch depth=2;
+ [1: rewrite > H; rewrite > q_plus_sym; apply q_lt_plus;
+ rewrite > q_plus_minus; apply q_lt_plus_trans; [apply sum_bases_ge_OQ]
+ apply q_pos_lt_OQ;
+ |2: rewrite > H; rewrite > q_d_x_x; apply q_eq_to_le; reflexivity;
+ |3: rewrite > H; rewrite > q_d_x_x; apply q_lt_plus_trans;
+ try apply sum_bases_ge_OQ; apply q_pos_lt_OQ;]]
+ |3: cases (q_cmp i (start f+sum_bases (bars f) (len (bars f))));
+ [1: exists [apply 〈O,OQ〉] simplify; constructor 2; split; try assumption;
+ try reflexivity; rewrite > H1; apply q_eq_to_le; reflexivity;
+ |3: exists [apply 〈O,OQ〉] simplify; constructor 2; split; try assumption;
+ try reflexivity; apply q_lt_to_le; assumption;
+ |2: generalize in match (refl_eq ? (bars f): bars f = bars f);
+ generalize in match (bars f) in ⊢ (??? % → %); intro X; cases X; clear X;
+ intros;
+ [1: exists [apply 〈O,OQ〉] simplify; constructor 3; split; reflexivity;
+ |2: cases (value ⅆ[i,start f] (b::l)) (p Hp);
+ cases (Hp (q_dist_ge_OQ ? ?)); clear Hp value; [cases H3;destruct H4]
+ cases H3; clear H3;
+ exists [apply p]; constructor 4; split; try split; try assumption;
+ [1: intro X; destruct X;
+ |2: apply q_lt_to_le; assumption;
+ |3: rewrite < H2; assumption;
+ |4: cases (cmp_nat (\fst p) (len (bars f)));
+ [1:apply lt_to_le;rewrite <H2; assumption|rewrite > H3;rewrite < H2;apply le_n]
+ cases (?:False); cases (\fst p) in H3 H4 H6; clear H5;
+ [1: intros; apply (not_le_Sn_O ? H5);
+ |2: rewrite > q_d_sym; rewrite > q_d_noabs; [2: apply q_lt_to_le; assumption]
+ intros; lapply (q_lt_inj_plus_r ?? (Qopp (start f)) H1); clear H1;
+ generalize in match Hletin;
+ rewrite > (q_plus_sym (start f)); rewrite < q_plus_assoc;
+ do 2 rewrite < q_elim_minus; rewrite > q_plus_minus;
+ rewrite > q_plus_OQ; intro K; apply (q_lt_corefl (i-start f));
+ apply (q_lt_le_trans ???? H3); rewrite < H2;
+ apply (q_lt_trans ??? K); apply sum_bases_increasing;
+ assumption;]]]]]
+|1,3: intros; right; split;
+ [1,4: clear H2; cases (value (q-Qpos (\fst b)) l1);