@@ -3,6 +3,7 @@ Copyright (c) 2020 Kim Morrison. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Johan Commelin, Kim Morrison, Adam Topaz
5
5
-/
6
+ import Mathlib.Tactic.FinCases
6
7
import Mathlib.Tactic.Linarith
7
8
import Mathlib.CategoryTheory.Skeletal
8
9
import Mathlib.Data.Fintype.Sort
@@ -168,6 +169,10 @@ theorem const_fac_thru_zero (n m : SimplexCategory) (i : Fin (m.len + 1)) :
168
169
const n m i = const n [0 ] 0 ≫ SimplexCategory.const [0 ] m i := by
169
170
rw [const_comp]; rfl
170
171
172
+ theorem Hom.ext_zero_left {n : SimplexCategory} (f g : ([0 ] : SimplexCategory) ⟶ n)
173
+ (h0 : f.toOrderHom 0 = g.toOrderHom 0 := by rfl) : f = g := by
174
+ ext i; match i with | 0 => exact h0 ▸ rfl
175
+
171
176
theorem eq_const_of_zero {n : SimplexCategory} (f : ([0 ] : SimplexCategory) ⟶ n) :
172
177
f = const _ n (f.toOrderHom 0 ) := by
173
178
ext x; match x with | 0 => rfl
@@ -180,6 +185,14 @@ theorem eq_const_to_zero {n : SimplexCategory} (f : n ⟶ [0]) :
180
185
ext : 3
181
186
apply @Subsingleton.elim (Fin 1 )
182
187
188
+ theorem Hom.ext_one_left {n : SimplexCategory} (f g : ([1 ] : SimplexCategory) ⟶ n)
189
+ (h0 : f.toOrderHom 0 = g.toOrderHom 0 := by rfl)
190
+ (h1 : f.toOrderHom 1 = g.toOrderHom 1 := by rfl) : f = g := by
191
+ ext i
192
+ match i with
193
+ | 0 => exact h0 ▸ rfl
194
+ | 1 => exact h1 ▸ rfl
195
+
183
196
theorem eq_of_one_to_one (f : ([1 ] : SimplexCategory) ⟶ [1 ]) :
184
197
(∃ a, f = const [1 ] _ a) ∨ f = 𝟙 _ := by
185
198
match e0 : f.toOrderHom 0 , e1 : f.toOrderHom 1 with
@@ -218,6 +231,14 @@ def mkOfLe {n} (i j : Fin (n+1)) (h : i ≤ j) : ([1] : SimplexCategory) ⟶ [n]
218
231
| 0 , 1 , _ => h
219
232
}
220
233
234
+ /-- The morphism `[1] ⟶ [n]` that picks out the "diagonal composite" edge-/
235
+ def diag (n : ℕ) : ([1 ] : SimplexCategory) ⟶ [n] :=
236
+ mkOfLe 0 n (Fin.zero_le _)
237
+
238
+ /-- The morphism `[1] ⟶ [n]` that picks out the edge spanning the interval from `j` to `j + l`.-/
239
+ def intervalEdge {n} (j l : ℕ) (hjl : j + l ≤ n) : ([1 ] : SimplexCategory) ⟶ [n] :=
240
+ mkOfLe ⟨j, (by omega)⟩ ⟨j + l, (by omega)⟩ (Nat.le_add_right j l)
241
+
221
242
/-- The morphism `[1] ⟶ [n]` that picks out the arrow `i ⟶ i+1` in `Fin (n+1)`.-/
222
243
def mkOfSucc {n} (i : Fin n) : ([1 ] : SimplexCategory) ⟶ [n] :=
223
244
SimplexCategory.mkHom {
@@ -227,6 +248,15 @@ def mkOfSucc {n} (i : Fin n) : ([1] : SimplexCategory) ⟶ [n] :=
227
248
| 0 , 1 , _ => Fin.castSucc_le_succ i
228
249
}
229
250
251
+ @[simp]
252
+ lemma mkOfSucc_homToOrderHom_zero {n} (i : Fin n) :
253
+ DFunLike.coe (F := Fin 2 →o Fin (n+1 )) (Hom.toOrderHom (mkOfSucc i)) 0 = i.castSucc := rfl
254
+
255
+ @[simp]
256
+ lemma mkOfSucc_homToOrderHom_one {n} (i : Fin n) :
257
+ DFunLike.coe (F := Fin 2 →o Fin (n+1 )) (Hom.toOrderHom (mkOfSucc i)) 1 = i.succ := rfl
258
+
259
+
230
260
/-- The morphism `[2] ⟶ [n]` that picks out a specified composite of morphisms in `Fin (n+1)`.-/
231
261
def mkOfLeComp {n} (i j k : Fin (n + 1 )) (h₁ : i ≤ j) (h₂ : j ≤ k) :
232
262
([2 ] : SimplexCategory) ⟶ [n] :=
@@ -239,6 +269,60 @@ def mkOfLeComp {n} (i j k : Fin (n + 1)) (h₁ : i ≤ j) (h₂ : j ≤ k) :
239
269
| 0 , 2 , _ => Fin.le_trans h₁ h₂
240
270
}
241
271
272
+ /-- The "inert" morphism associated to a subinterval `j ≤ i ≤ j + l` of `Fin (n + 1)`.-/
273
+ def subinterval {n} (j l : ℕ) (hjl : j + l ≤ n) :
274
+ ([l] : SimplexCategory) ⟶ [n] :=
275
+ SimplexCategory.mkHom {
276
+ toFun := fun i => ⟨i.1 + j, (by omega)⟩
277
+ monotone' := fun i i' hii' => by simpa only [Fin.mk_le_mk, add_le_add_iff_right] using hii'
278
+ }
279
+
280
+ lemma const_subinterval_eq {n} (j l : ℕ) (hjl : j + l ≤ n) (i : Fin (l + 1 )) :
281
+ [0 ].const [l] i ≫ subinterval j l hjl =
282
+ [0 ].const [n] ⟨j + i.1 , lt_add_of_lt_add_right (Nat.add_lt_add_left i.2 j) hjl⟩ := by
283
+ rw [const_comp]
284
+ congr
285
+ ext
286
+ dsimp [subinterval]
287
+ rw [add_comm]
288
+
289
+ @[simp]
290
+ lemma mkOfSucc_subinterval_eq {n} (j l : ℕ) (hjl : j + l ≤ n) (i : Fin l) :
291
+ mkOfSucc i ≫ subinterval j l hjl =
292
+ mkOfSucc ⟨j + i.1 , Nat.lt_of_lt_of_le (Nat.add_lt_add_left i.2 j) hjl⟩ := by
293
+ unfold subinterval mkOfSucc
294
+ ext i
295
+ match i with
296
+ | 0 =>
297
+ simp only [len_mk, Nat.reduceAdd, mkHom, comp_toOrderHom, Hom.toOrderHom_mk,
298
+ OrderHom.mk_comp_mk, Fin.isValue, OrderHom.coe_mk, Function.comp_apply, Fin.castSucc_mk,
299
+ Fin.succ_mk]
300
+ rw [add_comm]
301
+ rfl
302
+ | 1 =>
303
+ simp only [len_mk, Nat.reduceAdd, mkHom, comp_toOrderHom, Hom.toOrderHom_mk,
304
+ OrderHom.mk_comp_mk, Fin.isValue, OrderHom.coe_mk, Function.comp_apply, Fin.castSucc_mk,
305
+ Fin.succ_mk]
306
+ rw [← Nat.add_comm j _]
307
+ rfl
308
+
309
+ @[simp]
310
+ lemma diag_subinterval_eq {n} (j l : ℕ) (hjl : j + l ≤ n) :
311
+ diag l ≫ subinterval j l hjl = intervalEdge j l hjl := by
312
+ unfold subinterval intervalEdge diag mkOfLe
313
+ ext i
314
+ match i with
315
+ | 0 =>
316
+ simp only [len_mk, Nat.reduceAdd, mkHom, Fin.natCast_eq_last, comp_toOrderHom,
317
+ Hom.toOrderHom_mk, OrderHom.mk_comp_mk, Fin.isValue, OrderHom.coe_mk, Function.comp_apply]
318
+ rw [Nat.add_comm]
319
+ rfl
320
+ | 1 =>
321
+ simp only [len_mk, Nat.reduceAdd, mkHom, Fin.natCast_eq_last, comp_toOrderHom,
322
+ Hom.toOrderHom_mk, OrderHom.mk_comp_mk, Fin.isValue, OrderHom.coe_mk, Function.comp_apply]
323
+ rw [Nat.add_comm]
324
+ rfl
325
+
242
326
instance (Δ : SimplexCategory) : Subsingleton (Δ ⟶ [0 ]) where
243
327
allEq f g := by ext : 3 ; apply Subsingleton.elim (α := Fin 1 )
244
328
@@ -466,6 +550,19 @@ lemma factor_δ_spec {m n : ℕ} (f : ([m] : SimplexCategory) ⟶ [n+1]) (j : Fi
466
550
· rwa [succ_le_castSucc_iff, lt_pred_iff]
467
551
rw [succ_pred]
468
552
553
+ @[simp]
554
+ lemma δ_zero_mkOfSucc {n : ℕ} (i : Fin n) :
555
+ δ 0 ≫ mkOfSucc i = SimplexCategory.const _ [n] i.succ := by
556
+ ext x
557
+ fin_cases x
558
+ rfl
559
+
560
+ @[simp]
561
+ lemma δ_one_mkOfSucc {n : ℕ} (i : Fin n) :
562
+ δ 1 ≫ mkOfSucc i = SimplexCategory.const _ _ i.castSucc := by
563
+ ext x
564
+ fin_cases x
565
+ aesop
469
566
470
567
theorem eq_of_one_to_two (f : ([1 ] : SimplexCategory) ⟶ [2 ]) :
471
568
f = (δ (n := 1 ) 0 ) ∨ f = (δ (n := 1 ) 1 ) ∨ f = (δ (n := 1 ) 2 ) ∨
0 commit comments