import proveit
theory = proveit.Theory() # the theorem's theory
from proveit import b, defaults
from proveit.logic import NotEquals
from proveit.numbers import zero, one, two, pi, Abs, frac, Neg
from proveit.physics.quantum.QPE import (
_b_floor, _delta_b_floor_diff_in_interval,
_delta_b_not_eq_scaledNonzeroInt, _two_pow_t_minus_one_is_nat_pos)
%proving _scaled_abs_delta_b_floor_diff_interval
defaults.assumptions = _scaled_abs_delta_b_floor_diff_interval.all_conditions()
_two_pow_t_minus_one_is_nat_pos
defaults.assumptions[0].derive_element_in_integer()
_delta_b_floor_diff_in_interval
_delta_b_floor_diff_in_interval_inst = _delta_b_floor_diff_in_interval.instantiate()
delta_diff = _delta_b_floor_diff_in_interval_inst.element
_delta_b_floor_diff_in_interval_inst.domain.deduce_relaxed_membership(delta_diff)
# for convenience, label the abs value component
abs_val_delta_diff = Abs(delta_diff)
abs_val_leq_one_half = abs_val_delta_diff.deduce_weak_upper_bound(frac(one, two))
upper_bound = (
abs_val_leq_one_half.left_mult_both_sides(pi).
inner_expr().rhs.distribute())
_delta_b_not_eq_scaledNonzeroInt.instantiate({b: _b_floor})
NotEquals(delta_diff, zero).prove()
%qed