Theorem: AlgebraicGeometry.LocallyRingedSpace.HasCoequalizer.imageBasicOpen_image_open
File: Mathlib/Geometry/RingedSpace/LocallyRingedSpace/HasColimits.lean

tactic: rw [← (TopCat.homeoOfIso (PreservesCoequalizer.iso (SheafedSpace.forget _) f.1
  g.1)).isOpen_preimage, TopCat.coequalizer_isOpen_iff, ← Set.preimage_comp]
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier)
state_after: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑(TopCat.homeoOfIso (PreservesCoequalizer.iso (SheafedSpace.forget CommRingCat) f.val g.val)) ∘
        ⇑(colimit.ι
            (parallelPair ((SheafedSpace.forget CommRingCat).map f.val) ((SheafedSpace.forget CommRingCat).map g.val))
            WalkingParallelPair.one) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))

tactic: erw [← TopCat.coe_comp]
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑(TopCat.homeoOfIso (PreservesCoequalizer.iso (SheafedSpace.forget CommRingCat) f.val g.val)) ∘
        ⇑(colimit.ι
            (parallelPair ((SheafedSpace.forget CommRingCat).map f.val) ((SheafedSpace.forget CommRingCat).map g.val))
            WalkingParallelPair.one) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))
state_after: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑(colimit.ι
            (parallelPair ((SheafedSpace.forget CommRingCat).map f.val) ((SheafedSpace.forget CommRingCat).map g.val))
            WalkingParallelPair.one ≫
          (PreservesCoequalizer.iso (SheafedSpace.forget CommRingCat) f.val g.val).hom) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))

tactic: rw [PreservesCoequalizer.iso_hom, ι_comp_coequalizerComparison]
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑(colimit.ι
            (parallelPair ((SheafedSpace.forget CommRingCat).map f.val) ((SheafedSpace.forget CommRingCat).map g.val))
            WalkingParallelPair.one ≫
          (PreservesCoequalizer.iso (SheafedSpace.forget CommRingCat) f.val g.val).hom) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))
state_after: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑((SheafedSpace.forget CommRingCat).map (coequalizer.π f.val g.val)) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))

tactic: dsimp only [SheafedSpace.forget]
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen
    (⇑((SheafedSpace.forget CommRingCat).map (coequalizer.π f.val g.val)) ⁻¹'
      (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))
state_after: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen (⇑(coequalizer.π f.val g.val).base ⁻¹' (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))

tactic: erw [imageBasicOpen_image_preimage]
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen (⇑(coequalizer.π f.val g.val).base ⁻¹' (⇑(coequalizer.π f.val g.val).base '' (imageBasicOpen f g U s).carrier))
state_after: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen (imageBasicOpen f g U s).carrier

tactic: exact (imageBasicOpen f g U s).2
state_before: X Y : LocallyRingedSpace
f g : X ⟶ Y
U : Opens ↑↑(coequalizer f.val g.val).toPresheafedSpace
s : ↑((coequalizer f.val g.val).presheaf.obj { unop := U })
⊢ IsOpen (imageBasicOpen f g U s).carrier
state_after: no goals