(* Ltac by Andrew Appel *)
Ltac do_range H tac :=
  match type of H with
    | ?lo <= ?i < ?hi =>
      try omega;
    let H' := fresh in let H'' := fresh in
                       destruct (zlt lo i) as [H' | H'];
    [ assert (H'' : lo + 1 <= i < hi) by omega;
      simpl in H'';
      clear H H'; rename H'' into H;
      try do_range H tac
    | try (assert (i = lo) by omega; subst i; tac)
    ]
  end.

(* Specifications: *)
Lemma test : forall i, 0 <= i < 256 -> i + 1 > i.