Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strict and non-strict transitive property names #2089

Merged
merged 19 commits into from
Oct 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -1413,7 +1413,7 @@ Deprecated names
m<n⇒m≤pred[n] ↦ i<j⇒i≤pred[j]
-1*n≡-n ↦ -1*i≡-i
m*n≡0⇒m≡0∨n≡0 ↦ i*j≡0⇒i≡0∨j≡0
∣m*n∣≡∣m∣*∣n∣ ↦ ∣i*j∣≡∣i∣*∣j∣
∣m*n∣≡∣m∣*∣n∣ ↦ ∣i*j∣≡∣i∣*∣j∣
m≤m+n ↦ i≤i+j
n≤m+n ↦ i≤j+i
m-n≤m ↦ i≤i-j
Expand Down Expand Up @@ -1521,6 +1521,9 @@ Deprecated names
≤-stepsˡ ↦ m≤n⇒m≤o+n
≤-stepsʳ ↦ m≤n⇒m≤n+o
<-step ↦ m<n⇒m<1+n

<-transʳ ↦ ≤-<-trans
<-transˡ ↦ <-≤-trans
```

* In `Data.Rational.Unnormalised.Base`:
Expand Down Expand Up @@ -3248,6 +3251,9 @@ Additions to existing modules

* Added new definitions in `Relation.Binary.Definitions`:
```
RightTrans R S = Trans R S R
LeftTrans S R = Trans S R R

Dense _<_ = ∀ {x y} → x < y → ∃[ z ] x < z × z < y
Cotransitive _#_ = ∀ {x y} → x # y → ∀ z → (x # z) ⊎ (z # y)
Tight _≈_ _#_ = ∀ x y → (¬ x # y → x ≈ y) × (x ≈ y → ¬ x # y)
Expand Down
16 changes: 8 additions & 8 deletions src/Data/Integer/Properties.agda
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ open import Relation.Binary.Bundles using
open import Relation.Binary.Structures
using (IsPreorder; IsTotalPreorder; IsPartialOrder; IsTotalOrder; IsDecTotalOrder; IsStrictPartialOrder; IsStrictTotalOrder)
open import Relation.Binary.Definitions
using (DecidableEquality; Reflexive; Transitive; Antisymmetric; Total; Decidable; Irrelevant; Irreflexive; Asymmetric; Trans; Trichotomous; tri≈; tri<; tri>)
using (DecidableEquality; Reflexive; Transitive; Antisymmetric; Total; Decidable; Irrelevant; Irreflexive; Asymmetric; LeftTrans; RightTrans; Trichotomous; tri≈; tri<; tri>)
open import Relation.Binary.PropositionalEquality
open import Relation.Nullary using (yes; no; ¬_)
import Relation.Nullary.Reflects as Reflects
Expand Down Expand Up @@ -276,17 +276,17 @@ drop‿-<- (-<- n<m) = n<m
<-asym (-<- n<m) = ℕ.<-asym n<m ∘ drop‿-<-
<-asym (+<+ m<n) = ℕ.<-asym m<n ∘ drop‿+<+

≤-<-trans : Trans _≤_ _<_ _<_
≤-<-trans (-≤- n≤m) (-<- o<n) = -<- (ℕ.<-transˡ o<n n≤m)
≤-<-trans : LeftTrans _≤_ _<_
≤-<-trans (-≤- n≤m) (-<- o<n) = -<- (ℕ.<-≤-trans o<n n≤m)
≤-<-trans (-≤- n≤m) -<+ = -<+
≤-<-trans -≤+ (+<+ m<o) = -<+
≤-<-trans (+≤+ m≤n) (+<+ n<o) = +<+ (ℕ.<-transʳ m≤n n<o)
≤-<-trans (+≤+ m≤n) (+<+ n<o) = +<+ (ℕ.≤-<-trans m≤n n<o)

