Theorem: CategoryTheory.Sieve.functorPushforward_over_map
File: Mathlib/CategoryTheory/Sites/Over.lean

tactic: ext W g
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
⊢ functorPushforward (Over.map f) ((overEquiv Z).symm S) = (overEquiv ((Over.map f).obj Z)).symm S
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g ↔ ((overEquiv ((Over.map f).obj Z)).symm S).arrows g

tactic: constructor
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g ↔ ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
state_after: case h.mp
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g → ((overEquiv ((Over.map f).obj Z)).symm S).arrows g

case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ ((overEquiv ((Over.map f).obj Z)).symm S).arrows g → (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g

tactic: rintro ⟨T, a, b, ha, rfl⟩
state_before: case h.mp
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g → ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
state_after: case h.mp.intro.intro.intro.intro
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
T : Over X
a : T ⟶ Z
b : W ⟶ (Over.map f).obj T
ha : ((overEquiv Z).symm S).arrows a
⊢ ((overEquiv ((Over.map f).obj Z)).symm S).arrows (b ≫ (Over.map f).map a)

tactic: exact S.downward_closed ha _
state_before: case h.mp.intro.intro.intro.intro
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
T : Over X
a : T ⟶ Z
b : W ⟶ (Over.map f).obj T
ha : ((overEquiv Z).symm S).arrows a
⊢ ((overEquiv ((Over.map f).obj Z)).symm S).arrows (b ≫ (Over.map f).map a)
state_after: no goals

tactic: intro hg
state_before: case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
⊢ ((overEquiv ((Over.map f).obj Z)).symm S).arrows g → (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g
state_after: case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
hg : ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g

tactic: exact ⟨Over.mk (g.left ≫ Z.hom), Over.homMk g.left,
  Over.homMk (𝟙 _) (by simpa using Over.w g), hg, by aesop_cat⟩
state_before: case h.mpr
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
hg : ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
⊢ (functorPushforward (Over.map f) ((overEquiv Z).symm S)).arrows g
state_after: no goals

tactic: simpa using Over.w g
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
hg : ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
⊢ 𝟙 W.left ≫ ((Over.map f).obj (Over.mk (g.left ≫ Z.hom))).hom = W.hom
state_after: no goals

tactic: aesop_cat
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
Z : Over X
S : Sieve Z.left
W : Over Y
g : W ⟶ (Over.map f).obj Z
hg : ((overEquiv ((Over.map f).obj Z)).symm S).arrows g
⊢ g = Over.homMk (𝟙 W.left) ⋯ ≫ (Over.map f).map (Over.homMk g.left ⋯)
state_after: no goals