have ulp_le : ulp n a ≤ b := by
  apply Nat.le_of_add_le_add_left (a := a)
  have ulp_le_pow : ulp n a ≤ 2 ^ Nat.size a := by
    unfold ulp expt
    exact Nat.pow_le_pow_of_le_right two_pos tsub_le_self
  trans 2 ^ Nat.size a
  . apply add_le_of_le_tsub_right_of_le ulp_le_pow
    exact le_size_sub_ulp_of_trunc_eq npos hfa
  . exact carry
round : ℕ → ℕ
n a b : ℕ
npos : 0 < n
hfaithful₁ : faithful₁ n round
hfa : trunc n a = a
hfb : trunc n b = b
hba : b ≤ a
no_uflow : 2 ^ n ≤ a + b
carry : 2 ^ Nat.size a ≤ a + b
round_le : round (a + b) ≤ a + b
ulp_add_eq_two_mul_ulp : ulp n (a + b) = 2 * ulp n a
⊢ trunc n (a + b - round (a + b)) = a + b - round (a + b)
round : ℕ → ℕ
n a b : ℕ
npos : 0 < n
hfaithful₁ : faithful₁ n round
hfa : trunc n a = a
hfb : trunc n b = b
hba : b ≤ a
no_uflow : 2 ^ n ≤ a + b
carry : 2 ^ Nat.size a ≤ a + b
round_le : round (a + b) ≤ a + b
ulp_add_eq_two_mul_ulp : ulp n (a + b) = 2 * ulp n a
ulp_le : ulp n a ≤ b
⊢ trunc n (a + b - round (a + b)) = a + b - round (a + b)