Advertisement
Guest User

Untitled

a guest
May 19th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 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.  
  19. {-# REWRITE coe-β₁ coe-β₂ #-}
  20.  
  21. data _⇝_ {u} {α : Set u} : α → α → Set u where
  22. lam : (f : I → α) → f i₀ ⇝ f i₁
  23.  
  24. _#_ : ∀ {u} {α : Set u} {a b : α} → a ⇝ b → I → α
  25. _#_ (lam f) = f
  26.  
  27. postulate
  28. #-β₁ : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) → (p # i₀) ≡ a
  29. #-β₂ : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) → (p # i₁) ≡ b
  30. ⇝-η : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) →
  31. lam (λ i → (p # i)) ≡ p
  32.  
  33. {-# REWRITE #-β₁ #-β₂ ⇝-η #-}
  34.  
  35. rfl : ∀ {u} {α : Set u} {a : α} → a ⇝ a
  36. rfl {a = a} = lam (λ _ → a)
  37.  
  38. sym : ∀ {u} {α : Set u} {a b : α} → a ⇝ b → b ⇝ a
  39. sym {b = b} p = coe i₁ i₀ (λ i → b ⇝ (p # i)) rfl
  40.  
  41. funext : ∀ {u v} {α : Set u} {β : α → Set v} {f g : (x : α) → β x}
  42. (p : (x : α) → f x ⇝ g x) → f ⇝ g
  43. funext p = lam (λ i x → (p x # i))
  44.  
  45. cong : ∀ {u v} {α : Set u} {β : Set v} {a b : α} (f : α → β)
  46. (p : a ⇝ b) → f a ⇝ f b
  47. cong f p = lam (λ i → f (p # i))
  48.  
  49. trans : ∀ {u} {α β : Set u} (p : α ⇝ β) → α → β
  50. trans p = coe i₀ i₁ (λ i → p # i)
  51.  
  52. trans⁻¹ : ∀ {u} {α β : Set u} (p : α ⇝ β) → β → α
  53. trans⁻¹ p = coe i₁ i₀ (λ i → p # i)
  54.  
  55. transK : ∀ {u} {α β : Set u} (p : α ⇝ β) (x : α) →
  56. x ⇝ trans⁻¹ p (trans p x)
  57. transK p x = lam (λ i → coe i i₀ (λ i → p # i) (coe i₀ i (λ i → p # i) x))
  58.  
  59. trans⁻¹K : ∀ {u} {α β : Set u} (p : α ⇝ β) (x : β) →
  60. x ⇝ trans p (trans⁻¹ p x)
  61. trans⁻¹K p x = sym (lam (λ i → coe i i₁ (λ i → p # i) (coe i₁ i (λ i → p # i) x)))
  62.  
  63. subst : ∀ {u v} {α : Set u} {π : α → Set v} {a b : α} (p : a ⇝ b) → π a → π b
  64. subst {π = π} p = coe i₀ i₁ (λ i → π (p # i))
  65.  
  66. postulate
  67. _∧_ : I → I → I
  68. ∧-β₁ : (i : I) → (i ∧ i₀) ≡ i₀
  69. ∧-β₂ : (i : I) → (i ∧ i₁) ≡ i
  70. ∧-β₃ : (i : I) → (i₀ ∧ i) ≡ i₀
  71. ∧-β₄ : (i : I) → (i₁ ∧ i) ≡ i
  72.  
  73. {-# REWRITE ∧-β₁ ∧-β₂ ∧-β₃ ∧-β₄ #-}
  74.  
  75. conn-and : ∀ {u} {α : Set u} {a b : α} (p : a ⇝ b) (i : I) → a ⇝ (p # i)
  76. conn-and p i = lam (λ j → p # (i ∧ j))
  77.  
  78. J : ∀ {u v} {α : Set u} {a : α} {π : (b : α) → a ⇝ b → Set v}
  79. (h : π a rfl) (b : α) (p : a ⇝ b) → π b p
  80. J {π = π} h b p = coe i₀ i₁ (λ i → π (p # i) (conn-and p i)) h
  81.  
  82. data Σ {u v} {α : Set u} (π : α → Set v) : Set (u ⊔ v) where
  83. _,_ : (x : α) → π x → Σ π
  84.  
  85. π₁ : ∀ {u v} {α : Set u} {π : α → Set v} → Σ π → α
  86. π₁ (x , y) = x
  87.  
  88. _×_ : ∀ {u v} (α : Set u) (β : Set v) → Set (u ⊔ v)
  89. α × β = Σ {α = α} (λ _ → β)
  90.  
  91. _~_ : ∀ {u v} {α : Set u} {π : α → Set v} (f g : (x : α) → π x) → Set (u ⊔ v)
  92. _~_ {α = α} f g = (x : α) → f x ⇝ g x
  93.  
  94. id : ∀ {u} {α : Set u} → α → α
  95. id x = x
  96.  
  97. seg : i₀ ⇝ i₁
  98. seg = lam id
  99.  
  100. neg : I → I
  101. neg i = sym seg # i
  102.  
  103. neg-β₁ : neg i₀ ⇝ i₁
  104. neg-β₁ = rfl
  105.  
  106. neg-β₂ : neg i₁ ⇝ i₀
  107. neg-β₂ = rfl
  108.  
  109. _∘_ : ∀ {u v} {α : Set u} {β : Set v} {φ : Set u} → (β → φ) → (α → β) → α → φ
  110. (f ∘ g) x = f (g x)
  111.  
  112. linv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  113. linv f = Σ (λ g → (g ∘ f) ~ id)
  114.  
  115. rinv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  116. rinv f = Σ (λ g → (f ∘ g) ~ id)
  117.  
  118. biinv : ∀ {u v} {α : Set u} {β : Set v} (f : α → β) → Set (u ⊔ v)
  119. biinv f = linv f × rinv f
  120.  
  121. _≃_ : ∀ {u v} (α : Set u) (β : Set v) → Set (u ⊔ v)
  122. α ≃ β = Σ {α = α → β} (λ f → biinv f)
  123.  
  124. postulate
  125. V : ∀ {u} (i : I) {α β : Set u} → α ≃ β → Set u
  126. V-β₁ : ∀ {u} {α β : Set u} (e : α ≃ β) → V i₀ e ≡ α
  127. V-β₂ : ∀ {u} {α β : Set u} (e : α ≃ β) → V i₁ e ≡ β
  128.  
  129. {-# REWRITE V-β₁ V-β₂ #-}
  130.  
  131. ua : ∀ {u} {α β : Set u} (e : α ≃ β) → α ⇝ β
  132. ua e = lam (λ i → V i e)
  133.  
  134. postulate
  135. Vproj : ∀ {u} (i : I) {α β : Set u} (e : α ≃ β) → α → V i e
  136. Vproj-β₁ : ∀ {u} {α β : Set u} (e : α ≃ β) (m : α) → Vproj i₀ e m ≡ m
  137. Vproj-β₂ : ∀ {u} {α β : Set u} (e : α ≃ β) (m : α) → Vproj i₁ e m ≡ π₁ e m
  138.  
  139. {-# REWRITE Vproj-β₁ Vproj-β₂ #-}
  140.  
  141. uabeta : ∀ {u} {α β : Set u} (e : α ≃ β) (m : α) → trans (ua e) m ⇝ π₁ e m
  142. uabeta e m = lam (λ i → coe i i₁ (λ i → ua e # i) (Vproj i e m))
  143.  
  144. I-ind : ∀ {u} {π : I → Set u} (p₀ : π i₀) (p₁ : π i₁)
  145. (p : (subst seg p₀) ⇝ p₁) (i : I) → π i
  146. I-ind {π = π} p₀ p₁ p i = coe i₁ i (λ j → π (seg # j)) (p # i)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement