Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.09 KB | None | 0 0
  1. {-# OPTIONS --without-K #-}
  2.  
  3. {-
  4. Below is an example of proving *everything* about the substitution calculus of a
  5. simple TT with Bool.
  6.  
  7. The more challenging solution:
  8. - If substitutions are defined as lists of terms, then if you manage to
  9. prove that substitutions form a category, almost certainly you're done,
  10. since you can only prove this is you have all relevant lemmas.
  11.  
  12. The lazy solution:
  13. - Copy/paste everything from below, then add/remove cases as necessary,
  14. depending on the definition of the syntax.
  15. -}
  16.  
  17. -- Equational reasoning
  18. --------------------------------------------------------------------------------
  19.  
  20. open import Relation.Binary.PropositionalEquality
  21. open import Function
  22.  
  23. _◾_ : ∀ {α}{A : Set α}{x y z : A} → x ≡ y → y ≡ z → x ≡ z
  24. refl ◾ refl = refl
  25. infixr 4 _◾_
  26.  
  27. _⁻¹ : ∀{α}{A : Set α}{x y : A} → x ≡ y → y ≡ x
  28. refl ⁻¹ = refl
  29. infix 6 _⁻¹
  30.  
  31. coe : ∀{α}{A B : Set α} → A ≡ B → A → B
  32. coe refl a = a
  33.  
  34. _&_ :
  35. ∀{α β}{A : Set α}{B : Set β}(f : A → B){a₀ a₁ : A}(a₂ : a₀ ≡ a₁)
  36. → f a₀ ≡ f a₁
  37. f & refl = refl
  38. infixl 9 _&_
  39.  
  40. _⊗_ :
  41. ∀ {α β}{A : Set α}{B : Set β}{f g : A → B}(p : f ≡ g){a a' : A}(q : a ≡ a')
  42. → f a ≡ g a'
  43. refl ⊗ refl = refl
  44. infixl 8 _⊗_
  45.  
  46. -- Syntax
  47. --------------------------------------------------------------------------------
  48.  
  49. infixr 4 _⇒_
  50. infixr 5 _,_
  51.  
  52. data Ty : Set where
  53. Bool : Ty
  54. _⇒_ : Ty → Ty → Ty
  55.  
  56. data Con : Set where
  57. ∙ : Con
  58. _,_ : Con → Ty → Con
  59.  
  60. data _∈_ (A : Ty) : Con → Set where
  61. vz : ∀ {Γ} → A ∈ (Γ , A)
  62. vs : ∀ {B Γ} → A ∈ Γ → A ∈ (Γ , B)
  63.  
  64. data Tm Γ : Ty → Set where
  65. var : ∀ {A} → A ∈ Γ → Tm Γ A
  66. lam : ∀ {A B} → Tm (Γ , A) B → Tm Γ (A ⇒ B)
  67. app : ∀ {A B} → Tm Γ (A ⇒ B) → Tm Γ A → Tm Γ B
  68. true : Tm Γ Bool
  69. false : Tm Γ Bool
  70. bcase : ∀ {A} → Tm Γ Bool → Tm Γ A → Tm Γ A → Tm Γ A
  71.  
  72. -- Order-preserving embeddings
  73. --------------------------------------------------------------------------------
  74.  
  75. data OPE : Con → Con → Set where
  76. ∙ : OPE ∙ ∙
  77. drop : ∀ {A Γ Δ} → OPE Γ Δ → OPE (Γ , A) Δ
  78. keep : ∀ {A Γ Δ} → OPE Γ Δ → OPE (Γ , A) (Δ , A)
  79.  
  80. -- Category operations
  81. idₑ : ∀ {Γ} → OPE Γ Γ
  82. idₑ {∙} = ∙
  83. idₑ {Γ , A} = keep (idₑ {Γ})
  84.  
  85. wk : ∀ {A Γ} → OPE (Γ , A) Γ
  86. wk = drop idₑ
  87.  
  88. _∘ₑ_ : ∀ {Γ Δ Σ} → OPE Δ Σ → OPE Γ Δ → OPE Γ Σ
  89. σ ∘ₑ ∙ = σ
  90. σ ∘ₑ drop δ = drop (σ ∘ₑ δ)
  91. drop σ ∘ₑ keep δ = drop (σ ∘ₑ δ)
  92. keep σ ∘ₑ keep δ = keep (σ ∘ₑ δ)
  93.  
  94. -- Category laws
  95. idlₑ : ∀ {Γ Δ}(σ : OPE Γ Δ) → idₑ ∘ₑ σ ≡ σ
  96. idlₑ ∙ = refl
  97. idlₑ (drop σ) = drop & idlₑ σ
  98. idlₑ (keep σ) = keep & idlₑ σ
  99.  
  100. idrₑ : ∀ {Γ Δ}(σ : OPE Γ Δ) → σ ∘ₑ idₑ ≡ σ
  101. idrₑ ∙ = refl
  102. idrₑ (drop σ) = drop & idrₑ σ
  103. idrₑ (keep σ) = keep & idrₑ σ
  104.  
  105. assₑ :
  106. ∀ {Γ Δ Σ Ξ}(σ : OPE Σ Ξ)(δ : OPE Δ Σ)(ν : OPE Γ Δ)
  107. → (σ ∘ₑ δ) ∘ₑ ν ≡ σ ∘ₑ (δ ∘ₑ ν)
  108. assₑ σ δ ∙ = refl
  109. assₑ σ δ (drop ν) = drop & assₑ σ δ ν
  110. assₑ σ (drop δ) (keep ν) = drop & assₑ σ δ ν
  111. assₑ (drop σ) (keep δ) (keep ν) = drop & assₑ σ δ ν
  112. assₑ (keep σ) (keep δ) (keep ν) = keep & assₑ σ δ ν
  113.  
  114. -- (A ∈ _) : PSh OPE ("PSh C" means contravariant functor from C to Set)
  115. ∈ₑ : ∀ {A Γ Δ} → OPE Γ Δ → A ∈ Δ → A ∈ Γ
  116. ∈ₑ ∙ v = v
  117. ∈ₑ (drop σ) v = vs (∈ₑ σ v)
  118. ∈ₑ (keep σ) vz = vz
  119. ∈ₑ (keep σ) (vs v) = vs (∈ₑ σ v)
  120.  
  121. ∈-idₑ : ∀ {A Γ}(v : A ∈ Γ) → ∈ₑ idₑ v ≡ v
  122. ∈-idₑ vz = refl
  123. ∈-idₑ (vs v) = vs & ∈-idₑ v
  124.  
  125. ∈-∘ₑ : ∀ {A Γ Δ Σ}(σ : OPE Δ Σ)(δ : OPE Γ Δ)(v : A ∈ Σ) → ∈ₑ (σ ∘ₑ δ) v ≡ ∈ₑ δ (∈ₑ σ v)
  126. ∈-∘ₑ ∙ ∙ v = refl
  127. ∈-∘ₑ σ (drop δ) v = vs & ∈-∘ₑ σ δ v
  128. ∈-∘ₑ (drop σ) (keep δ) v = vs & ∈-∘ₑ σ δ v
  129. ∈-∘ₑ (keep σ) (keep δ) vz = refl
  130. ∈-∘ₑ (keep σ) (keep δ) (vs v) = vs & ∈-∘ₑ σ δ v
  131.  
  132. -- (Tm _ A) : PSh OPE
  133. Tmₑ : ∀ {A Γ Δ} → OPE Γ Δ → Tm Δ A → Tm Γ A
  134. Tmₑ σ (var v) = var (∈ₑ σ v)
  135. Tmₑ σ (lam t) = lam (Tmₑ (keep σ) t)
  136. Tmₑ σ (app f a) = app (Tmₑ σ f) (Tmₑ σ a)
  137. Tmₑ σ true = true
  138. Tmₑ σ false = false
  139. Tmₑ σ (bcase b t f) = bcase (Tmₑ σ b) (Tmₑ σ t) (Tmₑ σ f)
  140.  
  141. Tm-idₑ : ∀ {A Γ}(t : Tm Γ A) → Tmₑ idₑ t ≡ t
  142. Tm-idₑ (var v) = var & ∈-idₑ v
  143. Tm-idₑ (lam t) = lam & Tm-idₑ t
  144. Tm-idₑ (app f a) = app & Tm-idₑ f ⊗ Tm-idₑ a
  145. Tm-idₑ true = refl
  146. Tm-idₑ false = refl
  147. Tm-idₑ (bcase b t f) = bcase & Tm-idₑ b ⊗ Tm-idₑ t ⊗ Tm-idₑ f
  148.  
  149. Tm-∘ₑ : ∀ {A Γ Δ Σ}(σ : OPE Δ Σ)(δ : OPE Γ Δ)(t : Tm Σ A) → Tmₑ (σ ∘ₑ δ) t ≡ Tmₑ δ (Tmₑ σ t)
  150. Tm-∘ₑ σ δ (var v) = var & ∈-∘ₑ σ δ v
  151. Tm-∘ₑ σ δ (lam t) = lam & Tm-∘ₑ (keep σ) (keep δ) t
  152. Tm-∘ₑ σ δ (app f a) = app & Tm-∘ₑ σ δ f ⊗ Tm-∘ₑ σ δ a
  153. Tm-∘ₑ σ δ true = refl
  154. Tm-∘ₑ σ δ false = refl
  155. Tm-∘ₑ σ δ (bcase b t f) = bcase & Tm-∘ₑ σ δ b ⊗ Tm-∘ₑ σ δ t ⊗ Tm-∘ₑ σ δ f
  156.  
  157. -- Substitution
  158. --------------------------------------------------------------------------------
  159.  
  160. infixr 6 _ₑ∘ₛ_ _ₛ∘ₑ_ _∘ₛ_
  161.  
  162. data Sub (Γ : Con) : Con → Set where
  163. ∙ : Sub Γ ∙
  164. _,_ : ∀ {A Δ} → Sub Γ Δ → Tm Γ A → Sub Γ (Δ , A)
  165.  
  166. -- left and right compositions
  167. _ₛ∘ₑ_ : ∀ {Γ Δ Σ} → Sub Δ Σ → OPE Γ Δ → Sub Γ Σ
  168. ∙ ₛ∘ₑ δ = ∙
  169. (σ , t) ₛ∘ₑ δ = σ ₛ∘ₑ δ , Tmₑ δ t
  170.  
  171. _ₑ∘ₛ_ : ∀ {Γ Δ Σ} → OPE Δ Σ → Sub Γ Δ → Sub Γ Σ
  172. ∙ ₑ∘ₛ δ = δ
  173. drop σ ₑ∘ₛ (δ , t) = σ ₑ∘ₛ δ
  174. keep σ ₑ∘ₛ (δ , t) = σ ₑ∘ₛ δ , t
  175.  
  176. dropₛ : ∀ {A Γ Δ} → Sub Γ Δ → Sub (Γ , A) Δ
  177. dropₛ σ = σ ₛ∘ₑ wk
  178.  
  179. keepₛ : ∀ {A Γ Δ} → Sub Γ Δ → Sub (Γ , A) (Δ , A)
  180. keepₛ σ = dropₛ σ , var vz
  181.  
  182. ⌜_⌝ᵒᵖᵉ : ∀ {Γ Δ} → OPE Γ Δ → Sub Γ Δ
  183. ⌜ ∙ ⌝ᵒᵖᵉ = ∙
  184. ⌜ drop σ ⌝ᵒᵖᵉ = dropₛ ⌜ σ ⌝ᵒᵖᵉ
  185. ⌜ keep σ ⌝ᵒᵖᵉ = keepₛ ⌜ σ ⌝ᵒᵖᵉ
  186.  
  187. ∈ₛ : ∀ {A Γ Δ} → Sub Γ Δ → A ∈ Δ → Tm Γ A
  188. ∈ₛ (σ , t) vz = t
  189. ∈ₛ (σ , t)(vs v) = ∈ₛ σ v
  190.  
  191. Tmₛ : ∀ {A Γ Δ} → Sub Γ Δ → Tm Δ A → Tm Γ A
  192. Tmₛ σ (var v) = ∈ₛ σ v
  193. Tmₛ σ (lam t) = lam (Tmₛ (keepₛ σ) t)
  194. Tmₛ σ (app f a) = app (Tmₛ σ f) (Tmₛ σ a)
  195. Tmₛ σ true = true
  196. Tmₛ σ false = false
  197. Tmₛ σ (bcase b t f) = bcase (Tmₛ σ b) (Tmₛ σ t) (Tmₛ σ f)
  198.  
  199. idₛ : ∀ {Γ} → Sub Γ Γ
  200. idₛ {∙} = ∙
  201. idₛ {Γ , A} = keepₛ idₛ
  202.  
  203. _∘ₛ_ : ∀ {Γ Δ Σ} → Sub Δ Σ → Sub Γ Δ → Sub Γ Σ
  204. ∙ ∘ₛ δ = ∙
  205. (σ , t) ∘ₛ δ = σ ∘ₛ δ , Tmₛ δ t
  206.  
  207. -- Various versions of associativity and identity
  208. -- with substitution/embedding differing on sides of operations.
  209. -- Both for category laws and Tm/∈ functor laws.
  210. assₛₑₑ :
  211. ∀ {Γ Δ Σ Ξ}(σ : Sub Σ Ξ)(δ : OPE Δ Σ)(ν : OPE Γ Δ)
  212. → (σ ₛ∘ₑ δ) ₛ∘ₑ ν ≡ σ ₛ∘ₑ (δ ∘ₑ ν)
  213. assₛₑₑ ∙ δ ν = refl
  214. assₛₑₑ (σ , t) δ ν = _,_ & assₛₑₑ σ δ ν ⊗ (Tm-∘ₑ δ ν t ⁻¹)
  215.  
  216. assₑₛₑ :
  217. ∀ {Γ Δ Σ Ξ}(σ : OPE Σ Ξ)(δ : Sub Δ Σ)(ν : OPE Γ Δ)
  218. → (σ ₑ∘ₛ δ) ₛ∘ₑ ν ≡ σ ₑ∘ₛ (δ ₛ∘ₑ ν)
  219. assₑₛₑ ∙ δ ν = refl
  220. assₑₛₑ (drop σ) (δ , t) ν = assₑₛₑ σ δ ν
  221. assₑₛₑ (keep σ) (δ , t) ν = (_, Tmₑ ν t) & assₑₛₑ σ δ ν
  222.  
  223. idlₑₛ : ∀ {Γ Δ}(σ : Sub Γ Δ) → idₑ ₑ∘ₛ σ ≡ σ
  224. idlₑₛ ∙ = refl
  225. idlₑₛ (σ , t) = (_, t) & idlₑₛ σ
  226.  
  227. idlₛₑ : ∀ {Γ Δ}(σ : OPE Γ Δ) → idₛ ₛ∘ₑ σ ≡ ⌜ σ ⌝ᵒᵖᵉ
  228. idlₛₑ ∙ = refl
  229. idlₛₑ (drop σ) =
  230. ((idₛ ₛ∘ₑ_) ∘ drop) & idrₑ σ ⁻¹
  231. ◾ assₛₑₑ idₛ σ wk ⁻¹
  232. ◾ dropₛ & idlₛₑ σ
  233. idlₛₑ (keep σ) =
  234. (_, var vz) &
  235. (assₛₑₑ idₛ wk (keep σ)
  236. ◾ ((idₛ ₛ∘ₑ_) ∘ drop) & (idlₑ σ ◾ idrₑ σ ⁻¹)
  237. ◾ assₛₑₑ idₛ σ wk ⁻¹
  238. ◾ (_ₛ∘ₑ wk) & idlₛₑ σ )
  239.  
  240. idrₑₛ : ∀ {Γ Δ}(σ : OPE Γ Δ) → σ ₑ∘ₛ idₛ ≡ ⌜ σ ⌝ᵒᵖᵉ
  241. idrₑₛ ∙ = refl
  242. idrₑₛ (drop σ) = assₑₛₑ σ idₛ wk ⁻¹ ◾ dropₛ & idrₑₛ σ
  243. idrₑₛ (keep σ) = (_, var vz) & (assₑₛₑ σ idₛ wk ⁻¹ ◾ (_ₛ∘ₑ wk) & idrₑₛ σ)
  244.  
  245. ∈-ₑ∘ₛ : ∀ {A Γ Δ Σ}(σ : OPE Δ Σ)(δ : Sub Γ Δ)(v : A ∈ Σ) → ∈ₛ (σ ₑ∘ₛ δ) v ≡ ∈ₛ δ (∈ₑ σ v)
  246. ∈-ₑ∘ₛ ∙ δ v = refl
  247. ∈-ₑ∘ₛ (drop σ) (δ , t) v = ∈-ₑ∘ₛ σ δ v
  248. ∈-ₑ∘ₛ (keep σ) (δ , t) vz = refl
  249. ∈-ₑ∘ₛ (keep σ) (δ , t) (vs v) = ∈-ₑ∘ₛ σ δ v
  250.  
  251. Tm-ₑ∘ₛ : ∀ {A Γ Δ Σ}(σ : OPE Δ Σ)(δ : Sub Γ Δ)(t : Tm Σ A) → Tmₛ (σ ₑ∘ₛ δ) t ≡ Tmₛ δ (Tmₑ σ t)
  252. Tm-ₑ∘ₛ σ δ (var v) = ∈-ₑ∘ₛ σ δ v
  253. Tm-ₑ∘ₛ σ δ (lam t) =
  254. lam & ((λ x → Tmₛ (x , var vz) t) & assₑₛₑ σ δ wk ◾ Tm-ₑ∘ₛ (keep σ) (keepₛ δ) t)
  255. Tm-ₑ∘ₛ σ δ (app f a) = app & Tm-ₑ∘ₛ σ δ f ⊗ Tm-ₑ∘ₛ σ δ a
  256. Tm-ₑ∘ₛ σ δ true = refl
  257. Tm-ₑ∘ₛ σ δ false = refl
  258. Tm-ₑ∘ₛ σ δ (bcase b t f) = bcase & Tm-ₑ∘ₛ σ δ b ⊗ Tm-ₑ∘ₛ σ δ t ⊗ Tm-ₑ∘ₛ σ δ f
  259.  
  260. ∈-ₛ∘ₑ : ∀ {A Γ Δ Σ}(σ : Sub Δ Σ)(δ : OPE Γ Δ)(v : A ∈ Σ) → ∈ₛ (σ ₛ∘ₑ δ) v ≡ Tmₑ δ (∈ₛ σ v)
  261. ∈-ₛ∘ₑ (σ , _) δ vz = refl
  262. ∈-ₛ∘ₑ (σ , _) δ (vs v) = ∈-ₛ∘ₑ σ δ v
  263.  
  264. Tm-ₛ∘ₑ : ∀ {A Γ Δ Σ}(σ : Sub Δ Σ)(δ : OPE Γ Δ)(t : Tm Σ A) → Tmₛ (σ ₛ∘ₑ δ) t ≡ Tmₑ δ (Tmₛ σ t)
  265. Tm-ₛ∘ₑ σ δ (var v) = ∈-ₛ∘ₑ σ δ v
  266. Tm-ₛ∘ₑ σ δ (lam t) =
  267. lam &
  268. ((λ x → Tmₛ (x , var vz) t) &
  269. (assₛₑₑ σ δ wk
  270. ◾ (σ ₛ∘ₑ_) & (drop & (idrₑ δ ◾ idlₑ δ ⁻¹))
  271. ◾ assₛₑₑ σ wk (keep δ) ⁻¹)
  272. ◾ Tm-ₛ∘ₑ (keepₛ σ) (keep δ) t)
  273. Tm-ₛ∘ₑ σ δ (app f a) = app & Tm-ₛ∘ₑ σ δ f ⊗ Tm-ₛ∘ₑ σ δ a
  274. Tm-ₛ∘ₑ σ δ true = refl
  275. Tm-ₛ∘ₑ σ δ false = refl
  276. Tm-ₛ∘ₑ σ δ (bcase b t f) = bcase & Tm-ₛ∘ₑ σ δ b ⊗ Tm-ₛ∘ₑ σ δ t ⊗ Tm-ₛ∘ₑ σ δ f
  277.  
  278. assₛₑₛ :
  279. ∀ {Γ Δ Σ Ξ}(σ : Sub Σ Ξ)(δ : OPE Δ Σ)(ν : Sub Γ Δ)
  280. → (σ ₛ∘ₑ δ) ∘ₛ ν ≡ σ ∘ₛ (δ ₑ∘ₛ ν)
  281. assₛₑₛ ∙ δ ν = refl
  282. assₛₑₛ (σ , t) δ ν = _,_ & assₛₑₛ σ δ ν ⊗ (Tm-ₑ∘ₛ δ ν t ⁻¹)
  283.  
  284. assₛₛₑ :
  285. ∀ {Γ Δ Σ Ξ}(σ : Sub Σ Ξ)(δ : Sub Δ Σ)(ν : OPE Γ Δ)
  286. → (σ ∘ₛ δ) ₛ∘ₑ ν ≡ σ ∘ₛ (δ ₛ∘ₑ ν)
  287. assₛₛₑ ∙ δ ν = refl
  288. assₛₛₑ (σ , t) δ ν = _,_ & assₛₛₑ σ δ ν ⊗ (Tm-ₛ∘ₑ δ ν t ⁻¹)
  289.  
  290. ∈-idₛ : ∀ {A Γ}(v : A ∈ Γ) → ∈ₛ idₛ v ≡ var v
  291. ∈-idₛ vz = refl
  292. ∈-idₛ (vs v) = ∈-ₛ∘ₑ idₛ wk v ◾ Tmₑ wk & ∈-idₛ v ◾ (var ∘ vs) & ∈-idₑ v
  293.  
  294. ∈-∘ₛ : ∀ {A Γ Δ Σ}(σ : Sub Δ Σ)(δ : Sub Γ Δ)(v : A ∈ Σ) → ∈ₛ (σ ∘ₛ δ) v ≡ Tmₛ δ (∈ₛ σ v)
  295. ∈-∘ₛ (σ , _) δ vz = refl
  296. ∈-∘ₛ (σ , _) δ (vs v) = ∈-∘ₛ σ δ v
  297.  
  298. Tm-idₛ : ∀ {A Γ}(t : Tm Γ A) → Tmₛ idₛ t ≡ t
  299. Tm-idₛ (var v) = ∈-idₛ v
  300. Tm-idₛ (lam t) = lam & Tm-idₛ t
  301. Tm-idₛ (app f a) = app & Tm-idₛ f ⊗ Tm-idₛ a
  302. Tm-idₛ true = refl
  303. Tm-idₛ false = refl
  304. Tm-idₛ (bcase b t f) = bcase & Tm-idₛ b ⊗ Tm-idₛ t ⊗ Tm-idₛ f
  305.  
  306. Tm-∘ₛ : ∀ {A Γ Δ Σ}(σ : Sub Δ Σ)(δ : Sub Γ Δ)(t : Tm Σ A) → Tmₛ (σ ∘ₛ δ) t ≡ Tmₛ δ (Tmₛ σ t)
  307. Tm-∘ₛ σ δ (var v) = ∈-∘ₛ σ δ v
  308. Tm-∘ₛ σ δ (lam t) =
  309. lam &
  310. ((λ x → Tmₛ (x , var vz) t) &
  311. (assₛₛₑ σ δ wk
  312. ◾ (σ ∘ₛ_) & (idlₑₛ (dropₛ δ) ⁻¹) ◾ assₛₑₛ σ wk (keepₛ δ) ⁻¹)
  313. ◾ Tm-∘ₛ (keepₛ σ) (keepₛ δ) t)
  314. Tm-∘ₛ σ δ (app f a) = app & Tm-∘ₛ σ δ f ⊗ Tm-∘ₛ σ δ a
  315. Tm-∘ₛ σ δ true = refl
  316. Tm-∘ₛ σ δ false = refl
  317. Tm-∘ₛ σ δ (bcase b t f) = bcase & Tm-∘ₛ σ δ b ⊗ Tm-∘ₛ σ δ t ⊗ Tm-∘ₛ σ δ f
  318.  
  319. idrₛ : ∀ {Γ Δ}(σ : Sub Γ Δ) → σ ∘ₛ idₛ ≡ σ
  320. idrₛ ∙ = refl
  321. idrₛ (σ , t) = _,_ & idrₛ σ ⊗ Tm-idₛ t
  322.  
  323. idlₛ : ∀ {Γ Δ}(σ : Sub Γ Δ) → idₛ ∘ₛ σ ≡ σ
  324. idlₛ ∙ = refl
  325. idlₛ (σ , t) = (_, t) & (assₛₑₛ idₛ wk (σ , t) ◾ (idₛ ∘ₛ_) & idlₑₛ σ ◾ idlₛ σ)
  326.  
  327. assₛ :
  328. ∀ {Γ Δ Σ Ξ}(σ : Sub Σ Ξ)(δ : Sub Δ Σ)(ν : Sub Γ Δ)
  329. → (σ ∘ₛ δ) ∘ₛ ν ≡ σ ∘ₛ (δ ∘ₛ ν)
  330. assₛ ∙ δ ν = refl
  331. assₛ (σ , t) δ ν = _,_ & assₛ σ δ ν ⊗ (Tm-∘ₛ δ ν t ⁻¹)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement