Da die reguläre Übung erst um anfängt, nutze ich
die Zeit um wöchentliche Einführungen zur
Programmiersprache Agda
zu geben. Agda ist keine notwendige Voraussetzung für die
ThProg-Vorlesung, wohl
aber ein nützliches Werkzeug um Intuition für Induktion, Koinduktion
und λ-Kalkül zu entwickeln
Agda-Einführung statt Übung
Da aufgrund der Bergkirchweih in dieser Woche kein
Präsenzaufgabenblatt bereitgestellt wird, ist die Übung
am vollends Agda
gewidmet. Wen das interessiert kann gerne kommen (auch gerne Leute die
regulär nicht in meine Übung gehen).
Agda ist eine funktionale Programmiersprache mit
starken Ähnlichkeiten zu
Haskell. Als solche basiert sie
auf dem λ-Kalkül, was ja später ein größeres Thema
in ThProg sein wird.
Mit induktiven und koinduktiven Datentypen können auch die
entsprechenden Kapitel der Vorlesung nachgebaut werden. Als stark
normalisierendes λ-Kalkül mit
Dependent
Types kann Agda auch als Beweisassistent (ähnlich zu
Coq) verwendet werden.
Ein Vorgeschmack
data Nat : Set where
zero : Nat
suc : Nat → Nat
_+_ : Nat → Nat → Nat
zero + m = m
suc n + m = suc (n + m)
+-idₗ : ∀ (n : Nat) → n ≡ n + zero
+-idₗ zero = refl
+-idₗ (suc n) = cong suc (+-idₗ n)
+-suc : ∀ (n m : Nat) → n + (suc m) ≡ suc (n + m)
+-suc zero m = refl
+-suc (suc n) m = cong suc (+-suc n m)
+-commutative : ∀ (n m : Nat) → n + m ≡ m + n
+-commutative zero m = +-idₗ m
+-commutative (suc n) m =
trans (cong suc (+-commutative n m))
(sym (+-suc m n))