<-≤-trans : Trans _<_ _≤_ _<_
<-≤-trans (-<- n<m) (-≤- o≤n) = -<- (ℕ.<-transʳ o≤n n<m)
<-≤-trans : RightTrans _<_ _≤_
<-≤-trans (-<- n<m) (-≤- o≤n) = -<- (ℕ.≤-<-trans o≤n n<m)
<-≤-trans (-<- n<m) -≤+ = -<+
<-≤-trans -<+ (+≤+ m≤n) = -<+
<-≤-trans (+<+ m<n) (+≤+ n≤o) = +<+ (ℕ.<-transˡ m<n n≤o)
<-≤-trans (+<+ m<n) (+≤+ n≤o) = +<+ (ℕ.<-≤-trans m<n n≤o)

<-trans : Transitive _<_
<-trans m<n n<p = ≤-<-trans (<⇒≤ m<n) n<p
Expand Down Expand Up @@ -614,7 +614,7 @@ n⊖n≡0 n with n ℕ.<ᵇ n in leq

⊖-≥ : m ℕ.≥ n → m ⊖ n ≡ + (m ∸ n)
⊖-≥ {m} {n} p with m ℕ.<ᵇ n | Reflects.invert (ℕ.<ᵇ-reflects-< m n)
... | true | q = contradiction (ℕ.<-transʳ p q) (ℕ.<-irrefl refl)
... | true | q = contradiction (ℕ.≤-<-trans p q) (ℕ.<-irrefl refl)
... | false | q = refl

≤-⊖ : m ℕ.≤ n → n ⊖ m ≡ + (n ∸ m)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Unique-resp-↭ = AllPairs-resp-↭ (_∘ ≈-sym) ≉-resp₂
0<steps (prep eq xs↭ys) = m<n⇒m<1+n (0<steps xs↭ys)
0<steps (swap eq₁ eq₂ xs↭ys) = m<n⇒m<1+n (0<steps xs↭ys)
0<steps (trans xs↭ys xs↭ys₁) =
<-transˡ (0<steps xs↭ys) (m≤m+n (steps xs↭ys) (steps xs↭ys₁))
<-≤-trans (0<steps xs↭ys) (m≤m+n (steps xs↭ys) (steps xs↭ys₁))

steps-respˡ : ∀ {xs ys zs} (ys≋xs : ys ≋ xs) (ys↭zs : ys ↭ zs) →
steps (↭-respˡ-≋ ys≋xs ys↭zs) ≡ steps ys↭zs
Expand Down
2 changes: 1 addition & 1 deletion src/Data/Nat/Coprimality.agda
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,4 @@ prime⇒coprime (suc (suc _)) p _ _ _ {0} (0∣m , _) =
prime⇒coprime (suc (suc _)) _ _ _ _ {1} _ = refl
prime⇒coprime (suc (suc _)) p (suc _) _ n<m {(suc (suc _))} (d∣m , d∣n) =
contradiction d∣m (p 2≤d d<m)
where 2≤d = s≤s (s≤s z≤n); d<m = <-transˡ (s≤s (∣⇒≤ d∣n)) n<m
where 2≤d = s≤s (s≤s z≤n); d<m = <-≤-trans (s≤s (∣⇒≤ d∣n)) n<m
40 changes: 21 additions & 19 deletions src/Data/Nat/DivMod.agda
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ open import Relation.Nullary.Decidable using (False; toWitnessFalse)

open ≤-Reasoning

private
variable
m n o p : ℕ

------------------------------------------------------------------------
-- Definitions

Expand All @@ -46,10 +50,10 @@ m%n≡m∸m/n*n m n = begin-equality
------------------------------------------------------------------------
-- Properties of _%_

%-congˡ : ∀ {m n o} .⦃ _ : NonZero o ⦄ → m ≡ n → m % o ≡ n % o
%-congˡ : .⦃ _ : NonZero o ⦄ → m ≡ n → m % o ≡ n % o
%-congˡ refl = refl

