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

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₂
⊢ 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 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)
⊢ 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₂ (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₁ ⋯
⊢ 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: exact hx g₁' g₂' hg₁ hg₂ (by ext; exact h)
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: 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₁ ⋯
⊢ f₂ ≫ Y₂.hom = W'.hom
state_after: no goals

tactic: ext
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₂ ⋯
⊢ g₁' ≫ g₁ = g₂' ≫ g₂
state_after: case h
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₂ ⋯
⊢ (g₁' ≫ g₁).left = (g₂' ≫ g₂).left

tactic: exact h
state_before: case h
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₂ ⋯
⊢ (g₁' ≫ g₁).left = (g₂' ≫ g₂).left
state_after: no goals