module Lecture18 where import Nat open Nat -- ---------------------------------------------------------------------- -- * Alternate notation for indexed datatypes module Equality-demo where module First-Attempt where data _==_ : {A : Set} -> A -> A -> Set where refl : ∀ {A : Set} {x : A} -> x == x infix 4 _==_ module Alternate-Attempt where -- Alternate notation: data _==_ {A : Set} : A -> A -> Set where refl : ∀ {x : A} -> x == x module Even1 where -- Another example of an indexed datatype was the "Even" predicate: data Even : (n : ℕ) -> Set where even-zero : Even zero even-succ : ∀ (n : ℕ) -> Even n -> Even (succ (succ n)) module Even2 where -- This doesn't work, because n is not actually fixed throughout the -- definition: data Even (n : ℕ) : Set where even-zero : Even n even-succ : Even n -> Even n -- ---------------------------------------------------------------------- -- * Namespaces module Natural-attempt1 where data N : Set where z : N s : N -> N plus : N -> N -> N plus z m = m plus (s n) m = s (plus n m) open Equality-demo.Alternate-Attempt lemma : ∀ (n : N) -> plus n z == n lemma = {!!} test : {!!} test = {!!} module Natural-attempt2 where data N : Set where z : N s : N -> N plus : N -> N -> N plus n z = n plus n (s m) = s (plus n m) open Equality-demo.First-Attempt lemma : ∀ (n m : N) -> plus n m == plus m n lemma = {!!} test : {!!} test = {!!} open Natural-attempt1 theorem : ∀ (n : N) -> n Equality-demo.First-Attempt.== n theorem n = {!!}