%-congʳ : ∀ {m n o} .⦃ _ : NonZero m ⦄ .⦃ _ : NonZero n ⦄ → m ≡ n →
%-congʳ : .⦃ _ : NonZero m ⦄ .⦃ _ : NonZero n ⦄ → m ≡ n →
o % m ≡ o % n
%-congʳ refl = refl

Expand All @@ -73,7 +77,7 @@ m%n%n≡m%n m (suc n-1) = modₕ-idem 0 m n-1
(m + n) % n ≡⟨ [m+n]%n≡m%n m n ⟩
m % n ∎

m≤n⇒[n∸m]%m≡n%m : ∀ {m n} .⦃ _ : NonZero m ⦄ → m ≤ n →
m≤n⇒[n∸m]%m≡n%m : .⦃ _ : NonZero m ⦄ → m ≤ n →
(n ∸ m) % m ≡ n % m
m≤n⇒[n∸m]%m≡n%m {m} {n} m≤n = begin-equality
(n ∸ m) % m ≡˘⟨ [m+n]%n≡m%n (n ∸ m) m ⟩
Expand Down Expand Up @@ -108,7 +112,7 @@ m∣n⇒o%n%m≡o%m m n@.(p * m) o (divides-refl p) = begin-equality
o ∎

m*n%n≡0 : ∀ m n .{{_ : NonZero n}} → (m * n) % n ≡ 0
m*n%n≡0 m (suc n-1) = [m+kn]%n≡m%n 0 m (suc n-1)
m*n%n≡0 m n@(suc _) = [m+kn]%n≡m%n 0 m n

m%n<n : ∀ m n .{{_ : NonZero n}} → m % n < n
m%n<n m (suc n-1) = s≤s (a[modₕ]n<n 0 m n-1)
Expand All @@ -119,12 +123,12 @@ m%n≤n m n = <⇒≤ (m%n<n m n)
m%n≤m : ∀ m n .{{_ : NonZero n}} → m % n ≤ m
m%n≤m m (suc n-1) = a[modₕ]n≤a 0 m n-1

m≤n⇒m%n≡m : ∀ {m n} → m ≤ n → m % suc n ≡ m
m≤n⇒m%n≡m {m} {n} m≤n with ≤⇒≤″ m≤n
... | less-than-or-equal {k} refl = a≤n⇒a[modₕ]n≡a 0 (m + k) m k
m≤n⇒m%n≡m : m ≤ n → m % suc n ≡ m
m≤n⇒m%n≡m {m = m} m≤n with less-than-or-equal {k} refl ← ≤⇒≤″ m≤n
= a≤n⇒a[modₕ]n≡a 0 (m + k) m k

m<n⇒m%n≡m : ∀ {m n} .⦃ _ : NonZero n ⦄ → m < n → m % n ≡ m
m<n⇒m%n≡m {m} {suc n} m<n = m≤n⇒m%n≡m (<⇒≤pred m<n)
m<n⇒m%n≡m : .⦃ _ : NonZero n ⦄ → m < n → m % n ≡ m
m<n⇒m%n≡m {n = suc _} m<n = m≤n⇒m%n≡m (<⇒≤pred m<n)

%-pred-≡0 : ∀ {m n} .{{_ : NonZero n}} → (suc m % n) ≡ 0 → (m % n) ≡ n ∸ 1
%-pred-≡0 {m} {suc n-1} eq = a+1[modₕ]n≡0⇒a[modₕ]n≡n-1 0 n-1 m eq
Expand Down Expand Up @@ -182,12 +186,10 @@ m<[1+n%d]⇒m≤[n%d] {m} n (suc d-1) = k<1+a[modₕ]n⇒k≤a[modₕ]n 0 m n d-
------------------------------------------------------------------------
-- Properties of _/_

/-congˡ : ∀ {m n o : ℕ} .{{_ : NonZero o}} →
m ≡ n → m / o ≡ n / o
/-congˡ : .{{_ : NonZero o}} → m ≡ n → m / o ≡ n / o
/-congˡ refl = refl

