Definition mod_correct' : ltac:(auto_for_auto mod_correct) := mod_correct.Inductive larger_bound : positive -> positive -> Type :=
  | larger_1  : forall b, larger_bound xH b
  | larger_xI : forall x b, larger_bound x b -> larger_bound (xI x) (xO b)
  | larger_xO : forall x b, larger_bound x b -> larger_bound (xO x) (xO b).Inductive larger_bound : positive -> positive -> Type :=
  | larger_1  : forall b, larger_bound xH b
  | larger_xI : forall x b, larger_bound x b -> larger_bound (xI x) (xO b)
  | larger_xO : forall x b, larger_bound x b -> larger_bound (xO x) (xO b).Inductive larger_bound : positive -> positive -> Type :=
  | larger_1  : forall b, larger_bound xH b
  | larger_xI : forall x b, larger_bound x b -> larger_bound (xI x) (xO b)
  | larger_xO : forall x b, larger_bound x b -> larger_bound (xO x) (xO b).Inductive larger_bound : positive -> positive -> Type :=
  | larger_1  : forall b, larger_bound xH b
  | larger_xI : forall x b, larger_bound x b -> larger_bound (xI x) (xO b)
  | larger_xO : forall x b, larger_bound x b -> larger_bound (xO x) (xO b).Definition N_larger_bound n b := match n with
| 0 => larger_bound xH b
| Npos p0 => larger_bound p0 b
end.Fixpoint lower_bound p0 := match p0 with
| xH => xH
| xO p0 => xO (lower_bound p0)
| xI p0 => xO (lower_bound p0)
end.

(* Specifications: *)
Lemma lower_bound_bound p0 : larger_bound p0 (lower_bound p0).
Lemma lower_bound_pow2 k : (lower_bound (2^ k) = 2^k)%positive.
Lemma lower_bound_div_bound (p0 b : positive) : larger_bound p0 b -> {k | (b = k * lower_bound p0)%positive}.
Lemma lower_bound_le p0 p1 : (p0 <= p1 -> {k | lower_bound p1 = k * lower_bound p0})%positive.
Lemma larger_bound_spec p0 k: larger_bound p0 (k * lower_bound p0).
Lemma N_larger_bound_le n n' b : n' <= n -> N_larger_bound n b -> N_larger_bound n' b.
Lemma N_larger_bound_mod n m b : m <> 0 -> N_larger_bound m b -> N_larger_bound (n mod m) b.