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

tactic: delta morphismRestrict
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (f ≫ g) ∣_ U = f ∣_ g ⁻¹ᵁ U ≫ g ∣_ U
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫
      (pullbackRestrictIsoRestrict g U).inv ≫ pullback.snd

tactic: rw [← pullbackRightPullbackFstIso_inv_snd_snd]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫
      (pullbackRestrictIsoRestrict g U).inv ≫ pullback.snd
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫
      (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv ≫ pullback.snd ≫ pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫
      (pullbackRestrictIsoRestrict g U).inv ≫ pullback.snd

tactic: simp_rw [← Category.assoc]
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫
      (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv ≫ pullback.snd ≫ pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫
      (pullbackRestrictIsoRestrict g U).inv ≫ pullback.snd
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
        pullback.snd) ≫
      pullback.snd =
    (((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv) ≫
      pullback.snd

tactic: congr 1
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
        pullback.snd) ≫
      pullback.snd =
    (((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv) ≫
      pullback.snd
state_after: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ ((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
      pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv

tactic: rw [← cancel_mono pullback.fst]
state_before: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ ((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
      pullback.snd =
    ((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv
state_after: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
        pullback.snd) ≫
      pullback.fst =
    (((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv) ≫
      pullback.fst

tactic: simp_rw [Category.assoc]
state_before: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (((pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫ (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv) ≫
        pullback.snd) ≫
      pullback.fst =
    (((pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd) ≫ (pullbackRestrictIsoRestrict g U).inv) ≫
      pullback.fst
state_after: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫
      (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv ≫ pullback.snd ≫ pullback.fst =
    (pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd ≫ (pullbackRestrictIsoRestrict g U).inv ≫ pullback.fst

tactic: rw [pullbackRestrictIsoRestrict_inv_fst, pullbackRightPullbackFstIso_inv_snd_fst, ←
  pullback.condition, pullbackRestrictIsoRestrict_inv_fst_assoc,
  pullbackRestrictIsoRestrict_inv_fst_assoc]
state_before: case e_a
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : Opens ↑↑Z.toPresheafedSpace
⊢ (pullbackRestrictIsoRestrict (f ≫ g) U).inv ≫
      (pullbackRightPullbackFstIso g (Scheme.ιOpens U) f).inv ≫ pullback.snd ≫ pullback.fst =
    (pullbackRestrictIsoRestrict f (g ⁻¹ᵁ U)).inv ≫ pullback.snd ≫ (pullbackRestrictIsoRestrict g U).inv ≫ pullback.fst
state_after: no goals