diff --git a/CHANGELOG.md b/CHANGELOG.md index 612e45673e..e6ef862be7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -585,6 +585,21 @@ Non-backwards compatible changes Prime n = ∀ {d} → 2 ≤ d → d < n → d ∤ n ``` +### Change to the definition of `Induction.WellFounded.WfRec` (issue #2083) + +* Previously, the following definition was adopted + ```agda + WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _ + WfRec _<_ P x = ∀ y → y < x → P y + ``` + with the consequence that all arguments involving about accesibility and + wellfoundedness proofs were polluted by almost-always-inferrable explicit + arguments for the `y` position. The definition has now been changed to + make that argument *implicit*, as + ```agda + WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _ + WfRec _<_ P x = ∀ {y} → y < x → P y + ### Change in the definition of `_≤″_` (issue #1919) * The definition of `_≤″_` in `Data.Nat.Base` was previously: diff --git a/README/Data/Nat/Induction.agda b/README/Data/Nat/Induction.agda index 52b802b2b8..6f47ddc07f 100644 --- a/README/Data/Nat/Induction.agda +++ b/README/Data/Nat/Induction.agda @@ -14,6 +14,14 @@ open import Function.Base using (_∘_) open import Induction.WellFounded open import Relation.Binary.PropositionalEquality +private + + n<′1+n : ∀ {n} → n <′ suc n + n<′1+n = ≤′-refl + + n<′2+n : ∀ {n} → n <′ suc (suc n) + n<′2+n = ≤′-step ≤′-refl + -- Doubles its input. twice : ℕ → ℕ @@ -46,7 +54,7 @@ mutual half₂-step = λ { zero _ → zero ; (suc zero) _ → zero - ; (suc (suc n)) rec → suc (rec n (≤′-step ≤′-refl)) + ; (suc (suc n)) rec → suc (rec n<′2+n) } half₂ : ℕ → ℕ @@ -92,21 +100,21 @@ half₂-2+ n = begin half₂-step (2 + n) (<′-recBuilder _ half₂-step (2 + n)) ≡⟨⟩ - 1 + <′-recBuilder _ half₂-step (2 + n) n (≤′-step ≤′-refl) ≡⟨⟩ + 1 + <′-recBuilder _ half₂-step (2 + n) n<′2+n ≡⟨⟩ 1 + Some.wfRecBuilder _ half₂-step (2 + n) - (<′-wellFounded (2 + n)) n (≤′-step ≤′-refl) ≡⟨⟩ + (<′-wellFounded (2 + n)) n<′2+n ≡⟨⟩ 1 + Some.wfRecBuilder _ half₂-step (2 + n) - (acc (<′-wellFounded′ (2 + n))) n (≤′-step ≤′-refl) ≡⟨⟩ + (acc (<′-wellFounded′ (2 + n))) n<′2+n ≡⟨⟩ 1 + half₂-step n (Some.wfRecBuilder _ half₂-step n - (<′-wellFounded′ (2 + n) n (≤′-step ≤′-refl))) ≡⟨⟩ + (<′-wellFounded′ (2 + n) n<′2+n)) ≡⟨⟩ 1 + half₂-step n (Some.wfRecBuilder _ half₂-step n - (<′-wellFounded′ (1 + n) n ≤′-refl)) ≡⟨⟩ + (<′-wellFounded′ (1 + n) n<′1+n)) ≡⟨⟩ 1 + half₂-step n (Some.wfRecBuilder _ half₂-step n (<′-wellFounded n)) ≡⟨⟩ @@ -146,7 +154,7 @@ half₁-+₂ = <′-rec _ λ { zero _ → refl ; (suc zero) _ → refl ; (suc (suc n)) rec → - cong (suc ∘ suc) (rec n (≤′-step ≤′-refl)) + cong (suc ∘ suc) (rec n<′2+n) } half₂-+₂ : ∀ n → half₂ (twice n) ≡ n @@ -154,6 +162,6 @@ half₂-+₂ = <′-rec _ λ { zero _ → refl ; (suc zero) _ → refl ; (suc (suc n)) rec → - cong (suc ∘ suc) (rec n (≤′-step ≤′-refl)) + cong (suc ∘ suc) (rec n<′2+n) } diff --git a/src/Codata/Musical/Colist/Infinite-merge.agda b/src/Codata/Musical/Colist/Infinite-merge.agda index 769c0ccc94..cbc142ff5a 100644 --- a/src/Codata/Musical/Colist/Infinite-merge.agda +++ b/src/Codata/Musical/Colist/Infinite-merge.agda @@ -195,7 +195,7 @@ Any-merge {P = P} xss = mk↔ₛ′ (proj₁ ∘ to xss) from to∘from (proj₂ ... | inj₂ q | P.refl | q≤p = Prod.map there (P.cong (there ∘ (Inverse.from (Any-⋎P xs)) ∘ inj₂)) - (rec (♭ xss , q) (s≤′s q≤p)) + (rec (s≤′s q≤p)) to∘from = λ p → from-injective _ _ (proj₂ (to xss (from p))) diff --git a/src/Data/Bool/Properties.agda b/src/Data/Bool/Properties.agda index 0449279a7d..3c1c25d245 100644 --- a/src/Data/Bool/Properties.agda +++ b/src/Data/Bool/Properties.agda @@ -195,8 +195,8 @@ true _ x - acc-map {n} (acc rs) = acc λ y y>x → - acc-map (rs (n ∸ toℕ y) (ℕ.∸-monoʳ-< y>x (toℕ≤n y))) + acc-map (acc rs) = acc λ y>x → acc-map (rs (ℕ.∸-monoʳ-< y>x (toℕ≤n _))) >-wellFounded : WellFounded {A = Fin n} _>_ >-wellFounded {n} x = acc-map (ℕ.<-wellFounded (n ∸ toℕ x)) @@ -96,7 +95,7 @@ private induct {i} (acc rec) with n ℕ.≟ toℕ i ... | yes n≡i = subst P (toℕ-injective (trans (toℕ-fromℕ n) n≡i)) Pₙ ... | no n≢i = subst P (inject₁-lower₁ i n≢i) (Pᵢ₊₁⇒Pᵢ _ Pᵢ₊₁) - where Pᵢ₊₁ = induct (rec _ (ℕ.≤-reflexive (cong suc (sym (toℕ-lower₁ i n≢i))))) + where Pᵢ₊₁ = induct (rec (ℕ.≤-reflexive (cong suc (sym (toℕ-lower₁ i n≢i))))) ------------------------------------------------------------------------ -- Well-foundedness of other (strict) partial orders on Fin @@ -112,20 +111,20 @@ module _ {_≈_ : Rel (Fin n) ℓ} where spo-wellFounded : ∀ {r} {_⊏_ : Rel (Fin n) r} → IsStrictPartialOrder _≈_ _⊏_ → WellFounded _⊏_ - spo-wellFounded {_} {_⊏_} isSPO i = go n i pigeon where + spo-wellFounded {_} {_⊏_} isSPO i = go n pigeon where module ⊏ = IsStrictPartialOrder isSPO - go : ∀ m i → - ((xs : Vec (Fin n) m) → Linked (flip _⊏_) (i ∷ xs) → WellFounded _⊏_) → + go : ∀ m {i} → + ({xs : Vec (Fin n) m} → Linked (flip _⊏_) (i ∷ xs) → WellFounded _⊏_) → Acc _⊏_ i - go zero i k = k [] [-] i - go (suc m) i k = acc $ λ j j⊏i → go m j (λ xs i∷xs↑ → k (j ∷ xs) (j⊏i ∷ i∷xs↑)) + go zero k = k [-] _ + go (suc m) k = acc λ j⊏i → go m λ i∷xs↑ → k (j⊏i ∷ i∷xs↑) - pigeon : (xs : Vec (Fin n) n) → Linked (flip _⊏_) (i ∷ xs) → WellFounded _⊏_ - pigeon xs i∷xs↑ = + pigeon : {xs : Vec (Fin n) n} → Linked (flip _⊏_) (i ∷ xs) → WellFounded _⊏_ + pigeon {xs} i∷xs↑ = let (i₁ , i₂ , i₁