# ITP Blatt 04

Besprechung: am 21.05.2026

```
{-# OPTIONS --allow-unsolved-metas #-}
open import Level using (Level)
open import Data.Nat
open import Data.Fin
open import Data.List
open import Data.Empty
open import Data.Vec hiding (length)
open import Data.Product
open import Data.Unit
open import Data.Sum
open import Data.Bool hiding (_≤_; _<_)
open import Function.Base using (_∘_; id; case_of_)
import Level as L
open import Relation.Binary.PropositionalEquality
open import Relation.Nullary.Negation

module _ where

private
  variable
    ℓ ℓ' ℓ'' : Level
    A : Set ℓ
    B : Set ℓ'
    C : Set ℓ''

```

## Fin-access
Definieren Sie Index-Zugriff auf eine Liste mittels `Data.Fin`:
```
_at[_] : (l : List A) → Fin (length l) → A
_at[_] = {! !}
```

## Fin vs Vec
Wir betrachten die zwei Darstellungen von Listen der Länge `k`, mittels `Vec`
sowie als Abbildungen `Fin k → -`. Definieren Sie die Übersetzungen:
```
module Fin-vs-Vec (X : Set ℓ) where
  fin-to-vec : ∀ {k} → (Fin k → X) → (Vec X k)
  fin-to-vec = {! !}
  vec-to-fin : ∀ {k} → (Vec X k) → (Fin k → X)
  vec-to-fin = {! !}
```
Beweisen Sie, dass die beiden Abbildungen invers zueinander sind:
```
  iso-on-fin : ∀ k (f : Fin k → X) → vec-to-fin (fin-to-vec f) ≗ f
  iso-on-fin = {! !}

  iso-on-vec : ∀ {k} → fin-to-vec ∘ vec-to-fin {k} ≗ id
  iso-on-vec = {! !}
```

## Logic
Wir betrachten die folgenden aussagenlogischen Gesetze:
```
LEM : ∀ (A : Set) → Set
LEM A = A ⊎ ¬ A

peirce : ∀ (A B : Set) → Set
peirce A B = ((A → B) → A) → A

¬¬-elim : ∀ (A : Set) → Set
¬¬-elim A = ¬ ¬ A → A

contraposition⁻¹ : ∀ (A B : Set) → Set
contraposition⁻¹ A B = (¬ B → ¬ A) → (A → B)

deMorgan : ∀ (A B : Set) → Set
deMorgan A B = ¬ (A × B) → (¬ A ⊎ ¬ B)
```
Zeigen sie, dass diese äquivalent zueinander sind:
```
LEM⇒peirce : ∀ A B  → (∀ A → LEM A) → peirce A B
LEM⇒peirce A B LEM = {! !}

peirce⇒¬¬-elim : ∀ A → (∀ B → peirce A B) → ¬¬-elim A
peirce⇒¬¬-elim A = {! !}

¬¬-elim⇒contraposition⁻¹ : (∀ A → ¬¬-elim A) → ∀ A B → contraposition⁻¹ A B
¬¬-elim⇒contraposition⁻¹ ¬¬A→A A B = {! !}

contraposition⁻¹⇒LEM : (∀ A B → contraposition⁻¹ A B) → (∀ A → LEM A)
contraposition⁻¹⇒LEM contra A = {! !}

```
