Theorem: AlgebraicGeometry.IsOpenImmersion.range_pullback_snd_of_left
File: Mathlib/AlgebraicGeometry/OpenImmersion.lean

tactic: rw [← show _ = (pullback.snd : pullback f g ⟶ _).1.base from
    PreservesPullback.iso_hom_snd Scheme.forgetToTop f g]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Set.range ⇑pullback.snd.val.base = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Set.range ⇑((PreservesPullback.iso Scheme.forgetToTop f g).hom ≫ pullback.snd) =
    (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier

tactic: erw [coe_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Set.range ⇑((PreservesPullback.iso Scheme.forgetToTop f g).hom ≫ pullback.snd) =
    (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Set.range (⇑pullback.snd ∘ ⇑(PreservesPullback.iso Scheme.forgetToTop f g).hom) =
    (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier

tactic: rw [Set.range_comp, Set.range_iff_surjective.mpr, ←
  @Set.preimage_univ _ _ (pullback.fst : pullback f.1.base g.1.base ⟶ _)]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Set.range (⇑pullback.snd ∘ ⇑(PreservesPullback.iso Scheme.forgetToTop f g).hom) =
    (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' Set.univ) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier

C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Function.Surjective ⇑(PreservesPullback.iso Scheme.forgetToTop f g).hom

tactic: erw [← TopCat.epi_iff_surjective]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Function.Surjective ⇑(PreservesPullback.iso Scheme.forgetToTop f g).hom
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Epi (PreservesPullback.iso Scheme.forgetToTop f g).hom

tactic: infer_instance
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ Epi (PreservesPullback.iso Scheme.forgetToTop f g).hom
state_after: no goals

tactic: erw [TopCat.pullback_snd_image_fst_preimage]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' Set.univ) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑(Scheme.forgetToTop.map g) ⁻¹' (⇑(Scheme.forgetToTop.map f) '' Set.univ) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier

tactic: rw [Set.image_univ]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑(Scheme.forgetToTop.map g) ⁻¹' (⇑(Scheme.forgetToTop.map f) '' Set.univ) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑(Scheme.forgetToTop.map g) ⁻¹' Set.range ⇑(Scheme.forgetToTop.map f) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier

tactic: rfl
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : Scheme
f : X ⟶ Z
g : Y ⟶ Z
H : IsOpenImmersion f
⊢ ⇑(Scheme.forgetToTop.map g) ⁻¹' Set.range ⇑(Scheme.forgetToTop.map f) = (g ⁻¹ᵁ Scheme.Hom.opensRange f).carrier
state_after: no goals