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.

Lemma lower_bound_div_bound (p0 b : positive) : larger_bound p0 b -> {k | (b = k * lower_bound p0)%positive}.