Theorem: AlgebraicGeometry.LocallyRingedSpace.IsOpenImmersion.lift_range
File: Mathlib/Geometry/RingedSpace/OpenImmersion.lean

tactic: have := pullback_snd_isIso_of_range_subset f g H'
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
⊢ Set.range ⇑(lift f g H').val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this : IsIso pullback.snd
⊢ Set.range ⇑(lift f g H').val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: dsimp only [lift]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this : IsIso pullback.snd
⊢ Set.range ⇑(lift f g H').val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this : IsIso pullback.snd
⊢ Set.range ⇑(inv pullback.snd ≫ pullback.fst).val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: have : _ = (pullback.fst : pullback f g ⟶ _).val.base :=
  PreservesPullback.iso_hom_fst
    (LocallyRingedSpace.forgetToSheafedSpace ⋙ SheafedSpace.forget _) f g
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this : IsIso pullback.snd
⊢ Set.range ⇑(inv pullback.snd ≫ pullback.fst).val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range ⇑(inv pullback.snd ≫ pullback.fst).val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: erw [LocallyRingedSpace.comp_val, SheafedSpace.comp_base, ← this, ← Category.assoc, coe_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range ⇑(inv pullback.snd ≫ pullback.fst).val.base = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range
      (⇑pullback.fst ∘
        ⇑((inv pullback.snd).val.base ≫
            (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)) =
    ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: rw [Set.range_comp, Set.range_iff_surjective.mpr, Set.image_univ]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range
      (⇑pullback.fst ∘
        ⇑((inv pullback.snd).val.base ≫
            (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)) =
    ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range ⇑pullback.fst = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Function.Surjective
    ⇑((inv pullback.snd).val.base ≫
        (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)

tactic: erw [TopCat.pullback_fst_range]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Set.range ⇑pullback.fst = ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ {x |
      ∃ y,
        ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} =
    ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: ext
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ {x |
      ∃ y,
        ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} =
    ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} ↔
    x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: constructor
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} ↔
    x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: case h.mp
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} →
    x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base →
    x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y}

tactic: rintro ⟨y, eq⟩
state_before: case h.mp
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y} →
    x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: case h.mp.intro
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
y : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj Y)
eq :
  ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x✝ =
    ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y
⊢ x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base

tactic: exact ⟨y, eq.symm⟩
state_before: case h.mp.intro
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
y : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj Y)
eq :
  ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x✝ =
    ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y
⊢ x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base
state_after: no goals

tactic: rintro ⟨y, eq⟩
state_before: case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
⊢ x✝ ∈ ⇑f.val.base ⁻¹' Set.range ⇑g.val.base →
    x✝ ∈
      {x |
        ∃ y,
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
            ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y}
state_after: case h.mpr.intro
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
y : ↑↑Y.toPresheafedSpace
eq : g.val.base y = f.val.base x✝
⊢ x✝ ∈
    {x |
      ∃ y,
        ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y}

tactic: exact ⟨y, eq.symm⟩
state_before: case h.mpr.intro
C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
x✝ : ↑((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).obj X)
y : ↑↑Y.toPresheafedSpace
eq : g.val.base y = f.val.base x✝
⊢ x✝ ∈
    {x |
      ∃ y,
        ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map f) x =
          ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map g) y}
state_after: no goals

tactic: erw [← TopCat.epi_iff_surjective]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Function.Surjective
    ⇑((inv pullback.snd).val.base ≫
        (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Epi
    ((inv pullback.snd).val.base ≫
      (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)

tactic: rw [show (inv (pullback.snd : pullback f g ⟶ _)).val.base = _ from
    (LocallyRingedSpace.forgetToSheafedSpace ⋙ SheafedSpace.forget _).map_inv _]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Epi
    ((inv pullback.snd).val.base ≫
      (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Epi
    (inv ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map pullback.snd) ≫
      (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)

tactic: infer_instance
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : LocallyRingedSpace
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
H' : Set.range ⇑g.val.base ⊆ Set.range ⇑f.val.base
this✝ : IsIso pullback.snd
this :
  (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom ≫ pullback.fst =
    pullback.fst.val.base
⊢ Epi
    (inv ((forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat).map pullback.snd) ≫
      (PreservesPullback.iso (forgetToSheafedSpace ⋙ SheafedSpace.forget CommRingCat) f g).hom)
state_after: no goals