open import Agda.Primitive using (lzero; lsuc; _⊔_) open import Agda.Builtin.Equality using (_≡_; refl) open import Data.Nat hiding (_⊔_) open import Data.Unit using (⊤; tt) open import Data.String open import Data.Empty using (⊥) open import Function using (_∘_; id; flip; const) open import Relation.Unary open import Data.Product using (_×_; _,_;proj₁) open import Relation.Nullary using (¬_) Nat : Pred ℕ lzero Nat = const ⊤ Str : Pred String lzero Str = const ⊤ module _ where foo : 42 ∈ Nat foo = tt bar : "Hello" ∈ Str bar = tt buz : ∀ (n : ℕ) → n ∉ ∅ buz = const id quz : ∀ (s : String) → s ∈ U quz = const tt test : { 42 } ⊆ U test = const tt test2 : { "Hello" } ⊆ U test2 = const tt data Parity : ℕ → Set where even : (k : ℕ) → Parity (k * 2) odd : (k : ℕ) → Parity (1 + k * 2) parity : (n : ℕ) → Parity n parity zero = even zero parity (suc n) with parity n parity (suc .(k * 2)) | even k = odd k parity (suc .(suc (k * 2))) | odd k = even (suc k) Odd : ℕ → Set Odd n with parity n Odd .(k * 2) | even k = ⊥ Odd .(suc (k * 2)) | odd k = ⊤ Even : ℕ → Set Even n with parity n Even .(k * 2) | even k = ⊤ Even .(suc (k * 2)) | odd k = ⊥ Evenℕ : Pred ℕ lzero Evenℕ = Even Oddℕ : Pred ℕ lzero Oddℕ = Odd module _ where test3 : 3 ∈ Oddℕ test3 = tt test4 : 3 ∉ Evenℕ test4 = id test5 : 8 ∈ Evenℕ test5 = tt test6 : 21 ∉ Evenℕ test6 = id -- data _≈_ {a ℓ} {S : Set a} : (A : Pred S ℓ) → (B : Pred S ℓ) → Set (a ⊔ lsuc ℓ) where -- eql : ∀ {A B} → A ⊆ B × A ⊇ B → A ≈ B infix 3 _≈_ record _≈_ {a ℓ} {S : Set a} (A : Pred S ℓ) (B : Pred S ℓ) : Set (a ⊔ lsuc ℓ) where field eql : A ⊆ B × A ⊇ B module _ where open import Data.Fin hiding (_<_) open import Data.Nat.Primality using (Prime) open import Data.Empty using (⊥-elim) open import Data.Fin hiding (_<_; _≤_) open import Data.Nat.Divisibility using (divides; _∣_) open import Relation.Binary.PropositionalEquality using (cong) A : Pred ℕ lzero A n = 2 < n × n < 10 × Prime n B : Pred ℕ lzero B n = 1 < n × n < 8 × Odd n help : ∀ k → 2 < (k * 2) → ¬ Prime (k * 2) help zero 2