English
The category of topological spaces TopCat is finitary extensive.
Русский
Категория пространств топологических пространств TopCat является конечной расширяемой.
LaTeX
$$$FinitaryExtensive\; TopCat$$$
Lean4
instance finitaryExtensive : FinitaryExtensive (Type u) := by
classical
rw [finitaryExtensive_iff_of_isTerminal (Type u) PUnit Types.isTerminalPunit _ (Types.binaryCoproductColimit _ _)]
apply
BinaryCofan.isVanKampen_mk _ _ (fun X Y => Types.binaryCoproductColimit X Y) _ fun f g =>
(Limits.Types.pullbackLimitCone f g).2
· intro _ _ _ _ f hαX hαY
constructor
· refine ⟨⟨hαX.symm⟩, ⟨PullbackCone.isLimitAux' _ ?_⟩⟩
intro s
have : ∀ x, ∃! y, s.fst x = Sum.inl y := by
intro x
rcases h : s.fst x with val | val
· simp only [Types.binaryCoproductCocone_pt, Functor.const_obj_obj, Sum.inl.injEq, existsUnique_eq']
· apply_fun f at h
cases ((congr_fun s.condition x).symm.trans h).trans (congr_fun hαY val :).symm
delta ExistsUnique at this
choose l hl hl' using this
exact
⟨l, (funext hl).symm, Types.isTerminalPunit.hom_ext _ _, fun {l'} h₁ _ =>
funext fun x => hl' x (l' x) (congr_fun h₁ x).symm⟩
· refine ⟨⟨hαY.symm⟩, ⟨PullbackCone.isLimitAux' _ ?_⟩⟩
intro s
have : ∀ x, ∃! y, s.fst x = Sum.inr y := by
intro x
rcases h : s.fst x with val | val
· apply_fun f at h
cases ((congr_fun s.condition x).symm.trans h).trans (congr_fun hαX val :).symm
· simp only [Types.binaryCoproductCocone_pt, Functor.const_obj_obj, Sum.inr.injEq, existsUnique_eq']
delta ExistsUnique at this
choose l hl hl' using this
exact
⟨l, (funext hl).symm, Types.isTerminalPunit.hom_ext _ _, fun {l'} h₁ _ =>
funext fun x => hl' x (l' x) (congr_fun h₁ x).symm⟩
· intro Z f
dsimp [Limits.Types.binaryCoproductCocone]
delta Types.PullbackObj
have : ∀ x, f x = Sum.inl PUnit.unit ∨ f x = Sum.inr PUnit.unit :=
by
intro x
rcases f x with (⟨⟨⟩⟩ | ⟨⟨⟩⟩)
exacts [Or.inl rfl, Or.inr rfl]
let eX : { p : Z × PUnit // f p.fst = Sum.inl p.snd } ≃ { x : Z // f x = Sum.inl PUnit.unit } :=
⟨fun p => ⟨p.1.1, by convert p.2⟩, fun x => ⟨⟨_, _⟩, x.2⟩, fun _ => by ext; rfl, fun _ => by ext; rfl⟩
let eY : { p : Z × PUnit // f p.fst = Sum.inr p.snd } ≃ { x : Z // f x = Sum.inr PUnit.unit } :=
⟨fun p => ⟨p.1.1, p.2.trans (congr_arg Sum.inr <| Subsingleton.elim _ _)⟩, fun x => ⟨⟨_, _⟩, x.2⟩, fun _ => by
ext; rfl, fun _ => by ext; rfl⟩
fapply BinaryCofan.isColimitMk
· exact fun s x => dite _ (fun h => s.inl <| eX.symm ⟨x, h⟩) fun h => s.inr <| eY.symm ⟨x, (this x).resolve_left h⟩
· intro s
ext ⟨⟨x, ⟨⟩⟩, _⟩
dsimp
split_ifs <;> rfl
· intro s
ext ⟨⟨x, ⟨⟩⟩, hx⟩
dsimp
split_ifs with h
· cases h.symm.trans hx
· rfl
· intro s m e₁ e₂
ext x
split_ifs
· rw [← e₁]
rfl
· rw [← e₂]
rfl