Skip to content

Commit ceb9954

Browse files
jamesmckinnaMatthewDaggitt
authored andcommitted
Changes explicit argument y to implicit in Induction.WellFounded.WfRec (#2084)
1 parent 0734397 commit ceb9954

File tree

23 files changed

+158
-132
lines changed

23 files changed

+158
-132
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,21 @@ Non-backwards compatible changes
585585
Prime n = ∀ {d} → 2 ≤ d → d < n → d ∤ n
586586
```
587587

588+
### Change to the definition of `Induction.WellFounded.WfRec` (issue #2083)
589+
590+
* Previously, the following definition was adopted
591+
```agda
592+
WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _
593+
WfRec _<_ P x = ∀ y → y < x → P y
594+
```
595+
with the consequence that all arguments involving about accesibility and
596+
wellfoundedness proofs were polluted by almost-always-inferrable explicit
597+
arguments for the `y` position. The definition has now been changed to
598+
make that argument *implicit*, as
599+
```agda
600+
WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _
601+
WfRec _<_ P x = ∀ {y} → y < x → P y
602+
588603
### Change in the definition of `_≤″_` (issue #1919)
589604
590605
* The definition of `_≤″_` in `Data.Nat.Base` was previously:

README/Data/Nat/Induction.agda

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ open import Function.Base using (_∘_)
1414
open import Induction.WellFounded
1515
open import Relation.Binary.PropositionalEquality
1616

17+
private
18+
19+
n<′1+n : {n} n <′ suc n
20+
n<′1+n = ≤′-refl
21+
22+
n<′2+n : {n} n <′ suc (suc n)
23+
n<′2+n = ≤′-step ≤′-refl
24+
1725
-- Doubles its input.
1826

1927
twice :
@@ -46,7 +54,7 @@ mutual
4654
half₂-step = λ
4755
{ zero _ zero
4856
; (suc zero) _ zero
49-
; (suc (suc n)) rec suc (rec n (≤′-step ≤′-refl))
57+
; (suc (suc n)) rec suc (rec n<′2+n)
5058
}
5159

5260
half₂ :
@@ -92,21 +100,21 @@ half₂-2+ n = begin
92100

93101
half₂-step (2 + n) (<′-recBuilder _ half₂-step (2 + n)) ≡⟨⟩
94102

95-
1 + <′-recBuilder _ half₂-step (2 + n) n (≤′-step ≤′-refl) ≡⟨⟩
103+
1 + <′-recBuilder _ half₂-step (2 + n) n<′2+n ≡⟨⟩
96104

97105
1 + Some.wfRecBuilder _ half₂-step (2 + n)
98-
(<′-wellFounded (2 + n)) n (≤′-step ≤′-refl) ≡⟨⟩
106+
(<′-wellFounded (2 + n)) n<′2+n ≡⟨⟩
99107

100108
1 + Some.wfRecBuilder _ half₂-step (2 + n)
101-
(acc (<′-wellFounded′ (2 + n))) n (≤′-step ≤′-refl) ≡⟨⟩
109+
(acc (<′-wellFounded′ (2 + n))) n<′2+n ≡⟨⟩
102110

103111
1 + half₂-step n
104112
(Some.wfRecBuilder _ half₂-step n
105-
(<′-wellFounded′ (2 + n) n (≤′-step ≤′-refl))) ≡⟨⟩
113+
(<′-wellFounded′ (2 + n) n<′2+n)) ≡⟨⟩
106114

107115
1 + half₂-step n
108116
(Some.wfRecBuilder _ half₂-step n
109-
(<′-wellFounded′ (1 + n) n ≤′-refl)) ≡⟨⟩
117+
(<′-wellFounded′ (1 + n) n<′1+n)) ≡⟨⟩
110118

111119
1 + half₂-step n
112120
(Some.wfRecBuilder _ half₂-step n (<′-wellFounded n)) ≡⟨⟩
@@ -146,14 +154,14 @@ half₁-+₂ = <′-rec _ λ
146154
{ zero _ refl
147155
; (suc zero) _ refl
148156
; (suc (suc n)) rec
149-
cong (suc ∘ suc) (rec n (≤′-step ≤′-refl))
157+
cong (suc ∘ suc) (rec n<′2+n)
150158
}
151159

152160
half₂-+₂ : n half₂ (twice n) ≡ n
153161
half₂-+₂ = <′-rec _ λ
154162
{ zero _ refl
155163
; (suc zero) _ refl
156164
; (suc (suc n)) rec
157-
cong (suc ∘ suc) (rec n (≤′-step ≤′-refl))
165+
cong (suc ∘ suc) (rec n<′2+n)
158166
}
159167

