have error_eq : a + b - trunc n (a + b) = b % ulp n a := by
  rewrite [tsub_eq_iff_eq_add_of_le (trunc_le _ _), Nat.add_comm (b % ulp n a)]
  rewrite [← mod_ulp₂, ← ulp_eq]
  unfold trunc
  rw [Nat.div_add_mod']
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_carry : a + b < 2 ^ Nat.size a
round_le : round (a + b) ≤ a + b
size_eq : Nat.size (a + b) = Nat.size a
ulp_eq : ulp n (a + b) = ulp n a
mod_ulp₁ : a % ulp n a = 0
mod_ulp₂ : (a + b) % ulp n a = b % 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_carry : a + b < 2 ^ Nat.size a
round_le : round (a + b) ≤ a + b
size_eq : Nat.size (a + b) = Nat.size a
ulp_eq : ulp n (a + b) = ulp n a
mod_ulp₁ : a % ulp n a = 0
mod_ulp₂ : (a + b) % ulp n a = b % ulp n a
error_eq : a + b - trunc n (a + b) = b % ulp n a
⊢ trunc n (a + b - round (a + b)) = a + b - round (a + b)