Skip to content

Commit 487ac31

Browse files
authored
Some properties of upTo and downFrom (#2316)
* Some properties of upTo and downFrom * Rename things per review comments * Fix changelog typo
1 parent 43576bc commit 487ac31

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ Additions to existing modules
140140
pattern divides k eq = Data.Nat.Divisibility.divides k eq
141141
```
142142

143+
* In `Data.List.Properties`:
144+
```agda
145+
applyUpTo-∷ʳ : applyUpTo f n ∷ʳ f n ≡ applyUpTo f (suc n)
146+
applyDownFrom-∷ʳ : applyDownFrom (f ∘ suc) n ∷ʳ f 0 ≡ applyDownFrom f (suc n)
147+
upTo-∷ʳ : upTo n ∷ʳ n ≡ upTo (suc n)
148+
downFrom-∷ʳ : applyDownFrom suc n ∷ʳ 0 ≡ downFrom (suc n)
149+
reverse-applyUpTo : reverse (applyUpTo f n) ≡ applyDownFrom f n
150+
reverse-upTo : reverse (upTo n) ≡ downFrom n
151+
reverse-applyDownFrom : reverse (applyDownFrom f n) ≡ applyUpTo f n
152+
reverse-downFrom : reverse (downFrom n) ≡ upTo n
153+
```
154+
143155
* In `Data.List.Relation.Unary.All.Properties`:
144156
```agda
145157
All-catMaybes⁺ : All (Maybe.All P) xs → All P (catMaybes xs)

src/Data/List/Properties.agda

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,8 +657,12 @@ lookup-applyUpTo : ∀ (f : ℕ → A) n i → lookup (applyUpTo f n) i ≡ f (t
657657
lookup-applyUpTo f (suc n) zero = refl
658658
lookup-applyUpTo f (suc n) (suc i) = lookup-applyUpTo (f ∘ suc) n i
659659

660+
applyUpTo-∷ʳ : (f : A) n applyUpTo f n ∷ʳ f n ≡ applyUpTo f (suc n)
661+
applyUpTo-∷ʳ f zero = refl
662+
applyUpTo-∷ʳ f (suc n) = cong (f 0 ∷_) (applyUpTo-∷ʳ (f ∘ suc) n)
663+
660664
------------------------------------------------------------------------
661-
-- applyUpTo
665+
-- applyDownFrom
662666

663667
module _ (f : A) where
664668

@@ -670,6 +674,10 @@ module _ (f : ℕ → A) where
670674
lookup-applyDownFrom (suc n) zero = refl
671675
lookup-applyDownFrom (suc n) (suc i) = lookup-applyDownFrom n i
672676

677+
applyDownFrom-∷ʳ : n applyDownFrom (f ∘ suc) n ∷ʳ f 0 ≡ applyDownFrom f (suc n)
678+
applyDownFrom-∷ʳ zero = refl
679+
applyDownFrom-∷ʳ (suc n) = cong (f (suc n) ∷_) (applyDownFrom-∷ʳ n)
680+
673681
------------------------------------------------------------------------
674682
-- upTo
675683

@@ -679,6 +687,9 @@ length-upTo = length-applyUpTo id
679687
lookup-upTo : n i lookup (upTo n) i ≡ toℕ i
680688
lookup-upTo = lookup-applyUpTo id
681689

690+
upTo-∷ʳ : n upTo n ∷ʳ n ≡ upTo (suc n)
691+
upTo-∷ʳ = applyUpTo-∷ʳ id
692+
682693
------------------------------------------------------------------------
683694
-- downFrom
684695

@@ -688,6 +699,9 @@ length-downFrom = length-applyDownFrom id
688699
lookup-downFrom : n i lookup (downFrom n) i ≡ n ∸ (suc (toℕ i))
689700
lookup-downFrom = lookup-applyDownFrom id
690701

702+
downFrom-∷ʳ : n applyDownFrom suc n ∷ʳ 0 ≡ downFrom (suc n)
703+
downFrom-∷ʳ = applyDownFrom-∷ʳ id
704+
691705
------------------------------------------------------------------------
692706
-- tabulate
693707

@@ -1173,6 +1187,31 @@ reverse-foldl : ∀ (f : B → A → B) b xs →
11731187
foldl f b (reverse xs) ≡ foldr (flip f) b xs
11741188
reverse-foldl f b xs = foldl-ʳ++ f b xs
11751189

1190+
------------------------------------------------------------------------
1191+
-- reverse, applyUpTo, and applyDownFrom
1192+
1193+
reverse-applyUpTo : (f : A) n reverse (applyUpTo f n) ≡ applyDownFrom f n
1194+
reverse-applyUpTo f zero = refl
1195+
reverse-applyUpTo f (suc n) = begin
1196+
reverse (f 0 ∷ applyUpTo (f ∘ suc) n) ≡⟨ reverse-++ [ f 0 ] (applyUpTo (f ∘ suc) n) ⟩
1197+
reverse (applyUpTo (f ∘ suc) n) ∷ʳ f 0 ≡⟨ cong (_∷ʳ f 0) (reverse-applyUpTo (f ∘ suc) n) ⟩
1198+
applyDownFrom (f ∘ suc) n ∷ʳ f 0 ≡⟨ applyDownFrom-∷ʳ f n ⟩
1199+
applyDownFrom f (suc n) ∎
1200+
1201+
reverse-upTo : n reverse (upTo n) ≡ downFrom n
1202+
reverse-upTo = reverse-applyUpTo id
1203+
1204+
reverse-applyDownFrom : (f : A) n reverse (applyDownFrom f n) ≡ applyUpTo f n
1205+
reverse-applyDownFrom f zero = refl
1206+
reverse-applyDownFrom f (suc n) = begin
1207+
reverse (f n ∷ applyDownFrom f n) ≡⟨ reverse-++ [ f n ] (applyDownFrom f n) ⟩
1208+
reverse (applyDownFrom f n) ∷ʳ f n ≡⟨ cong (_∷ʳ f n) (reverse-applyDownFrom f n) ⟩
1209+
applyUpTo f n ∷ʳ f n ≡⟨ applyUpTo-∷ʳ f n ⟩
1210+
applyUpTo f (suc n) ∎
1211+
1212+
reverse-downFrom : n reverse (downFrom n) ≡ upTo n
1213+
reverse-downFrom = reverse-applyDownFrom id
1214+
11761215
------------------------------------------------------------------------
11771216
-- _∷ʳ_
11781217

0 commit comments

Comments
 (0)