Theorem: AlgebraicGeometry.morphismRestrict_app
File: Mathlib/AlgebraicGeometry/Restrict.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Hom.app (f ∣_ U ≫ U.ι) (U.ι ''ᵁ V) = Hom.app ((f ⁻¹ᵁ U).ι ≫ f) (U.ι ''ᵁ V) ≫ (↑(f ⁻¹ᵁ U)).presheaf.map (eqToHom ⋯).op
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
tactic: have := Scheme.congr_app (morphismRestrict_ι f U) (U.ι ''ᵁ V)
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Hom.app (f ∣_ U ≫ U.ι) (U.ι ''ᵁ V) = Hom.app ((f ⁻¹ᵁ U).ι ≫ f) (U.ι ''ᵁ V) ≫ (↑(f ⁻¹ᵁ U)).presheaf.map (eqToHom ⋯).op
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
tactic: simp only [Scheme.preimage_comp, Opens.toScheme_presheaf_obj, Hom.app_eq_appLE, comp_appLE,
    Opens.ι_appLE, eqToHom_op, Opens.toScheme_presheaf_map, eqToHom_unop] at this
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
tactic: have e : U.ι ⁻¹ᵁ (U.ι ''ᵁ V) = V :=
    Opens.ext (Set.preimage_image_eq _ Subtype.coe_injective)
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
tactic: have e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V := by rw [e]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ Hom.app (f ∣_ U) V = Hom.app f (U.ι ''ᵁ V) ≫ X.presheaf.map (eqToHom ⋯).op
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ Hom.appLE (f ∣_ U) V ((f ∣_ U) ⁻¹ᵁ V) ⋯ = Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
tactic: simp only [Opens.toScheme_presheaf_obj, Hom.app_eq_appLE, eqToHom_op, Hom.appLE_map]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ Hom.appLE (f ∣_ U) V ((f ∣_ U) ⁻¹ᵁ V) ⋯ = Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ ((↑U).presheaf.map (eqToHom e).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯) ≫
      (↑(f ⁻¹ᵁ U)).presheaf.map (eqToHom e').op =
    Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
tactic: rw [← (f ∣_ U).appLE_map' _ e', ← (f ∣_ U).map_appLE' _ e]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ ((↑U).presheaf.map (eqToHom e).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯) ≫
      (↑(f ⁻¹ᵁ U)).presheaf.map (eqToHom e').op =
    Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ (Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯) ≫
      X.presheaf.map (homOfLE ⋯).op =
    Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
tactic: simp only [Opens.toScheme_presheaf_obj, eqToHom_eq_homOfLE, Opens.toScheme_presheaf_map,
    Quiver.Hom.unop_op, Hom.opensFunctor_map_homOfLE]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
V : (↑U).Opens
this :
  Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯ =
    (Hom.appLE f (U.ι ''ᵁ V) (f ⁻¹ᵁ U.ι ''ᵁ V) ⋯ ≫ X.presheaf.map (homOfLE ⋯).op) ≫
      X.presheaf.map ((Hom.opensFunctor (f ⁻¹ᵁ U).ι).map (eqToHom ⋯)).op
e : U.ι ⁻¹ᵁ U.ι ''ᵁ V = V
e' : (f ∣_ U) ⁻¹ᵁ V = (f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V
⊢ (Y.presheaf.map (homOfLE ⋯).op ≫ Hom.appLE (f ∣_ U) (U.ι ⁻¹ᵁ U.ι ''ᵁ V) ((f ∣_ U) ⁻¹ᵁ U.ι ⁻¹ᵁ U.ι ''ᵁ V) ⋯) ≫
      X.presheaf.map (homOfLE ⋯).op =
    Hom.appLE f (U.ι ''ᵁ V) ((f ⁻¹ᵁ U).ι ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ⋯
state_after: no goals
tactic: rw [this, Hom.appLE_map, Hom.appLE_map, Hom.appLE_map]