Theorem: CategoryTheory.GrothendieckTopology.over_forget_compatiblePreserving
File: Mathlib/CategoryTheory/Sites/Over.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
state_after: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
tactic: let W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
state_after: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
g₁' : W' ⟶ Y₁ := Over.homMk f₁ ⋯
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
tactic: let g₁' : W' ⟶ Y₁ := Over.homMk f₁
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
g₁' : W' ⟶ Y₁ := Over.homMk f₁ ⋯
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
state_after: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
g₁' : W' ⟶ Y₁ := Over.homMk f₁ ⋯
g₂' : W' ⟶ Y₂ := Over.homMk f₂ ⋯
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
tactic: let g₂' : W' ⟶ Y₂ := Over.homMk f₂ (by simpa using h.symm =≫ Z.hom)
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
X : C
F : SheafOfTypes J
Z : Over X
T : Presieve Z
x : Presieve.FamilyOfElements ((Over.forget X).op ⋙ F.val) T
hx : x.Compatible
Y₁ Y₂ : Over X
W : C
f₁ : W ⟶ (Over.forget X).obj Y₁
f₂ : W ⟶ (Over.forget X).obj Y₂
g₁ : Y₁ ⟶ Z
g₂ : Y₂ ⟶ Z
hg₁ : T g₁
hg₂ : T g₂
h : f₁ ≫ (Over.forget X).map g₁ = f₂ ≫ (Over.forget X).map g₂
W' : Over X := Over.mk (f₁ ≫ Y₁.hom)
g₁' : W' ⟶ Y₁ := Over.homMk f₁ ⋯
g₂' : W' ⟶ Y₂ := Over.homMk f₂ ⋯
⊢ F.val.map f₁.op (x g₁ hg₁) = F.val.map f₂.op (x g₂ hg₂)
state_after: no goals
tactic: exact hx g₁' g₂' hg₁ hg₂ (by ext; exact h)