@@ -1985,6 +1985,55 @@ q≤⌈q⌉ q@record{} = begin
19851985 - (- (⌊ - q ⌋ / 1 + 1ℚᵘ)) ≡⟨ cong -_ (neg-distrib-+ (⌊ - q ⌋ / 1 ) 1ℚᵘ) ⟩
19861986 - (⌈ q ⌉ / 1 - 1ℚᵘ) ∎) where open ≤-Reasoning
19871987
1988+ private
1989+ -[n/d]*d≡-n+n%d : ∀ (n d : ℤ) .{{_ : ℤ.NonZero d}}
1990+ → ℤ.- (n ℤ./ d) ℤ.* d ≡ ℤ.- n ℤ.+ (ℤ.+ (n ℤ.% d))
1991+ -[n/d]*d≡-n+n%d n d =
1992+ let [n/d]*d = (n ℤ./ d) ℤ.* d; n%d = ℤ.+ (n ℤ.% d) in begin
1993+ ℤ.- (n ℤ./ d) ℤ.* d
1994+ ≡⟨ ℤ.neg-distribˡ-* (n ℤ./ d) d ⟨
1995+ ℤ.- [n/d]*d
1996+ ≡⟨ cong ℤ.-_ (sym (\\-leftDividesʳ n%d [n/d]*d)) ⟩
1997+ ℤ.- (ℤ.- n%d ℤ.+ (n%d ℤ.+ [n/d]*d))
1998+ ≡⟨ cong (λ h → ℤ.- (ℤ.- n%d ℤ.+ h)) (sym (ℤ.a≡a%n+[a/n]*n n d)) ⟩
1999+ ℤ.- (ℤ.- n%d ℤ.+ n)
2000+ ≡⟨ ⁻¹-anti-homo-\\ n%d n ⟩
2001+ ℤ.- n ℤ.+ n%d ∎
2002+ where
2003+ open ≡-Reasoning
2004+ open import Algebra.Properties.AbelianGroup ℤ.+-0-abelianGroup
2005+
2006+ ⌈q⌉-⌊q⌋≤1 : ∀ q → ⌈ q ⌉ ℤ.- ⌊ q ⌋ ℤ.≤ 1ℤ
2007+ ⌈q⌉-⌊q⌋≤1 q = ℤ.i<j⇒i≤pred[j] (⌈q⌉-⌊q⌋<2 q)
2008+ where
2009+ ⌈q⌉-⌊q⌋<2 : ∀ q → ⌈ q ⌉ ℤ.- ⌊ q ⌋ ℤ.< (ℤ.+ 2 )
2010+ ⌈q⌉-⌊q⌋<2 q@record{} =
2011+ let n = ↥ q; d = ↧ q; -n = ℤ.- n
2012+ n%d = ℤ.+ (n ℤ.% d); -n%d = ℤ.+ (-n ℤ.% d)
2013+ in ℤ.*-cancelʳ-<-nonNeg d (begin-strict
2014+ (⌈ q ⌉ ℤ.- ⌊ q ⌋) ℤ.* d
2015+ ≡⟨ ℤ.*-distribʳ-+ d ⌈ q ⌉ (ℤ.- ⌊ q ⌋) ⟩
2016+ ⌈ q ⌉ ℤ.* d ℤ.+ (ℤ.- ⌊ q ⌋ ℤ.* d)
2017+ ≡⟨⟩
2018+ ℤ.- (-n ℤ./ d) ℤ.* d ℤ.+ ℤ.- (n ℤ./ d) ℤ.* d
2019+ ≡⟨ cong₂ ℤ._+_ (-[n/d]*d≡-n+n%d -n d) (-[n/d]*d≡-n+n%d n d) ⟩
2020+ ℤ.- -n ℤ.+ -n%d ℤ.+ (-n ℤ.+ n%d)
2021+ ≡⟨ cong (λ h → h ℤ.+ -n%d ℤ.+ (-n ℤ.+ n%d)) (ℤ.neg-involutive n) ⟩
2022+ n ℤ.+ -n%d ℤ.+ (-n ℤ.+ n%d)
2023+ ≡⟨ ℤ.+-assoc (n ℤ.+ -n%d) -n n%d ⟨
2024+ n ℤ.+ -n%d ℤ.+ -n ℤ.+ n%d
2025+ ≡⟨ cong (ℤ._+ n%d) (xyx⁻¹≈y n -n%d) ⟩
2026+ -n%d ℤ.+ n%d
2027+ <⟨ ℤ.+-mono-< (ℤ.+<+ (ℤ.n%d<d -n d)) (ℤ.+<+ (ℤ.n%d<d n d)) ⟩
2028+ d ℤ.+ d
2029+ ≡⟨ cong (λ h → h ℤ.+ h) (sym (ℤ.*-identityˡ d)) ⟩
2030+ 1ℤ ℤ.* d ℤ.+ 1ℤ ℤ.* d
2031+ ≡⟨ ℤ.*-distribʳ-+ d 1ℤ 1ℤ ⟨
2032+ (ℤ.+ 2 ) ℤ.* d ∎)
2033+ where
2034+ open ℤ.≤-Reasoning
2035+ open import Algebra.Properties.AbelianGroup ℤ.+-0-abelianGroup
2036+
19882037------------------------------------------------------------------------
19892038-- Approximation errors of ⌊_⌋ ⌈_⌉ and round(_)
19902039
0 commit comments