Theorem: AlgebraicGeometry.IsAffineOpen.map_fromSpec
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

Proof steps:
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec = hV.fromSpec
state_after: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this : IsAffine (X.restrictFunctor.obj U).left
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec = hV.fromSpec
tactic: have : IsAffine (X.restrictFunctor.obj U).left := hU
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this : IsAffine (X.restrictFunctor.obj U).left
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec = hV.fromSpec
state_after: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec = hV.fromSpec
tactic: haveI : IsAffine _ := hV
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec = hV.fromSpec
state_after: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec =
    Spec.map (X.presheaf.map ((homOfLE ⋯).op ≫ (eqToHom ⋯).op)) ≫
      (X.restrictFunctor.obj (unop (op U))).left.isoSpec.inv ≫ (unop (op U)).ι
tactic: conv_rhs =>
    rw [fromSpec, ← X.restrictFunctor_map_ofRestrict f.unop, ← Scheme.isoSpec_inv_naturality_assoc,
      ← Spec.map_comp_assoc, Scheme.restrictFunctor_map_app, ← Functor.map_comp]
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map f) ≫ hU.fromSpec =
    Spec.map (X.presheaf.map ((homOfLE ⋯).op ≫ (eqToHom ⋯).op)) ≫
      (X.restrictFunctor.obj (unop (op U))).left.isoSpec.inv ≫ (unop (op U)).ι
state_after: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map ((eqToHom ⋯).op ≫ f)) ≫ (↑U).isoSpec.inv ≫ U.ι =
    Spec.map (X.presheaf.map ((homOfLE ⋯).op ≫ (eqToHom ⋯).op)) ≫
      (X.restrictFunctor.obj (unop (op U))).left.isoSpec.inv ≫ (unop (op U)).ι
tactic: rw [fromSpec, ← Spec.map_comp_assoc, ← Functor.map_comp]
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
f : op U ⟶ op V
this✝ : IsAffine (X.restrictFunctor.obj U).left
this : IsAffine ↑V
⊢ Spec.map (X.presheaf.map ((eqToHom ⋯).op ≫ f)) ≫ (↑U).isoSpec.inv ≫ U.ι =
    Spec.map (X.presheaf.map ((homOfLE ⋯).op ≫ (eqToHom ⋯).op)) ≫
      (X.restrictFunctor.obj (unop (op U))).left.isoSpec.inv ≫ (unop (op U)).ι
state_after: no goals
tactic: rfl