finished playing with abels tutorial
This commit is contained in:
72
Dep.agda
72
Dep.agda
@@ -4,6 +4,8 @@ data Nat : Set where
|
|||||||
zero : Nat
|
zero : Nat
|
||||||
suc : Nat → Nat
|
suc : Nat → Nat
|
||||||
|
|
||||||
|
one = suc zero
|
||||||
|
|
||||||
data L (A : Set) : Set where
|
data L (A : Set) : Set where
|
||||||
[] : L A
|
[] : L A
|
||||||
_::_ : A → L A → L A
|
_::_ : A → L A → L A
|
||||||
@@ -27,4 +29,74 @@ inner : {n : Nat} → Vect Nat n → Vect Nat n → Nat
|
|||||||
inner vnil vnil = zero
|
inner vnil vnil = zero
|
||||||
inner (vcons x xs) (vcons y ys) = x * y + inner xs ys
|
inner (vcons x xs) (vcons y ys) = x * y + inner xs ys
|
||||||
|
|
||||||
|
append : {A : Set} {n m : Nat} → Vect A n → Vect A m → Vect A (m + n)
|
||||||
|
append vnil ys = ys
|
||||||
|
append (vcons x xs) ys = vcons x (append xs ys)
|
||||||
|
|
||||||
|
data Fin : Nat → Set where
|
||||||
|
fzero : {n : Nat} → Fin (suc n)
|
||||||
|
fsuc : {n : Nat} → Fin n → Fin (suc n)
|
||||||
|
|
||||||
|
_!!_ : {A : Set} {n : Nat} → Vect A n → Fin n → A
|
||||||
|
vnil !! ()
|
||||||
|
vcons x xs !! fzero = x
|
||||||
|
vcons x xs !! fsuc m = xs !! m
|
||||||
|
|
||||||
|
data Bool : Set where
|
||||||
|
true : Bool
|
||||||
|
false : Bool
|
||||||
|
|
||||||
|
if_then_else_ : {A : Set} → Bool → A → A -> A
|
||||||
|
if true then b1 else b2 = b1
|
||||||
|
if false then b1 else b2 = b2
|
||||||
|
|
||||||
|
_≤_ : Nat → Nat → Bool
|
||||||
|
zero ≤ n = true
|
||||||
|
(suc m) ≤ zero = false
|
||||||
|
(suc m) ≤ (suc n) = m ≤ n
|
||||||
|
|
||||||
|
Proposition = Set
|
||||||
|
|
||||||
|
data Absurd : Proposition where
|
||||||
|
|
||||||
|
data Truth : Proposition where
|
||||||
|
t : Truth
|
||||||
|
|
||||||
|
data _∧_ (A B : Proposition) : Proposition where
|
||||||
|
and : A → B → A ∧ B
|
||||||
|
|
||||||
|
fst : {A B : Proposition} → A ∧ B → A
|
||||||
|
fst (and a b) = a
|
||||||
|
|
||||||
|
snd : {A B : Proposition} → A ∧ B → B
|
||||||
|
snd (and a b) = b
|
||||||
|
|
||||||
|
_×_ = _∧_
|
||||||
|
|
||||||
|
data _∨_ (A B : Proposition) : Proposition where
|
||||||
|
inl : A → A ∨ B
|
||||||
|
inr : B → A ∨ B
|
||||||
|
|
||||||
|
case : {A B C : Proposition} → A ∨ B → (A → C) → (B → C) → C
|
||||||
|
case (inl a) f g = f a
|
||||||
|
case (inr b) f g = g b
|
||||||
|
|
||||||
|
lemma : {A : Proposition} → A → A ∧ Truth
|
||||||
|
lemma a = (and a t)
|
||||||
|
|
||||||
|
comm∧ : {A B : Proposition} → A ∧ B → B ∧ A
|
||||||
|
comm∧ (and a b) = (and b a)
|
||||||
|
|
||||||
|
True : Bool → Proposition
|
||||||
|
True true = Truth
|
||||||
|
True false = Absurd
|
||||||
|
|
||||||
|
refl≤ : (n : Nat) → True (n ≤ n)
|
||||||
|
refl≤ zero = t
|
||||||
|
refl≤ (suc n) = refl≤ n
|
||||||
|
|
||||||
|
data SList : Nat → Set where
|
||||||
|
snil : SList zero
|
||||||
|
scons : {n : Nat} (m : Nat) → True (n ≤ m) → SList n → SList m
|
||||||
|
|
||||||
|
slist1 = scons one t (scons zero t snil)
|
||||||
|
Reference in New Issue
Block a user