Theorem: AlgebraicGeometry.sourceAffineLocally_respectsIso
File: Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean

tactic: apply AffineTargetMorphismProperty.respectsIso_mk
state_before: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
⊢ (sourceAffineLocally P).toProperty.RespectsIso
state_after: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
⊢ ∀ {X Y Z : Scheme} (e : X ≅ Y) (f : Y ⟶ Z) [inst : IsAffine Z],
    sourceAffineLocally P f → sourceAffineLocally P (e.hom ≫ f)

case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
⊢ ∀ {X Y Z : Scheme} (e : Y ≅ Z) (f : X ⟶ Y) [h : IsAffine Y],
    sourceAffineLocally P f → sourceAffineLocally P (f ≫ e.hom)

tactic: introv H U
state_before: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
⊢ ∀ {X Y Z : Scheme} (e : X ≅ Y) (f : Y ⟶ Z) [inst : IsAffine Z],
    sourceAffineLocally P f → sourceAffineLocally P (e.hom ≫ f)
state_after: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ e.hom ≫ f).op)

tactic: rw [← h₁.cancel_right_isIso _ (Scheme.Γ.map (Scheme.restrictMapIso e.inv U.1).hom.op), ←
  Functor.map_comp, ← op_comp]
state_before: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ e.hom ≫ f).op)
state_after: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map ((Scheme.restrictMapIso e.inv ↑U).hom ≫ X.ofRestrict ⋯ ≫ e.hom ≫ f).op)

tactic: convert H ⟨_, U.prop.preimage_of_isIso e.inv⟩ using 3
state_before: case h₁
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map ((Scheme.restrictMapIso e.inv ↑U).hom ≫ X.ofRestrict ⋯ ≫ e.hom ≫ f).op)
state_after: case h.e'_5.h.e'_8.h.e'_5
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ (Scheme.restrictMapIso e.inv ↑U).hom ≫ X.ofRestrict ⋯ ≫ e.hom ≫ f = Y.ofRestrict ⋯ ≫ f

tactic: rw [IsOpenImmersion.isoOfRangeEq_hom_fac_assoc, Category.assoc,
  e.inv_hom_id_assoc]
state_before: case h.e'_5.h.e'_8.h.e'_5
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : X ≅ Y
f : Y ⟶ Z
inst✝ : IsAffine Z
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ (Scheme.restrictMapIso e.inv ↑U).hom ≫ X.ofRestrict ⋯ ≫ e.hom ≫ f = Y.ofRestrict ⋯ ≫ f
state_after: no goals

tactic: introv H U
state_before: case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
⊢ ∀ {X Y Z : Scheme} (e : Y ≅ Z) (f : X ⟶ Y) [h : IsAffine Y],
    sourceAffineLocally P f → sourceAffineLocally P (f ≫ e.hom)
state_after: case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : Y ≅ Z
f : X ⟶ Y
h : IsAffine Y
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f ≫ e.hom).op)

tactic: rw [← Category.assoc, op_comp, Functor.map_comp, h₁.cancel_left_isIso]
state_before: case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : Y ≅ Z
f : X ⟶ Y
h : IsAffine Y
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f ≫ e.hom).op)
state_after: case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : Y ≅ Z
f : X ⟶ Y
h : IsAffine Y
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op)

tactic: exact H U
state_before: case h₂
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
e : Y ≅ Z
f : X ⟶ Y
h : IsAffine Y
H : sourceAffineLocally P f
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op)
state_after: no goals