/-congʳ : ∀ {m n o : ℕ} .{{_ : NonZero n}} .{{_ : NonZero o}} →
n ≡ o → m / n ≡ m / o
/-congʳ : .{{_ : NonZero n}} .{{_ : NonZero o}} → n ≡ o → m / n ≡ m / o
/-congʳ refl = refl

0/n≡0 : ∀ n .{{_ : NonZero n}} → 0 / n ≡ 0
Expand All @@ -205,7 +207,7 @@ m*n/n≡m m (suc n-1) = a*n[divₕ]n≡a 0 m n-1
m/n*n≡m : ∀ {m n} .{{_ : NonZero n}} → n ∣ m → m / n * n ≡ m
m/n*n≡m {_} {n@(suc _)} (divides-refl q) = cong (_* n) (m*n/n≡m q n)

m*[n/m]≡n : ∀ {m n} .{{_ : NonZero m}} → m ∣ n → m * (n / m) ≡ n
m*[n/m]≡n : .{{_ : NonZero m}} → m ∣ n → m * (n / m) ≡ n
m*[n/m]≡n {m} m∣n = trans (*-comm m (_ / m)) (m/n*n≡m m∣n)

m/n*n≤m : ∀ m n .{{_ : NonZero n}} → (m / n) * n ≤ m
Expand All @@ -227,11 +229,11 @@ m/n<m m n n≥2 = *-cancelʳ-< _ (m / n) m (begin-strict
m <⟨ m<m*n m n n≥2 ⟩
m * n ∎)

/-mono-≤ : ∀ {m n o p} .{{_ : NonZero o}} .{{_ : NonZero p}} →
/-mono-≤ : .{{_ : NonZero o}} .{{_ : NonZero p}} →
m ≤ n → o ≥ p → m / o ≤ n / p
/-mono-≤ m≤n (s≤s o≥p) = divₕ-mono-≤ 0 m≤n o≥p

/-monoˡ-≤ : ∀ {m n} o .{{_ : NonZero o}} → m ≤ n → m / o ≤ n / o
/-monoˡ-≤ : ∀ o .{{_ : NonZero o}} → m ≤ n → m / o ≤ n / o
/-monoˡ-≤ o m≤n = /-mono-≤ m≤n (≤-refl {o})

/-monoʳ-≤ : ∀ m {n o} .{{_ : NonZero n}} .{{_ : NonZero o}} →
Expand Down Expand Up @@ -330,7 +332,7 @@ m<n*o⇒m/o<n {m} {suc n} {o} m<n*o with m <? o
[m∸n]/n≡m/n∸1 : ∀ m n .⦃ _ : NonZero n ⦄ → (m ∸ n) / n ≡ pred (m / n)
[m∸n]/n≡m/n∸1 m n with m <? n
... | yes m<n = begin-equality
(m ∸ n) / n ≡⟨ m<n⇒m/n≡0 (<-transʳ (m∸n≤m m n) m<n) ⟩
(m ∸ n) / n ≡⟨ m<n⇒m/n≡0 (≤-<-trans (m∸n≤m m n) m<n) ⟩
0 ≡⟨⟩
0 ∸ 1 ≡˘⟨ cong (_∸ 1) (m<n⇒m/n≡0 m<n) ⟩
m / n ∸ 1 ≡⟨⟩
Expand Down Expand Up @@ -463,11 +465,11 @@ _div_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} → ℕ
_div_ = _/_

_mod_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} → Fin divisor
m mod (suc n) = fromℕ< (m%n<n m (suc n))
m mod n@(suc _) = fromℕ< (m%n<n m n)