src/Codata/Musical/Colist/Infinite-merge.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ Any-merge {P = P} xss = mk↔ₛ′ (proj₁ ∘ to xss) from to∘from (proj₂
195195
... | inj₂ q | P.refl | q≤p =
196196
Prod.map there
197197
(P.cong (there ∘ (Inverse.from (Any-⋎P xs)) ∘ inj₂))
198-
(rec (♭ xss , q) (s≤′s q≤p))
198+
(rec (s≤′s q≤p))
199199

200200
to∘from = λ p from-injective _ _ (proj₂ (to xss (from p)))
201201

src/Data/Bool/Properties.agda

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ true <? _ = no (λ())
195195
<-wellFounded : WellFounded _<_
196196
<-wellFounded _ = acc <-acc
197197
where
198-
<-acc : {x} y y < x Acc _<_ y
199-
<-acc false f<t = acc (λ _ λ())
198+
<-acc : {x y} y < x Acc _<_ y
199+
<-acc f<t = acc λ ()
200200

201201
-- Structures
202202

src/Data/Digit.agda

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ toNatDigits base@(suc (suc _)) n = aux (<-wellFounded-fast n) []
5656
aux {zero} _ xs = (0 ∷ xs)
5757
aux {n@(suc _)} (acc wf) xs with does (0 <? n / base)
5858
... | false = (n % base) ∷ xs
59-
... | true = aux (wf (n / base) q<n) ((n % base) ∷ xs)
59+
... | true = aux (wf q<n) ((n % base) ∷ xs)
6060
where
6161
q<n : n / base < n
6262
q<n = m/n<m n base (s<s z<s)
@@ -107,9 +107,8 @@ toDigits base@(suc (suc k)) n = <′-rec Pred helper n
107107

108108
helper : n <′-Rec Pred n Pred n
109109
helper n rec with n divMod base
110-
helper .(toℕ r + 0 * base) rec | result zero r refl = ([ r ] , refl)
111-
helper .(toℕ r + suc x * base) rec | result (suc x) r refl =
112-
cons r (rec (suc x) (lem x k (toℕ r)))
110+
... | result zero r eq = ([ r ] , P.sym eq)
111+
... | result (suc x) r refl = cons r (rec (lem x k (toℕ r)))
113112

114113
------------------------------------------------------------------------
115114
-- Showing digits

src/Data/Fin/Induction.agda

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ open WF public using (Acc; acc)
6565
induct {suc j} (acc rs) (tri< (s≤s i≤j) _ _) _ = Pᵢ⇒Pᵢ₊₁ j P[1+j]
6666
where
6767
toℕj≡toℕinjJ = sym $ toℕ-inject₁ j
68-
P[1+j] = induct (rs _ (s≤s (subst (ℕ._≤ toℕ j) toℕj≡toℕinjJ ≤-refl)))
68+
P[1+j] = induct (rs (s≤s (subst (ℕ._≤ toℕ j) toℕj≡toℕinjJ ≤-refl)))
6969
(<-cmp i $ inject₁ j) (subst (toℕ i ℕ.≤_) toℕj≡toℕinjJ i≤j)
7070

7171
<-weakInduction : (P : Pred (Fin (suc n)) ℓ)
@@ -80,8 +80,7 @@ open WF public using (Acc; acc)
8080

8181
private
8282
acc-map : {x : Fin n} Acc ℕ._<_ (n ∸ toℕ x) Acc _>_ x
83-
acc-map {n} (acc rs) = acc λ y y>x
84-
acc-map (rs (n ∸ toℕ y) (ℕ.∸-monoʳ-< y>x (toℕ≤n y)))
83+
acc-map (acc rs) = acc λ y>x acc-map (rs (ℕ.∸-monoʳ-< y>x (toℕ≤n _)))
8584

8685
>-wellFounded : WellFounded {A = Fin n} _>_
8786
>-wellFounded {n} x = acc-map (ℕ.<-wellFounded (n ∸ toℕ x))
@@ -96,7 +95,7 @@ private
9695
induct {i} (acc rec) with n ℕ.≟ toℕ i
9796
... | yes n≡i = subst P (toℕ-injective (trans (toℕ-fromℕ n) n≡i)) Pₙ
9897
... | no n≢i = subst P (inject₁-lower₁ i n≢i) (Pᵢ₊₁⇒Pᵢ _ Pᵢ₊₁)
99-
where Pᵢ₊₁ = induct (rec _ (ℕ.≤-reflexive (cong suc (sym (toℕ-lower₁ i n≢i)))))
98+
where Pᵢ₊₁ = induct (rec (ℕ.≤-reflexive (cong suc (sym (toℕ-lower₁ i n≢i)))))
10099

101100
------------------------------------------------------------------------
102101
-- Well-foundedness of other (strict) partial orders on Fin
@@ -112,20 +111,20 @@ module _ {_≈_ : Rel (Fin n) ℓ} where
112111

113112
spo-wellFounded : {r} {_⊏_ : Rel (Fin n) r}
114113
IsStrictPartialOrder _≈_ _⊏_ WellFounded _⊏_
115-
spo-wellFounded {_} {_⊏_} isSPO i = go n i pigeon where
114+
spo-wellFounded {_} {_⊏_} isSPO i = go n pigeon where
116115

117116
module = IsStrictPartialOrder isSPO
118117

119-
go : m i
120-
((xs : Vec (Fin n) m) Linked (flip _⊏_) (i ∷ xs) WellFounded _⊏_)
118+
go : m {i}
119+
({xs : Vec (Fin n) m} Linked (flip _⊏_) (i ∷ xs) WellFounded _⊏_)
121120
Acc _⊏_ i
122-
go zero i k = k [] [-] i
123-
go (suc m) i k = acc $ λ j j⊏i go m j (λ xs i∷xs↑ k (j ∷ xs) (j⊏i ∷ i∷xs↑))
121+
go zero k = k [-] _
122+
go (suc m) k = acc λ j⊏i go m λ i∷xs↑ k (j⊏i ∷ i∷xs↑)
124123

125-
pigeon : (xs : Vec (Fin n) n) Linked (flip _⊏_) (i ∷ xs) WellFounded _⊏_
126-
pigeon xs i∷xs↑ =
124+
pigeon : {xs : Vec (Fin n) n} Linked (flip _⊏_) (i ∷ xs) WellFounded _⊏_
125+
pigeon {xs} i∷xs↑ =
127126
let (i₁ , i₂ , i₁<i₂ , xs[i₁]≡xs[i₂]) = pigeonhole (n<1+n n) (Vec.lookup (i ∷ xs)) in
128-
let xs[i₁]⊏xs[i₂] = Linkedₚ.lookup⁺ (Ord.transitive _⊏_ ⊏.trans) {xs = i ∷ xs} i∷xs↑ i₁<i₂ in
127+
let xs[i₁]⊏xs[i₂] = Linkedₚ.lookup⁺ (Ord.transitive _⊏_ ⊏.trans) i∷xs↑ i₁<i₂ in
129128
let xs[i₁]⊏xs[i₁] = ⊏.<-respʳ-≈ (⊏.Eq.reflexive xs[i₁]≡xs[i₂]) xs[i₁]⊏xs[i₂] in
130129
contradiction xs[i₁]⊏xs[i₁] (⊏.irrefl ⊏.Eq.refl)
131130

src/Data/Graph/Acyclic.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ module _ {ℓ e} {N : Set ℓ} {E : Set e} where
313313
expand n rec (c & g) =
314314
node (label c)
315315
(List.map
316-
(Prod.map id (λ i rec (n - suc i) (lemma n i) (g [ i ])))
316+
(Prod.map id (λ i rec (lemma n i) (g [ i ])))
317317
(successors c))
318318

319319
-- Performs the toTree expansion once for each node.

src/Data/List/Relation/Binary/Permutation/Setoid/Properties.agda

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -384,15 +384,15 @@ split v as bs p = helper as bs p (<-wellFounded (steps p))
384384
helper (a ∷ []) bs (refl eq) _ = [ a ] , bs , eq
385385
helper (a ∷ b ∷ as) bs (refl eq) _ = a ∷ b ∷ as , bs , eq
386386
helper [] bs (prep v≈x _) _ = [] , _ , v≈x ∷ ≋-refl
387-
helper (a ∷ as) bs (prep eq as↭xs) (acc rec) with helper as bs as↭xs (rec _ ≤-refl)
387+
helper (a ∷ as) bs (prep eq as↭xs) (acc rec) with helper as bs as↭xs (rec ≤-refl)
388388
... | (ps , qs , eq₂) = a ∷ ps , qs , eq ∷ eq₂
389389
helper [] (b ∷ bs) (swap x≈b y≈v _) _ = [ b ] , _ , x≈b ∷ y≈v ∷ ≋-refl
390390
helper (a ∷ []) bs (swap x≈v y≈a ↭) _ = [] , a ∷ _ , x≈v ∷ y≈a ∷ ≋-refl
391-
helper (a ∷ b ∷ as) bs (swap x≈b y≈a as↭xs) (acc rec) with helper as bs as↭xs (rec _ ≤-refl)
391+
helper (a ∷ b ∷ as) bs (swap x≈b y≈a as↭xs) (acc rec) with helper as bs as↭xs (rec ≤-refl)
392392
... | (ps , qs , eq) = b ∷ a ∷ ps , qs , x≈b ∷ y≈a ∷ eq
393-
helper as bs (trans ↭₁ ↭₂) (acc rec) with helper as bs ↭₂ (rec _ (m<n+m (steps ↭₂) (0<steps ↭₁)))
393+
helper as bs (trans ↭₁ ↭₂) (acc rec) with helper as bs ↭₂ (rec (m<n+m (steps ↭₂) (0<steps ↭₁)))
394394
... | (ps , qs , eq) = helper ps qs (↭-respʳ-≋ eq ↭₁)
395-
(rec _ (subst (_< _) (sym (steps-respʳ eq ↭₁)) (m<m+n (steps ↭₁) (0<steps ↭₂))))
395+
(rec (subst (_< _) (sym (steps-respʳ eq ↭₁)) (m<m+n (steps ↭₁) (0<steps ↭₂))))
396396

397397
------------------------------------------------------------------------
398398
-- filter

src/Data/List/Sort/MergeSort.agda

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,21 @@ open PermutationReasoning
4444
-- Definition
4545

4646
mergePairs : List (List A) List (List A)
47-
mergePairs (xs ∷ ys ∷ xss) = merge _≤?_ xs ys ∷ mergePairs xss
47+
mergePairs (xs ∷ ys ∷ yss) = merge _≤?_ xs ys ∷ mergePairs yss
4848
mergePairs xss = xss
4949

5050
private
51-
length-mergePairs : xs ys xss length (mergePairs (xs ∷ ys ∷ xss)) < length (xs ∷ ys ∷ xss)
51+
length-mergePairs : xs ys yss let zss = xs ∷ ys ∷ yss in
52+
length (mergePairs zss) < length zss
5253
length-mergePairs _ _ [] = s<s z<s
53-
length-mergePairs _ _ (xss ∷ []) = s<s (s<s z<s)
54-
length-mergePairs _ _ (xs ∷ ys ∷ xss) = s<s (m<n⇒m<1+n (length-mergePairs xs ys xss))
54+
length-mergePairs _ _ (xs ∷ []) = s<s (s<s z<s)
55+
length-mergePairs _ _ (xs ∷ ys ∷ yss) = s<s (m<n⇒m<1+n (length-mergePairs xs ys yss))
5556

5657
mergeAll : (xss : List (List A)) Acc _<_ (length xss) List A
5758
mergeAll [] _ = []
5859
mergeAll (xs ∷ []) _ = xs
59-
mergeAll (xs ∷ ys ∷ xss) (acc rec) = mergeAll
60-
(mergePairs (xs ∷ ys ∷ xss)) (rec _ (length-mergePairs xs ys xss))
60+
mergeAll xss@(xs ∷ ys ∷ yss) (acc rec) = mergeAll
61+
(mergePairs xss) (rec (length-mergePairs xs ys yss))
6162

6263
sort : List A List A
6364
sort xs = mergeAll (map [_] xs) (<-wellFounded-fast _)

src/Data/Nat/DivMod.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ m*n/m*o≡n/o m@(suc _) n o = helper (<-wellFounded n)
294294
... | no n≮o = begin-equality
295295
(m * n) / (m * o) ≡⟨ m/n≡1+[m∸n]/n (*-monoʳ-≤ m (≮⇒≥ n≮o)) ⟩
296296
1 + (m * n ∸ m * o) / (m * o) ≡˘⟨ cong (λ v 1 + v / (m * o)) (*-distribˡ-∸ m n o) ⟩
297-
1 + (m * (n ∸ o)) / (m * o) ≡⟨ cong suc (helper (rec (n ∸ o) n∸o<n)) ⟩
297+
1 + (m * (n ∸ o)) / (m * o) ≡⟨ cong suc (helper (rec n∸o<n)) ⟩
298298
1 + (n ∸ o) / o ≡˘⟨ cong₂ _+_ (n/n≡1 o) refl ⟩
299299
o / o + (n ∸ o) / o ≡˘⟨ +-distrib-/-∣ˡ (n ∸ o) (divides 1 ((sym (*-identityˡ o)))) ⟩
300300
(o + (n ∸ o)) / o ≡⟨ cong (_/ o) (m+[n∸m]≡n (≮⇒≥ n≮o)) ⟩

0 commit comments

Comments
 (0)