reorganize and add plfa
This commit is contained in:
68
plfa/Naturals.agda
Normal file
68
plfa/Naturals.agda
Normal file
@@ -0,0 +1,68 @@
|
||||
module Naturals where
|
||||
|
||||
import Relation.Binary.PropositionalEquality as Eq
|
||||
open Eq using (_≡_; refl)
|
||||
open Eq.≡-Reasoning using (begin_; _≡⟨⟩_; _∎)
|
||||
|
||||
data ℕ : Set where
|
||||
zero : ℕ
|
||||
suc : ℕ → ℕ
|
||||
|
||||
{-# BUILTIN NATURAL ℕ #-}
|
||||
|
||||
_+_ : ℕ → ℕ → ℕ
|
||||
zero + n = n
|
||||
suc m + n = suc (m + n)
|
||||
|
||||
_*_ : ℕ → ℕ → ℕ
|
||||
zero * n = zero
|
||||
suc m * n = n + (m * n)
|
||||
|
||||
_^_ : ℕ → ℕ → ℕ
|
||||
n ^ 0 = 1
|
||||
n ^ suc m = n * (n ^ m)
|
||||
|
||||
_∸_ : ℕ → ℕ → ℕ
|
||||
m ∸ zero = m
|
||||
zero ∸ suc n = zero
|
||||
suc m ∸ suc n = m ∸ n
|
||||
|
||||
infixl 6 _+_ _∸_
|
||||
infixl 7 _*_
|
||||
|
||||
{-# BUILTIN NATPLUS _+_ #-}
|
||||
{-# BUILTIN NATTIMES _*_ #-}
|
||||
{-# BUILTIN NATMINUS _∸_ #-}
|
||||
|
||||
-- Bin stretch exercise
|
||||
|
||||
data Bin : Set where
|
||||
⟨⟩ : Bin
|
||||
_O : Bin → Bin
|
||||
_I : Bin → Bin
|
||||
|
||||
inc : Bin → Bin
|
||||
inc ⟨⟩ = ⟨⟩ I
|
||||
inc (m O) = m I
|
||||
inc (m I) = (inc m) O
|
||||
|
||||
_ : inc (⟨⟩ I O I I) ≡ ⟨⟩ I I O O
|
||||
_ = refl
|
||||
|
||||
_ : inc (⟨⟩ I) ≡ ⟨⟩ I O
|
||||
_ = refl
|
||||
|
||||
to : ℕ -> Bin
|
||||
to 0 = ⟨⟩
|
||||
to (suc n) = inc (to n)
|
||||
|
||||
_ : to 11 ≡ ⟨⟩ I O I I
|
||||
_ = refl
|
||||
|
||||
from : Bin -> ℕ
|
||||
from ⟨⟩ = 0
|
||||
from (m O) = 2 * from m
|
||||
from (m I) = 1 + 2 * from m
|
||||
|
||||
_ : from (⟨⟩ I O I I) ≡ 11
|
||||
_ = refl
|
4
plfa/README.md
Normal file
4
plfa/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# PLFA
|
||||
|
||||
I’m following along [PLFA](https://plfa.github.io/). This repo only contains the
|
||||
stretch exercises and supporting materials.
|
Reference in New Issue
Block a user