_divMod_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} →
DivMod dividend divisor
m divMod n@(suc n-1) = result (m / n) (m mod n) (begin-equality
m divMod n@(suc _) = result (m / n) (m mod n) (begin-equality
m ≡⟨ m≡m%n+[m/n]*n m n ⟩
m % n + [m/n]*n ≡˘⟨ cong (_+ [m/n]*n) (toℕ-fromℕ< (m%n<n m n)) ⟩
toℕ (fromℕ< (m%n<n m n)) + [m/n]*n ∎)
Expand Down
6 changes: 3 additions & 3 deletions src/Data/Nat/DivMod/Core.agda
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,14 @@ private
divₕ-offsetEq d (suc n) zero zero j≤d k≤d (inj₂′ (refl , _)) =
divₕ-offsetEq d n d d ≤-refl ≤-refl (inj₂′ (refl , a[modₕ]n<n 0 n d , ≤-refl))
divₕ-offsetEq d (suc n) zero zero j≤d k≤d (inj₃ (_ , 0<mod , mod≤0)) =
contradiction (<-transˡ 0<mod mod≤0) λ()
contradiction (<-≤-trans 0<mod mod≤0) λ()
-- (0 , suc) cases
divₕ-offsetEq d (suc n) zero (suc k) j≤d k≤d (inj₁ (refl , _ , 1+k<mod)) =
divₕ-offsetEq d n d k ≤-refl (<⇒≤ k≤d) (inj₃ (refl , k<1+a[modₕ]n⇒k≤a[modₕ]n 0 (suc k) n d 1+k<mod , a[modₕ]n<n 0 n d))
divₕ-offsetEq d (suc n) zero (suc k) j≤d k≤d (inj₂′ (refl , mod≤0 , _)) =
divₕ-offsetEq d n d k ≤-refl (<⇒≤ k≤d) (inj₃ (refl , subst (k <_) (sym (a+1[modₕ]n≡0⇒a[modₕ]n≡n-1 0 d n (n≤0⇒n≡0 mod≤0))) k≤d , a[modₕ]n<n 0 n d))
divₕ-offsetEq d (suc n) zero (suc k) j≤d k≤d (inj₃ (_ , 1+k<mod , mod≤0)) =
contradiction (<-transˡ 1+k<mod mod≤0) λ()
contradiction (<-≤-trans 1+k<mod mod≤0) λ()
-- (suc , 0) cases
divₕ-offsetEq d (suc n) (suc j) zero j≤d k≤d (inj₁ (_ , () , _))
divₕ-offsetEq d (suc n) (suc j) zero j≤d k≤d (inj₂′ (_ , _ , ()))
Expand All @@ -174,7 +174,7 @@ private
... | yes mod≡0 = divₕ-offsetEq d n j k (<⇒≤ j≤d) (<⇒≤ k≤d) (inj₁ (eq , j≤k , subst (k <_) (sym (a+1[modₕ]n≡0⇒a[modₕ]n≡n-1 0 d n mod≡0)) k≤d))
... | no mod≢0 = divₕ-offsetEq d n j k (<⇒≤ j≤d) (<⇒≤ k≤d) (inj₂′ (eq , 1+a[modₕ]n≤1+k⇒a[modₕ]n≤k 0 j n d (n≢0⇒n>0 mod≢0) mod≤1+j , j≤k))
divₕ-offsetEq d (suc n) (suc j) (suc k) j≤d k≤d (inj₃ (eq , k<mod , mod≤1+j)) =
divₕ-offsetEq d n j k (<⇒≤ j≤d) (<⇒≤ k≤d) (inj₃ (eq , k<1+a[modₕ]n⇒k≤a[modₕ]n 0 (suc k) n d k<mod , 1+a[modₕ]n≤1+k⇒a[modₕ]n≤k 0 j n d (<-transʳ z≤n k<mod) mod≤1+j))
divₕ-offsetEq d n j k (<⇒≤ j≤d) (<⇒≤ k≤d) (inj₃ (eq , k<1+a[modₕ]n⇒k≤a[modₕ]n 0 (suc k) n d k<mod , 1+a[modₕ]n≤1+k⇒a[modₕ]n≤k 0 j n d (≤-<-trans z≤n k<mod) mod≤1+j))

------------------------------------------------------------------------
-- Lemmas for divₕ that also have an interpretation for _/_
Expand Down
Loading