Lean4
instance locallyDirectedPullbackCover : Cover.LocallyDirected (𝒰.pullback₁ f)
where
trans {i j} hij := pullback.map f (𝒰.f i) f (𝒰.f j) (𝟙 _) (𝒰.trans hij) (𝟙 _) (by simp) (by simp)
trans_id i := by simp
trans_comp hij hjk := by simp [pullback.map_comp]
directed {i j}
x := by
dsimp at i j x ⊢
let iso :
pullback (pullback.fst f (𝒰.f i)) (pullback.fst f (𝒰.f j)) ≅ pullback f (pullback.fst (𝒰.f i) (𝒰.f j) ≫ 𝒰.f i) :=
pullbackRightPullbackFstIso _ _ _ ≪≫ pullback.congrHom pullback.condition rfl ≪≫ pullbackAssoc ..
have (k : 𝒰.I₀) (hki : k ⟶ i) (hkj : k ⟶ j) :
(pullback.lift (pullback.map f (𝒰.f k) f (𝒰.f i) (𝟙 Y) (𝒰.trans hki) (𝟙 X) (by simp) (by simp))
(pullback.map f (𝒰.f k) f (𝒰.f j) (𝟙 Y) (𝒰.trans hkj) (𝟙 X) (by simp) (by simp)) (by simp)) =
pullback.map _ _ _ _ (𝟙 Y) (pullback.lift (𝒰.trans hki) (𝒰.trans hkj) (by simp)) (𝟙 X) (by simp) (by simp) ≫
iso.inv :=
by apply pullback.hom_ext <;> apply pullback.hom_ext <;> simp [iso]
obtain ⟨k, hki, hkj, yk, hyk⟩ := 𝒰.exists_lift_trans_eq ((iso.hom ≫ pullback.snd _ _).base x)
refine ⟨k, hki, hkj, show x ∈ Set.range _ from ?_⟩
rw [this, Scheme.comp_base, TopCat.coe_comp, Set.range_comp, Pullback.range_map]
use iso.hom.base x
simp only [id.base, TopCat.hom_id, ContinuousMap.coe_id, Set.range_id, Set.preimage_univ, Set.univ_inter,
Set.mem_preimage, Set.mem_range, iso_hom_base_inv_base_apply, and_true]
exact ⟨yk, hyk⟩
property_trans {i j}
hij :=
by
let iso : pullback f (𝒰.f i) ≅ pullback (pullback.snd f (𝒰.f j)) (𝒰.trans hij) :=
pullback.congrHom rfl (by simp) ≪≫ (pullbackLeftPullbackSndIso _ _ _).symm
rw [← P.cancel_left_of_respectsIso iso.inv]
simp [Iso.trans_inv, Iso.symm_inv, pullback.congrHom_inv, Category.assoc, iso]
convert P.pullback_fst _ _ (𝒰.property_trans hij)
apply pullback.hom_ext <;> simp [pullback.condition]