{-# OPTIONS --cubical-compatible #-} module AFF2024.AgdaTutorial.Session-ALA where data ℕ : Set where -- \bN zero : ℕ succ : ℕ → ℕ -- \to -- With this definition, the -- inhabitants of ℕ are: -- zero, succ zero, succ (succ zero), ... -- in blackboard maths: f(x,y) -- in Agda: f x y -- zero : ℕ : Set : Set₁ : Set₂ : ... : Setω : Setω1 one : ℕ one = succ zero -- For instance, double 4 should be 8. double : ℕ → ℕ double zero = zero double (succ x) = succ (succ (double x)) -- double (succ x) = 2*(1+x) = 2 + 2x = 1 + (1 + 2x) -- = succ (succ (double x)) -- on a blackboard: add : ℕ × ℕ → ℕ _+_ : ℕ → ℕ → ℕ zero + y = y succ a + y = succ (a + y) -- add (succ a) y = (succ a) + y = (1+a) + y = 1+(a+y) = 1 + (add a y) -- = succ (add a y) data _≡_ : ℕ → ℕ → Set where refl : {x : ℕ} → x ≡ x -- For every number x : ℕ, for every number y : ℕ, -- there is a new type/set called "x ≡ y". -- This type contains all the witnesses that x equals y. -- For instance, the type "zero ≡ one" is empty. -- On the other hand, the type "zero ≡ zero" is inhabited: thm : (zero ≡ zero) -- \== thm = refl two : ℕ two = succ (succ zero) thm' : (one + one) ≡ two thm' = refl -- logical reading: ∀y:ℕ. zero + y = y. -- computational reading: "thm''" is a function which inputs -- a natural number (henceforth called "y") -- and outputs a witness that zero + y equals y. thm'' : (y : ℕ) → (zero + y) ≡ y thm'' y = refl -- Logical reading: ∀f : ℕ → ℕ. ∀x : ℕ. ∀y : ℕ. (x = y ⇒ f(x) = f(y)) -- Computational reading: "cong" is a function which inputs -- (1) a function f : ℕ → ℕ -- (2) a number x : ℕ -- (3) a number y : ℕ -- (4) a witness that x equals y -- and outputs a witness that f x equals f y. -- cong : (f : ℕ → ℕ) → (x : ℕ) → (y : ℕ) → x ≡ y → f x ≡ f y cong : (f : ℕ → ℕ) {x y : ℕ} → x ≡ y → f x ≡ f y cong f refl = refl thm''' : (x : ℕ) → (x + zero) ≡ x thm''' zero = refl thm''' (succ a) = cong succ (thm''' a) -- {-# BUILTIN NATURAL ℕ #-} -- eighthundred : ℕ -- eighthundred = 800 {- thm'''' : (axiom-of-choice : ...) → (x : ℕ) → (x + zero) ≡ x thm'''' = ? -} -- Agda is based on "Martin-Löf type theory" (with a couple of additions), -- which is a constructive system, but we can always postulate axioms -- missing from this foundation: postulate -- axiom-of-choice : {!!} crazy-identity : zero ≡ one