πŸ“₯ Download raw
module Padova2025.ProvingBasics.Equality.Lists where

Results on lists

open import Padova2025.ProgrammingBasics.Naturals.Base
open import Padova2025.ProgrammingBasics.Naturals.Arithmetic
open import Padova2025.ProgrammingBasics.Lists
open import Padova2025.ProvingBasics.Equality.Base
open import Padova2025.ProvingBasics.Equality.General

Exercise: Double reverse

For the following exercise, note that reverse (x ∷ xs) is defined as reverse xs ∷ʳ x.

reverse-∷ʳ : {A : Set} (ys : List A) (x : A) β†’ reverse (ys ∷ʳ x) ≑ (x ∷ reverse ys)
reverse-∷ʳ = {!!}
reverse-reverse : {A : Set} (xs : List A) β†’ reverse (reverse xs) ≑ xs
reverse-reverse = {!!}

Exercise: Associativity of concatenation

++-assoc : {A : Set} (xs ys zs : List A) β†’ (xs ++ ys) ++ zs ≑ xs ++ (ys ++ zs)
++-assoc = {!!}

Exercise: Length as a homomorphism

length-homo : {A : Set} (xs ys : List A) β†’ length (xs ++ ys) ≑ length xs + length ys
length-homo = {!!}

Exercise: Replication as a natural transformation

replicate-natural
  : {A B : Set} (f : A β†’ B) (n : β„•) (x : A)
  β†’ map f (replicate n x) ≑ replicate n (f x)
replicate-natural = {!!}

Exercise: Snocking and concatenation

snoc-++ : {A : Set} (a : A) (xs ys : List A) β†’ (xs ∷ʳ a) ++ ys ≑ xs ++ (a ∷ ys)
snoc-++ = {!!}

Exercise: Empty list neutral for concatenation

++-[] : {A : Set} (xs : List A) β†’ xs ++ [] ≑ xs
++-[] = {!!}