Skip to content

Commit b9a872a

Browse files
committed
prove ceil <= floor + 1
1 parent 64b0b08 commit b9a872a

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

src/Data/Rational/Unnormalised/Properties.agda

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)