Theorem: AlgebraicGeometry.Spec.basicOpen_hom_ext
File: Mathlib/AlgebraicGeometry/Spec.lean

tactic: rw [w]
state_before: X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
r : ↑R
U : TopologicalSpace.Opens (PrimeSpectrum ↑R) := PrimeSpectrum.basicOpen r
⊢ (TopologicalSpace.Opens.map α.base).op.obj { unop := U } = (TopologicalSpace.Opens.map β.base).op.obj { unop := U }
state_after: no goals

tactic: ext : 1
state_before: X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ α = β
state_after: case w
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ α.base = β.base

case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf = β.c

tactic: exact w
state_before: case w
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ α.base = β.base
state_after: no goals

tactic: apply
  ((TopCat.Sheaf.pushforward _ β.base).obj X.sheaf).hom_ext _ PrimeSpectrum.isBasis_basic_opens
state_before: case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf = β.c
state_after: case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ ∀ (i : ↑R),
    (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen i } =
      β.c.app { unop := PrimeSpectrum.basicOpen i }

tactic: intro r
state_before: case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
⊢ ∀ (i : ↑R),
    (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen i } =
      β.c.app { unop := PrimeSpectrum.basicOpen i }
state_after: case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
r : ↑R
⊢ (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen r } =
    β.c.app { unop := PrimeSpectrum.basicOpen r }

tactic: apply (StructureSheaf.to_basicOpen_epi R r).1
state_before: case h
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
r : ↑R
⊢ (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen r } =
    β.c.app { unop := PrimeSpectrum.basicOpen r }
state_after: case h.a
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
r : ↑R
⊢ toOpen (↑R) (PrimeSpectrum.basicOpen r) ≫
      (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen r } =
    toOpen (↑R) (PrimeSpectrum.basicOpen r) ≫ β.c.app { unop := PrimeSpectrum.basicOpen r }

tactic: simpa using h r
state_before: case h.a
X : RingedSpace
R : CommRingCat
α β : X ⟶ sheafedSpaceObj R
w : α.base = β.base
h :
  ∀ (r : ↑R),
    let U := PrimeSpectrum.basicOpen r;
    (toOpen (↑R) U ≫ α.c.app { unop := U }) ≫ X.presheaf.map (eqToHom ⋯) = toOpen (↑R) U ≫ β.c.app { unop := U }
r : ↑R
⊢ toOpen (↑R) (PrimeSpectrum.basicOpen r) ≫
      (α.c ≫ whiskerRight (eqToHom ⋯) X.presheaf).app { unop := PrimeSpectrum.basicOpen r } =
    toOpen (↑R) (PrimeSpectrum.basicOpen r) ≫ β.c.app { unop := PrimeSpectrum.basicOpen r }
state_after: no goals