Komorebi Space · Lean source

MarkedTransport.lean

Declared contract recorded Coverage and evidence

The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

Local imports (1)

KomorebiSpace/MarkedTransport.lean135 lines

Original source pathlean/KomorebiSpace/MarkedTransport.lean
Skip declarations and read code

Skip source text

1 import KomorebiSpace.MarkedRealization
2 
3 set_option autoImplicit false
4 
5 /-!
6 # Transport of identified-boundary groupoids
7 
8 A square commuting by a specified natural isomorphism induces a functor on
9 identified-boundary realizations. Full faithfulness and essential surjectivity
10 are proved by explicitly lifting morphisms and objects; the fiber equivalence
11 is not an assumption. The square may be non-strict.
12 -/
13 universe u₁ u₂ u₃ u₄ v₁ v₂ v₃ v₄
14 namespace KomorebiSpace
15 open CategoryTheory
16 namespace MarkedRealization
17 variable {C : Type u₁} [Groupoid.{v₁} C]
18 variable {D : Type u₂} [Groupoid.{v₂} D]
19 variable {C' : Type u₃} [Groupoid.{v₃} C']
20 variable {D' : Type u₄} [Groupoid.{v₄} D']
21 variable {F : C ⥤ D} {F' : C' ⥤ D'}
22 
23 /-- The comparison isomorphism transports the boundary along the square. -/
24 def transport (E : C ⥤ C') (K : D ⥤ D') (s : F ⋙ K ≅ E ⋙ F') (b : D) :
25     MarkedRealization F b ⥤ MarkedRealization F' (K.obj b) where
26   obj x := ⟨E.obj x.obj, s.inv.app x.obj ≫ K.map x.identify⟩
27   map := fun {x y} f =>
28     ⟨E.map f.val, by
29       change F'.map (E.map f.val) ≫ (s.inv.app y.obj ≫ K.map y.identify) =
30         s.inv.app x.obj ≫ K.map x.identify
31       have hs : F'.map (E.map f.val) ≫ s.inv.app y.obj =
32           s.inv.app x.obj ≫ K.map (F.map f.val) := s.inv.naturality f.val
33       rw [← Category.assoc, hs, Category.assoc, ← K.map_comp, f.comm]⟩
34   map_id := by intro x; apply Hom.ext; exact E.map_id x.obj
35   map_comp := by intro x y z f g; apply Hom.ext; exact E.map_comp f.val g.val
36 
37 @[simp] theorem transport_obj (E : C ⥤ C') (K : D ⥤ D')
38     (s : F ⋙ K ≅ E ⋙ F') (b : D) (x : MarkedRealization F b) :
39     ((transport E K s b).obj x).obj = E.obj x.obj := rfl
40 
41 @[simp] theorem transport_identify (E : C ⥤ C') (K : D ⥤ D')
42     (s : F ⋙ K ≅ E ⋙ F') (b : D) (x : MarkedRealization F b) :
43     ((transport E K s b).obj x).identify = s.inv.app x.obj ≫ K.map x.identify := rfl
44 
45 @[simp] theorem transport_map (E : C ⥤ C') (K : D ⥤ D')
46     (s : F ⋙ K ≅ E ⋙ F') (b : D) {x y : MarkedRealization F b} (f : x ⟶ y) :
47     ((transport E K s b).map f).val = E.map f.val := rfl
48 
49 /-- Lift an actual fiber morphism and reflect its boundary equation. -/
50 noncomputable def liftHom (E : C ⥤ C') (K : D ⥤ D')
51     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.Full] [E.Faithful] [K.Faithful]
52     {x y : MarkedRealization F b}
53     (a : (transport E K s b).obj x ⟶ (transport E K s b).obj y) : x ⟶ y where
54   val := E.preimage a.val
55   comm := by
56     apply K.map_injective
57     apply (cancel_epi (s.inv.app x.obj)).mp
58     have hs : F'.map (E.map (E.preimage a.val)) ≫ s.inv.app y.obj =
59         s.inv.app x.obj ≫ K.map (F.map (E.preimage a.val)) :=
60       s.inv.naturality (E.preimage a.val)
61     calc
62       s.inv.app x.obj ≫ K.map (F.map (E.preimage a.val) ≫ y.identify) =
63           F'.map (E.map (E.preimage a.val)) ≫ (s.inv.app y.obj ≫ K.map y.identify) := by
64             rw [K.map_comp, ← Category.assoc, ← hs, Category.assoc]
65       _ = s.inv.app x.obj ≫ K.map x.identify := by
66         rw [E.map_preimage a.val]
67         exact a.comm
68 
69 noncomputable def transportFullyFaithful (E : C ⥤ C') (K : D ⥤ D')
70     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.Full] [E.Faithful] [K.Faithful] :
71     (transport E K s b).FullyFaithful where
72   preimage := liftHom E K s b
73   map_preimage := by intro x y a; apply Hom.ext; exact E.map_preimage a.val
74   preimage_map := by intro x y a; apply Hom.ext; exact E.preimage_map a.val
75 
76 /-- Chosen global preimage and a lifted identification, not an assumed fiber preimage. -/
77 noncomputable def chosenPreimage (E : C ⥤ C') (K : D ⥤ D')
78     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.EssSurj] [K.Full]
79     (y : MarkedRealization F' (K.obj b)) : MarkedRealization F b where
80   obj := E.objPreimage y.obj
81   identify := K.preimage (s.hom.app (E.objPreimage y.obj) ≫
82     F'.map (E.objObjPreimageIso y.obj).hom ≫ y.identify)
83 
84 /-- Essential surjectivity includes compatibility of the chosen boundary mark. -/
85 noncomputable def chosenComparison (E : C ⥤ C') (K : D ⥤ D')
86     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.EssSurj] [K.Full]
87     (y : MarkedRealization F' (K.obj b)) :
88     (transport E K s b).obj (chosenPreimage E K s b y) ⟶ y where
89   val := (E.objObjPreimageIso y.obj).hom
90   comm := by
91     change F'.map (E.objObjPreimageIso y.obj).hom ≫ y.identify =
92       s.inv.app (E.objPreimage y.obj) ≫ K.map
93         (K.preimage (s.hom.app (E.objPreimage y.obj) ≫
94           F'.map (E.objObjPreimageIso y.obj).hom ≫ y.identify))
95     rw [K.map_preimage]
96     simp
97 
98 /-- Proved essential surjectivity on the identified-boundary groupoid. -/
99 theorem transport_essentially_surjective (E : C ⥤ C') (K : D ⥤ D')
100     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.EssSurj] [K.Full] :
101     (transport E K s b).EssSurj := by
102   constructor
103   intro y
104   exact ⟨chosenPreimage E K s b y,
105     ⟨(Groupoid.isoEquivHom _ _).symm (chosenComparison E K s b y)⟩⟩
106 
107 /-- Equivalence of presentations preserves the full identified-boundary groupoid. -/
108 theorem transport_isEquivalence (E : C ⥤ C') (K : D ⥤ D')
109     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.IsEquivalence] [K.IsEquivalence] :
110     (transport E K s b).IsEquivalence := by
111   let ff := transportFullyFaithful E K s b
112   let : (transport E K s b).Full := ff.full
113   let : (transport E K s b).Faithful := ff.faithful
114   let : (transport E K s b).EssSurj := transport_essentially_surjective E K s b
115   exact {}
116 
117 noncomputable def transportEquivalence (E : C ⥤ C') (K : D ⥤ D')
118     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.IsEquivalence] [K.IsEquivalence] :
119     MarkedRealization F b ≌ MarkedRealization F' (K.obj b) := by
120   letI := transport_isEquivalence E K s b
121   exact (transport E K s b).asEquivalence
122 
123 @[simp] theorem transportEquivalence_functor (E : C ⥤ C') (K : D ⥤ D')
124     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.IsEquivalence] [K.IsEquivalence] :
125     (transportEquivalence E K s b).functor = transport E K s b := rfl
126 
127 /-- Every boundary-preserving Hom, including automorphisms, is retained. -/
128 noncomputable def transportHomEquiv (E : C ⥤ C') (K : D ⥤ D')
129     (s : F ⋙ K ≅ E ⋙ F') (b : D) [E.Full] [E.Faithful] [K.Faithful]
130     (x y : MarkedRealization F b) :
131     (x ⟶ y) ≃ ((transport E K s b).obj x ⟶ (transport E K s b).obj y) :=
132   (transportFullyFaithful E K s b).homEquiv
133 
134 end MarkedRealization
135 end KomorebiSpace

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: 99fc0cf03cfdbdf9379904c6512a11c3a8638d562237c7045edb91ba8f8d30f5

Original source on GitHub

Back to Komorebi Space