Theorem: AlgebraicGeometry.HasAffineProperty.isLocalAtSource
File: Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

Proof steps:
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
⊢ P f ↔ ∀ (i : 𝒰.J), P (𝒰.map i ≫ f)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
⊢ (∀ (i : ↑Y.affineOpens), P (f ∣_ ↑i)) ↔ ∀ (i : 𝒰.J) (i_1 : ↑Y.affineOpens), P ((𝒰.map i ≫ f) ∣_ ↑i_1)
tactic: simp_rw [IsLocalAtTarget.iff_of_iSup_eq_top _ (iSup_affineOpens_eq_top Y)]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
⊢ (∀ (i : ↑Y.affineOpens), P (f ∣_ ↑i)) ↔ ∀ (i : 𝒰.J) (i_1 : ↑Y.affineOpens), P ((𝒰.map i ≫ f) ∣_ ↑i_1)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
⊢ (∀ (i : ↑Y.affineOpens), P (f ∣_ ↑i)) ↔ ∀ (b : ↑Y.affineOpens) (a : 𝒰.J), P ((𝒰.map a ≫ f) ∣_ ↑b)
tactic: rw [forall_comm]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
⊢ (∀ (i : ↑Y.affineOpens), P (f ∣_ ↑i)) ↔ ∀ (b : ↑Y.affineOpens) (a : 𝒰.J), P ((𝒰.map a ≫ f) ∣_ ↑b)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
U : ↑Y.affineOpens
⊢ P (f ∣_ ↑U) ↔ ∀ (a : 𝒰.J), P ((𝒰.map a ≫ f) ∣_ ↑U)
tactic: refine forall_congr' fun U ↦ ?_
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
U : ↑Y.affineOpens
⊢ P (f ∣_ ↑U) ↔ ∀ (a : 𝒰.J), P ((𝒰.map a ≫ f) ∣_ ↑U)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
U : ↑Y.affineOpens
⊢ Q (f ∣_ ↑U) ↔ ∀ (a : 𝒰.J), Q (𝒰.map a ∣_ f ⁻¹ᵁ ↑U ≫ f ∣_ ↑U)
tactic: simp_rw [HasAffineProperty.iff_of_isAffine, morphismRestrict_comp]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
H : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsAffine Y] (𝒰 : X.OpenCover), Q f ↔ ∀ (i : 𝒰.J), Q (𝒰.map i ≫ f)
X Y : Scheme
f : X ⟶ Y
𝒰 : X.OpenCover
U : ↑Y.affineOpens
⊢ Q (f ∣_ ↑U) ↔ ∀ (a : 𝒰.J), Q (𝒰.map a ∣_ f ⁻¹ᵁ ↑U ≫ f ∣_ ↑U)
state_after: no goals
tactic: exact @H _ _ (f ∣_ U.1) U.2 (𝒰.restrict (f ⁻¹ᵁ U.1))