test
This commit is contained in:
parent
fceaaa8f83
commit
8d0bebab0b
3 changed files with 169 additions and 0 deletions
34
src/Extra2.agda
Normal file
34
src/Extra2.agda
Normal file
|
@ -0,0 +1,34 @@
|
|||
module _ where
|
||||
|
||||
open import Relation.Binary.PropositionalEquality
|
||||
|
||||
record ⊤ : Set where
|
||||
constructor tt
|
||||
|
||||
postulate
|
||||
tt′ : ⊤
|
||||
|
||||
lemma₀ : tt ≡ tt′
|
||||
lemma₀ = refl
|
||||
|
||||
open import Data.Nat
|
||||
open import Data.Nat.Properties
|
||||
|
||||
record Terminating (n : ℕ) : Set where
|
||||
inductive
|
||||
constructor box
|
||||
field
|
||||
call : ∀ {m : ℕ} → m <′ n → Terminating m
|
||||
open Terminating
|
||||
|
||||
term : ∀ (n : ℕ) → Terminating n
|
||||
term 0 .call ()
|
||||
term (suc n) .call ≤′-refl = term n
|
||||
term (suc n) .call (≤′-step sm≤n) = term n .call sm≤n
|
||||
|
||||
postulate
|
||||
_/2 : ℕ → ℕ
|
||||
/2-<′ : ∀ (n : ℕ) → n /2 <′ n
|
||||
|
||||
merge : (n : ℕ) → Terminating n → ℕ
|
||||
merge n (box caller) = merge (n /2) (caller (/2-<′ n))
|
87
src/Extra3.agda
Normal file
87
src/Extra3.agda
Normal file
|
@ -0,0 +1,87 @@
|
|||
module _ where
|
||||
|
||||
open import Relation.Binary.PropositionalEquality
|
||||
open ≡-Reasoning
|
||||
open import Function
|
||||
open import Data.Nat
|
||||
open import Data.Fin hiding (_+_)
|
||||
open import Data.Product hiding (map)
|
||||
|
||||
-- Functions as Lists
|
||||
|
||||
Vec : Set → ℕ → Set
|
||||
Vec A n = Fin n → A
|
||||
|
||||
map-Vec : {A B : Set} {n : ℕ} → (A → B) → Vec A n → Vec B n
|
||||
map-Vec f v = f ∘′ v
|
||||
|
||||
map-Vec-compose : {A B C : Set} {n : ℕ} (f : B → C) (g : A → B) (v : Vec A n)
|
||||
→ map-Vec (f ∘ g) v ≡ map-Vec f (map-Vec g v)
|
||||
map-Vec-compose f g v = refl
|
||||
|
||||
List : Set → Set
|
||||
List A = Σ ℕ (λ n → Vec A n)
|
||||
|
||||
map : {A B : Set} → (A → B) → List A → List B
|
||||
map f (n , v) = n , (f ∘′ v)
|
||||
|
||||
map-compose : {A B C : Set} (f : B → C) (g : A → B) (l : List A)
|
||||
→ map (f ∘ g) l ≡ map f (map g l)
|
||||
map-compose f g l = refl
|
||||
|
||||
[] : {A : Set} → List A
|
||||
[] = 0 , λ ()
|
||||
|
||||
_∷_ : {A : Set} → A → List A → List A
|
||||
a ∷ (n , v) = (suc n) , λ{ zero → a ; (suc n) → v n }
|
||||
|
||||
--- Questions
|
||||
|
||||
-- Q1: Instance arguments...
|
||||
-- A1: Don't abuse it
|
||||
|
||||
-- Q2: Convervativity of the eta rule of sigma types
|
||||
-- A2: this is a very interesting question!!!
|
||||
--
|
||||
-- ETT is conservative with respect to (ITT + K) + function ext, by Martin Hofmann
|
||||
|
||||
-- Q3: Differences between judgmental eq, propositional eq, and isomorphisms
|
||||
|
||||
-- A3: Judgmental equality is given
|
||||
|
||||
_ = 1 + 1 ≡ 2
|
||||
_ = refl
|
||||
|
||||
-- Propositional equality is a type that can be either
|
||||
|
||||
-- 1. the inductive types generated by reflexivity, or
|
||||
-- 2. ...
|
||||
-- 3. ...
|
||||
|
||||
-- Isomorphisms only make sense between two types.
|
||||
|
||||
-- Q4: syntax
|
||||
|
||||
postulate
|
||||
F : (Set → Set) → (Set → Set)
|
||||
|
||||
syntax F (λ x → e) (λ y → f) = e - x - y - f
|
||||
|
||||
-- Q5. subtying in kinds
|
||||
|
||||
-- Speed coding
|
||||
|
||||
+-comm : ∀ n m → n + m ≡ m + n
|
||||
+-comm 0 m = ?
|
||||
+-comm (suc n) m =
|
||||
begin
|
||||
suc n + m
|
||||
≡⟨ ? ⟩
|
||||
suc n + m
|
||||
≡⟨ ? ⟩
|
||||
suc n + m
|
||||
≡⟨ ? ⟩
|
||||
suc n + m
|
||||
≡⟨ ? ⟩
|
||||
m + suc n
|
||||
∎
|
|
@ -9,3 +9,51 @@ data Bin : Set where
|
|||
O : Bin
|
||||
_I : Bin → Bin
|
||||
_II : Bin → Bin
|
||||
|
||||
-------------------------------------------------------
|
||||
-- from
|
||||
-------------------------------------------------------
|
||||
|
||||
from : Bin → ℕ
|
||||
from O = 0
|
||||
from (b I) = 2 * (from b) + 1
|
||||
from (b II) = 2 * (from b) + 2
|
||||
|
||||
fromBin : from (O II I II) ≡ 12
|
||||
fromBin = refl
|
||||
|
||||
-------------------------------------------------------
|
||||
-- to
|
||||
-------------------------------------------------------
|
||||
|
||||
data Σ (A : Set) (B : A → Set) : Set where
|
||||
⟨_,_⟩ : (x : A) → B x → Σ A B
|
||||
|
||||
∃ : ∀ {A : Set} (B : A → Set) → Set
|
||||
∃ {A} B = Σ A B
|
||||
|
||||
∃-syntax = ∃
|
||||
syntax ∃-syntax (λ x → B) = ∃[ x ] B
|
||||
|
||||
data Parity : (n : ℕ) → Set where
|
||||
isEven : (n : ℕ) → (m : ℕ) → (m * 2 ≡ n) → Parity n
|
||||
isOdd : (n : ℕ) → (m : ℕ) → (1 + m * 2 ≡ n) → Parity n
|
||||
|
||||
parity? : ∀ (n : ℕ) → Parity n
|
||||
parity? zero = isEven zero zero refl
|
||||
parity? (suc n) with parity? n
|
||||
... | isEven _ m p = isOdd (suc n) m (cong (1 +_) p)
|
||||
-- p is proof that 1 + m * 2 ≡ n
|
||||
-- thus 1 + (1 + m * 2) ≡ 1 + n
|
||||
-- turn it into 2 + m * 2 using +-assoc
|
||||
... | isOdd _ m p = isEven (suc n) (suc m) (trans (+-assoc 1 1 (m * 2)) (cong suc p))
|
||||
|
||||
-- to : (n : ℕ) → Terminating n → Bin
|
||||
-- to zero = O
|
||||
-- to (suc n) with parity? n
|
||||
-- ... | isEven _ m _ = (to m) I
|
||||
-- ... | isOdd _ zero _ = O I
|
||||
-- ... | isOdd _ (suc m) _ = (to m) II
|
||||
|
||||
-- toBin : to 3 ≡ O I I
|
||||
-- toBin = refl
|
Loading…
Reference in a new issue