This commit is contained in:
2019-03-28 21:45:04 +01:00
commit a67cd02e55
5 changed files with 162 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.agdai
*.agda~

30
Dep.agda Normal file
View File

@@ -0,0 +1,30 @@
module dep where
data Nat : Set where
zero : Nat
suc : Nat Nat
data L (A : Set) : Set where
[] : L A
_::_ : A L A L A
data Vect (A : Set) : Nat Set where
vnil : Vect A zero
vcons : {n : Nat} A Vect A n Vect A (suc n)
infix 2 _+_
infix 3 _*_
_+_ : Nat Nat Nat
n + zero = n
n + suc m = suc (n + m)
_*_ : Nat -> Nat -> Nat
n * zero = zero
n * suc m = n * m + n
inner : {n : Nat} Vect Nat n Vect Nat n Nat
inner vnil vnil = zero
inner (vcons x xs) (vcons y ys) = x * y + inner xs ys

26
Distrib.agda Normal file
View File

@@ -0,0 +1,26 @@
module distrib where
data __ (A B : Set) : Set where
inl : A A B
inr : B A B
data _∧_ (A B : Set) : Set where
_and_ : A B A B
and_dist_over_or : {a b c : Set} a (b c) (a b) (a c)
and_dist_over_or (a₁ and (inl x)) = inl (a₁ and x)
and_dist_over_or (a₁ and (inr x)) = inr (a₁ and x)
and_dist_over_or : {a b c : Set} (a b) (a c) a (b c)
and_dist_over_or (inl (x and x)) = x and (inl x)
and_dist_over_or (inr (x and x)) = x and (inr x)
or_dist_over_and : {a b c : Set} (a b) (a c) -> a (b c)
or_dist_over_and ((inl x) and (inl y)) = inl x
or_dist_over_and ((inl x) and (inr y)) = inl x
or_dist_over_and ((inr x) and (inl y)) = inl y
or_dist_over_and ((inr x) and (inr y)) = inr (x and y)
or_dist_over_and : {a b c : Set} a (b c) (a b) (a c)
or_dist_over_and (inl x) = (inl x) and (inl x)
or_dist_over_and (inr (x and y)) = (inr x) and (inr y)

86
Peano.agda Normal file
View File

@@ -0,0 +1,86 @@
module peano where
data : Set where
zero :
suc :
_+_ :
zero + zero = zero
zero + n = n
(suc n) + n = suc (n + n)
_*_ :
zero * n = zero
(suc zero) * n = n
(suc n) * n = n + (n * n)
data _even : Set where
ZERO : zero even
STEP : x x even suc (suc x) even
-- alternative:
-- : (x : ) x even suc (suc x) even
proof₁ : suc (suc (suc (suc zero))) even
proof₁ = STEP _ (STEP _ ZERO)
data _∧_ (P : Set) (Q : Set) : Set where
∧-intro : P Q (P Q)
proof₃ : {P Q : Set} (P Q) P
proof₃ (∧-intro p q) = p
_⇔_ : (P : Set) (Q : Set) Set
a b = (a b) (b a)
∧-comm : {P Q : Set} (P Q) (Q P)
∧-comm (∧-intro p q) = ∧-intro q p
--∧-comm : {P Q : Set} (P Q) (Q P)
--∧-comm = ∧-intro (∧-comm {P} {Q}) (∧-comm {Q} {P})
∧-assoc₁ : {P Q R : Set} ((P Q) R) (P (Q R))
∧-assoc₁ (∧-intro (∧-intro p q) r) = ∧-intro p (∧-intro q r)
∧-assoc₂ : {P Q R : Set} (P (Q R)) ((P Q) R)
∧-assoc₂ (∧-intro p (∧-intro q r)) = ∧-intro (∧-intro p q) r
∧-assoc : {P Q R : Set} ((P Q) R) (P (Q R))
∧-assoc = ∧-intro ∧-assoc₁ ∧-assoc₂
data __ (P Q : Set) : Set where
-intro₁ : P P Q
-intro₂ : Q P Q
-elim : {A B C : Set} (A C) (B C) (A B) C
-elim ac bc (-intro₁ a) = ac a
-elim ac bc (-intro₂ b) = bc b
-comm : {P Q : Set} (P Q) (Q P)
-comm (-intro₁ p) = -intro₂ p
-comm (-intro₂ q) = -intro₁ q
-comm : {P Q : Set} (P Q) (Q P)
-comm = ∧-intro -comm -comm
-- this is my first own proof! The associativity of disjunction
-assoc₁ : {P Q R : Set} ((P Q) R) (P (Q R))
-assoc₁ (-intro₁ (-intro₁ p)) = -intro₁ p
-assoc₁ (-intro₁ (-intro₂ q)) = -intro₂ (-intro₁ q)
-assoc₁ (-intro₂ r) = -intro₂ (-intro₂ r)
-assoc₂ : {P Q R : Set} (P (Q R)) ((P Q) R)
-assoc₂ (-intro₁ p) = -intro₁ (-intro₁ p)
-assoc₂ (-intro₂ (-intro₁ q)) = -intro₁ (-intro₂ q)
-assoc₂ (-intro₂ (-intro₂ r)) = -intro₂ r
-assoc : {P Q R : Set} ((P Q) R) (P (Q R))
-assoc = ∧-intro -assoc₁ -assoc₂
--
data : Set where -- nothing
¬ : Set Set
¬ A = A

18
README.md Normal file
View File

@@ -0,0 +1,18 @@
# agda doodles
Some Agda programs that Ive doodled with to get a feel for the language.
The usual stuff, Peano arithmetic, basic proofs, et al. Nothing new, and
mostly derived from various tutorials and blog posts, most notably:
- [Learn You an Agda](http://learnyouanagda.liamoc.net/)
- [Logic Proofs with Coq, Agda, and Idris](https://queertypes.com/posts/48-logic-proofs-with-agda-coq-idris.html)
- [An Introduction to Dependent Types and Agda](http://www2.tcs.ifi.lmu.de/~abel/lehre/SS09/Fun/DepTypes.pdf)
A single proof was done by myself without help—well, except for Agdas: the
associativity of disjunction (found in Peano). It might well be that its
complete and utter bollocks, but it seems to check out, so its good enough
for me?
<hr/>
Have fun!