Lean4
/-- Given the following diagram with `S ⟶ S'` a monomorphism,
```
X ⟶ X'
↘ ↘
S ⟶ S'
↗ ↗
Y ⟶ Y'
```
This iso witnesses the fact that
```
X ×[S] Y ⟶ (X' ×[S'] Y') ×[Y'] Y
| |
| |
↓ ↓
(X' ×[S'] Y') ×[X'] X ⟶ X' ×[S'] Y'
```
is a pullback square. The diagonal map of this square is `pullback.map`.
Also see `pullback_lift_map_is_pullback`.
-/
@[simps]
def pullbackFstFstIso {X Y S X' Y' S' : C} (f : X ⟶ S) (g : Y ⟶ S) (f' : X' ⟶ S') (g' : Y' ⟶ S') (i₁ : X ⟶ X')
(i₂ : Y ⟶ Y') (i₃ : S ⟶ S') (e₁ : f ≫ i₃ = i₁ ≫ f') (e₂ : g ≫ i₃ = i₂ ≫ g') [Mono i₃] :
pullback (pullback.fst _ _ : pullback (pullback.fst _ _ : pullback f' g' ⟶ _) i₁ ⟶ _)
(pullback.fst _ _ : pullback (pullback.snd _ _ : pullback f' g' ⟶ _) i₂ ⟶ _) ≅
pullback f g
where
hom :=
pullback.lift (pullback.fst _ _ ≫ pullback.snd _ _) (pullback.snd _ _ ≫ pullback.snd _ _)
(by
rw [← cancel_mono i₃, Category.assoc, Category.assoc, Category.assoc, Category.assoc, e₁, e₂, ←
pullback.condition_assoc, pullback.condition_assoc, pullback.condition, pullback.condition_assoc])
inv :=
pullback.lift (pullback.lift (pullback.map _ _ _ _ _ _ _ e₁ e₂) (pullback.fst _ _) (pullback.lift_fst ..))
(pullback.lift (pullback.map _ _ _ _ _ _ _ e₁ e₂) (pullback.snd _ _) (pullback.lift_snd ..))
(by rw [pullback.lift_fst, pullback.lift_fst])
hom_inv_id := by
-- We could use `ext` here to immediately descend to the leaf goals,
-- but it only obscures the structure.
apply pullback.hom_ext
· apply pullback.hom_ext
· apply pullback.hom_ext
· simp only [Category.assoc, lift_fst, lift_fst_assoc, Category.id_comp]
rw [condition]
· simp [Category.assoc, condition]
· simp only [Category.assoc, lift_snd, lift_fst, Category.id_comp]
· apply pullback.hom_ext
· apply pullback.hom_ext
· simp only [Category.assoc, lift_snd_assoc, lift_fst_assoc, lift_fst, Category.id_comp]
rw [← condition_assoc, condition]
· simp only [Category.assoc, lift_snd, lift_fst_assoc, lift_snd_assoc, Category.id_comp]
rw [condition]
· simp only [Category.assoc, lift_snd, Category.id_comp]
inv_hom_id := by
apply pullback.hom_ext
· simp only [Category.assoc, lift_fst, lift_fst_assoc, lift_snd, Category.id_comp]
· simp only [Category.assoc, lift_snd, lift_snd_assoc, Category.id_comp]