@@ -657,8 +657,12 @@ lookup-applyUpTo : ∀ (f : ℕ → A) n i → lookup (applyUpTo f n) i ≡ f (t
657
657
lookup-applyUpTo f (suc n) zero = refl
658
658
lookup-applyUpTo f (suc n) (suc i) = lookup-applyUpTo (f ∘ suc) n i
659
659
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
+
660
664
------------------------------------------------------------------------
661
- -- applyUpTo
665
+ -- applyDownFrom
662
666
663
667
module _ (f : ℕ → A) where
664
668
@@ -670,6 +674,10 @@ module _ (f : ℕ → A) where
670
674
lookup-applyDownFrom (suc n) zero = refl
671
675
lookup-applyDownFrom (suc n) (suc i) = lookup-applyDownFrom n i
672
676
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
+
673
681
------------------------------------------------------------------------
674
682
-- upTo
675
683
@@ -679,6 +687,9 @@ length-upTo = length-applyUpTo id
679
687
lookup-upTo : ∀ n i → lookup (upTo n) i ≡ toℕ i
680
688
lookup-upTo = lookup-applyUpTo id
681
689
690
+ upTo-∷ʳ : ∀ n → upTo n ∷ʳ n ≡ upTo (suc n)
691
+ upTo-∷ʳ = applyUpTo-∷ʳ id
692
+
682
693
------------------------------------------------------------------------
683
694
-- downFrom
684
695
@@ -688,6 +699,9 @@ length-downFrom = length-applyDownFrom id
688
699
lookup-downFrom : ∀ n i → lookup (downFrom n) i ≡ n ∸ (suc (toℕ i))
689
700
lookup-downFrom = lookup-applyDownFrom id
690
701
702
+ downFrom-∷ʳ : ∀ n → applyDownFrom suc n ∷ʳ 0 ≡ downFrom (suc n)
703
+ downFrom-∷ʳ = applyDownFrom-∷ʳ id
704
+
691
705
------------------------------------------------------------------------
692
706
-- tabulate
693
707
@@ -1173,6 +1187,31 @@ reverse-foldl : ∀ (f : B → A → B) b xs →
1173
1187
foldl f b (reverse xs) ≡ foldr (flip f) b xs
1174
1188
reverse-foldl f b xs = foldl-ʳ++ f b xs
1175
1189
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
+
1176
1215
------------------------------------------------------------------------
1177
1216
-- _∷ʳ_
1178
1217
0 commit comments