Advertisement
Guest User

Untitled

a guest
May 19th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.63 KB | None | 0 0
  1. {-# OPTIONS --without-K --rewriting #-}
  2.  
  3. module Cubical where
  4. open import Agda.Primitive
  5.  
  6. postulate
  7. _≡_ : ∀ {u} {α β : Set u} → α → β → Set u
  8. {-# BUILTIN REWRITE _≡_ #-}
  9.  
  10. postulate
  11. I : Set lzero
  12. i₀ : I
  13. i₁ : I
  14. coe : ∀ {u} (i k : I) (π : I → Set u) → π i → π k
  15. coe-β₁ : ∀ {u} {π : I → Set u} (i : I) (x : π i) → coe i i π x ≡ x
  16. coe-β₂ : ∀ {u} {π : I → Set u} (i k : I) (x : π i) →
  17. coe k i π (coe i k π x) ≡ x
  18. coe-β₃ : ∀ {u} {β : Set u} (i k : I) (x : β) →
  19. coe i k (λ _ → β) x ≡ x
  20.  
  21. {-# REWRITE coe-β₁ coe-β₂ coe-β₃ #-}
  22.  
  23. data _⇝_ {u} {α : Set u} : α → α → Set u where
  24. lam : (f : I → α) → f i₀ ⇝ f i₁
  25.  
  26. _#_ : ∀ {u} {α : Set u} {a b : α} → a ⇝ b → I → α
  27. _#_ (lam f) = f
  28.  
  29. postulate
  30. #-β₁ : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) → (p # i₀) ≡ a
  31. #-β₂ : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) → (p # i₁) ≡ b
  32. ⇝-η : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) →
  33. lam (λ i → (p # i)) ≡ p
  34.  
  35. {-# REWRITE #-β₁ #-β₂ ⇝-η #-}
  36.  
  37. rfl : ∀ {u} {α : Set u} {a : α} → a ⇝ a
  38. rfl {a = a} = lam (λ _ → a)
  39.  
  40. sym : ∀ {u} {α : Set u} {a b : α} → a ⇝ b → b ⇝ a
  41. sym {b = b} p = coe i₁ i₀ (λ i → b ⇝ (p # i)) rfl
  42.  
  43. funext : ∀ {u v} {α : Set u} {β : α → Set v} {f g : (x : α) → β x}
  44. (p : (x : α) → f x ⇝ g x) → f ⇝ g
  45. funext p = lam (λ i x → (p x # i))
  46.  
  47. cong : ∀ {u v} {α : Set u} {β : Set v} {a b : α} (f : α → β)
  48. (p : a ⇝ b) → f a ⇝ f b
  49. cong f p = lam (λ i → f (p # i))
  50.  
  51. trans : ∀ {u} {α β : Set u} (p : α ⇝ β) → α → β
  52. trans p = coe i₀ i₁ (λ i → p # i)
  53.  
  54. trans⁻¹ : ∀ {u} {α β : Set u} (p : α ⇝ β) → β → α
  55. trans⁻¹ p = coe i₁ i₀ (λ i → p # i)
  56.  
  57. transK : ∀ {u} {α β : Set u} (p : α ⇝ β) (x : α) →
  58. x ⇝ trans⁻¹ p (trans p x)
  59. transK p x = rfl --lam (λ i → coe i i₀ (λ i → p # i) (coe i₀ i (λ i → p # i) x))
  60.  
  61. trans⁻¹K : ∀ {u} {α β : Set u} (p : α ⇝ β) (x : β) →
  62. x ⇝ trans p (trans⁻¹ p x)
  63. trans⁻¹K p x = rfl --sym (lam (λ i → coe i i₁ (λ i → p # i) (coe i₁ i (λ i → p # i) x)))
  64.  
  65. subst : ∀ {u v} {α : Set u} (π : α → Set v) {a b : α} (p : a ⇝ b) → π a → π b
  66. subst π p = coe i₀ i₁ (λ i → π (p # i))
  67.  
  68. comp : ∀ {u} {α : Set u} {a b c : α} (p : a ⇝ b) (q : b ⇝ c) → a ⇝ c
  69. comp p q = subst _ q p
  70.  
  71. postulate
  72. _∧_ : I → I → I
  73. ∧-β₁ : (i : I) → (i ∧ i₀) ≡ i₀
  74. ∧-β₂ : (i : I) → (i ∧ i₁) ≡ i
  75. ∧-β₃ : (i : I) → (i₀ ∧ i) ≡ i₀
  76. ∧-β₄ : (i : I) → (i₁ ∧ i) ≡ i
  77.  
  78. {-# REWRITE ∧-β₁ ∧-β₂ ∧-β₃ ∧-β₄ #-}
  79.  
  80. conn-and : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) (i : I) → a ⇝ (p # i)
  81. conn-and p i = lam (λ j → p # (i ∧ j))
  82.  
  83. J : ∀ {u v} {α : Set u} {a : α} {π : (b : α) → a ⇝ b → Set v}
  84. (h : π a rfl) (b : α) (p : a ⇝ b) → π b p
  85. J {π = π} h b p = coe i₀ i₁ (λ i → π (p # i) (conn-and p i)) h
  86.  
  87. data Σ {u v} {α : Set u} (π : α → Set v) : Set (u ⊔ v) where
  88. _,_ : (x : α) → π x → Σ π
  89.  
  90. data _+_ {u v} (α : Set u) (β : Set v) : Set (u ⊔ v) where
  91. inl : α → α + β
  92. inr : β → α + β
  93.  
  94. data N : Set lzero where
  95. zero : N
  96. succ : N → N
  97.  
  98. {-# BUILTIN NATURAL N #-}
  99.  
  100. π₁ : ∀ {u v} {α : Set u} {π : α → Set v} → Σ π → α
  101. π₁ (x , y) = x
  102.  
  103. _×_ : ∀ {u v} (α : Set u) (β : Set v) → Set (u ⊔ v)
  104. α × β = Σ {α = α} (λ _ → β)
  105.  
  106. _~_ : ∀ {u v} {α : Set u} {π : α → Set v} (f g : (x : α) → π x) → Set (u ⊔ v)
  107. _~_ {α = α} f g = (x : α) → f x ⇝ g x
  108.  
  109. id : ∀ {u} {α : Set u} → α → α
  110. id x = x
  111.  
  112. seg : i₀ ⇝ i₁
  113. seg = lam id
  114.  
  115. neg : I → I
  116. neg i = sym seg # i
  117.  
  118. neg-β₁ : neg i₀ ⇝ i₁
  119. neg-β₁ = rfl
  120.  
  121. neg-β₂ : neg i₁ ⇝ i₀
  122. neg-β₂ = rfl
  123.  
  124. _∘_ : ∀ {u v} {α : Set u} {β : Set v} {φ : Set u} → (β → φ) → (α → β) → α → φ
  125. (f ∘ g) x = f (g x)
  126.  
  127. linv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  128. linv f = Σ (λ g → (g ∘ f) ~ id)
  129.  
  130. rinv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  131. rinv f = Σ (λ g → (f ∘ g) ~ id)
  132.  
  133. biinv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  134. biinv f = linv f × rinv f
  135.  
  136. _≃_ : ∀ {u v} (α : Set u) (β : Set v) → Set (u ⊔ v)
  137. α ≃ β = Σ {α = α → β} (λ f → biinv f)
  138.  
  139. forward : ∀ {u v} {α : Set u} {β : Set v} (e : α ≃ β) → α → β
  140. forward (f , _) = f
  141.  
  142. backward : ∀ {u v} {α : Set u} {β : Set v} (e : α ≃ β) → β → α
  143. backward (_ , ((g , _) , _)) = g
  144.  
  145. postulate
  146. V : ∀ {u} (i : I) {α β : Set u} → α ≃ β → Set u
  147. V-β₁ : ∀ {u} {α β : Set u} (e : α ≃ β) → V i₀ e ≡ α
  148. V-β₂ : ∀ {u} {α β : Set u} (e : α ≃ β) → V i₁ e ≡ β
  149.  
  150. {-# REWRITE V-β₁ V-β₂ #-}
  151.  
  152. postulate
  153. V-β₃ : ∀ {u} {α β : Set u} (e : α ≃ β) (x : α) → coe i₀ i₁ (λ i → V i e) x ≡ forward e x
  154. V-β₄ : ∀ {u} {α β : Set u} (e : α ≃ β) (x : β) → coe i₁ i₀ (λ i → V i e) x ≡ backward e x
  155. {-# REWRITE V-β₃ V-β₄ #-}
  156.  
  157. ua : ∀ {u} {α β : Set u} (e : α ≃ β) → α ⇝ β
  158. ua e = lam (λ i → V i e)
  159.  
  160. Vproj : ∀ {u} (i : I) {α β : Set u} (e : α ≃ β) → α → V i e
  161. Vproj i e m = coe i₀ i (λ i → V i e) m
  162.  
  163. uabeta : ∀ {u} {α β : Set u} (e : α ≃ β) (m : α) → trans (ua e) m ⇝ forward e m
  164. uabeta e m = lam (λ i → coe i i₁ (λ i → ua e # i) (Vproj i e m))
  165.  
  166. I-ind : ∀ {u} (π : I → Set u) (p₀ : π i₀) (p₁ : π i₁)
  167. (p : (subst π seg p₀) ⇝ p₁) (i : I) → π i
  168. I-ind π p₀ p₁ p i = coe i₁ i (λ j → π (seg # j)) (p # i)
  169.  
  170. I-ind-β₀ : ∀ {u} (π : I → Set u) (p₀ : π i₀) (p₁ : π i₁)
  171. (p : (subst π seg p₀) ⇝ p₁) → I-ind π p₀ p₁ p i₀ ⇝ p₀
  172. I-ind-β₀ π p₀ p₁ p = rfl
  173.  
  174. I-ind-β₁ : ∀ {u} (π : I → Set u) (p₀ : π i₀) (p₁ : π i₁)
  175. (p : (subst π seg p₀) ⇝ p₁) → I-ind π p₀ p₁ p i₁ ⇝ p₁
  176. I-ind-β₁ π p₀ p₁ p = rfl
  177.  
  178. postulate
  179. S¹ : Set lzero
  180. base : S¹
  181. loop : I → S¹
  182.  
  183. loop-β₁ : loop i₀ ≡ base
  184. loop-β₂ : loop i₁ ≡ base
  185.  
  186. {-# REWRITE loop-β₁ loop-β₂ #-}
  187.  
  188. loopS¹ : base ⇝ base
  189. loopS¹ = lam loop
  190.  
  191. postulate
  192. S¹-elim : ∀ {u} (π : S¹ → Set u) (b : π base) (l : subst π loopS¹ b ⇝ b) (u : S¹) → π u
  193. S¹-elim-β₁ : ∀ {u} {π : S¹ → Set u} (b : π base) (l : subst π loopS¹ b ⇝ b) → S¹-elim π b l base ≡ b
  194. S¹-elim-β₂ : ∀ {u} {π : S¹ → Set u} (b : π base) (l : subst π loopS¹ b ⇝ b) (i : I) → S¹-elim π b l (loop i) ≡ (l # i)
  195.  
  196. {-# REWRITE S¹-elim-β₁ S¹-elim-β₂ #-}
  197.  
  198. S¹-rec : ∀ {u} {β : Set u} (b : β) (l : b ⇝ b) → S¹ → β
  199. S¹-rec {β = β} b l = S¹-elim (λ _ → β) b l
  200.  
  201. triv : base ⇝ base
  202. triv = rfl
  203.  
  204. one-turn : (x : base ⇝ base) → base ⇝ base
  205. one-turn x = comp x loopS¹
  206.  
  207. back-turn : (x : base ⇝ base) → base ⇝ base
  208. back-turn x = comp x (sym loopS¹)
  209.  
  210. Z : Set lzero
  211. Z = N + N
  212.  
  213. {- +2 = inr (succ (succ zero))
  214. +1 = inr (succ zero)
  215. 0 = inr zero
  216. -1 = inl zero
  217. -2 = inl (succ zero) -}
  218.  
  219. succ-Z-aux : N → Z
  220. succ-Z-aux zero = inr zero
  221. succ-Z-aux (succ n) = inl n
  222.  
  223. succ-Z : Z → Z
  224. succ-Z (inl u) = succ-Z-aux u
  225. succ-Z (inr v) = inr (succ v)
  226.  
  227. pred-Z-aux : N → Z
  228. pred-Z-aux zero = inl zero
  229. pred-Z-aux (succ n) = inr n
  230.  
  231. pred-Z : Z → Z
  232. pred-Z (inl u) = inl (succ u)
  233. pred-Z (inr v) = pred-Z-aux v
  234.  
  235. succ-pred-inr-Z : (u : N) → succ-Z (pred-Z (inr u)) ⇝ inr u
  236. succ-pred-inr-Z zero = rfl
  237. succ-pred-inr-Z (succ u) = rfl
  238.  
  239. pred-succ-inl-Z : (u : N) → pred-Z (succ-Z (inl u)) ⇝ inl u
  240. pred-succ-inl-Z zero = rfl
  241. pred-succ-inl-Z (succ u) = rfl
  242.  
  243. succ-pred-Z : (u : Z) → succ-Z (pred-Z u) ⇝ u
  244. succ-pred-Z (inl u) = rfl
  245. succ-pred-Z (inr v) = succ-pred-inr-Z v
  246.  
  247. pred-succ-Z : (u : Z) → pred-Z (succ-Z u) ⇝ u
  248. pred-succ-Z (inl u) = pred-succ-inl-Z u
  249. pred-succ-Z (inr v) = rfl
  250.  
  251. succ-path-Z : Z ⇝ Z
  252. succ-path-Z = ua (succ-Z , ((pred-Z , pred-succ-Z) , (pred-Z , succ-pred-Z)))
  253.  
  254. helix : S¹ → Set lzero
  255. helix = S¹-rec Z succ-path-Z
  256.  
  257. minus-one-Z : Z
  258. minus-one-Z = inl zero
  259.  
  260. zero-Z : Z
  261. zero-Z = inr zero
  262.  
  263. winding : base ⇝ base → Z
  264. winding x = trans (lam (λ i → helix (x # i))) zero-Z
  265.  
  266. one-Z : Z
  267. one-Z = inr (succ zero)
  268.  
  269. test-one-Z : trans succ-path-Z zero-Z ⇝ one-Z
  270. test-one-Z = rfl
  271.  
  272. test-minus-one-Z : trans⁻¹ succ-path-Z zero-Z ⇝ minus-one-Z
  273. test-minus-one-Z = rfl
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement