Theorem: AlgebraicGeometry.Scheme.isNilpotent_of_isNilpotent_cover
File: Mathlib/AlgebraicGeometry/Cover/Open.lean

Proof steps:
state_before: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
h : ∀ (i : 𝒰.J), IsNilpotent ((Hom.app (𝒰.map i) U) s)
⊢ IsNilpotent s
state_after: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
⊢ IsNilpotent s
tactic: choose fn hfn using h
state_before: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
⊢ IsNilpotent s
state_after: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
⊢ IsNilpotent s
tactic: have : Fintype 𝒰.J := Fintype.ofFinite 𝒰.J
state_before: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
⊢ IsNilpotent s
state_after: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
⊢ IsNilpotent s
tactic: let N : ℕ := Finset.sup Finset.univ fn
state_before: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
⊢ IsNilpotent s
state_after: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ IsNilpotent s
tactic: have hfnleN (i : 𝒰.J) : fn i ≤ N := Finset.le_sup (Finset.mem_univ i)
state_before: X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ IsNilpotent s
state_after: case h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ s ^ N = 0
tactic: use N
state_before: case h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ s ^ N = 0
state_after: case h.h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ ∀ (i : ?h.𝒰.J), (Hom.app (?h.𝒰.map i) U) (s ^ N) = 0

case h.𝒰
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ X.OpenCover
tactic: apply zero_of_zero_cover
state_before: case h.h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ ∀ (i : ?h.𝒰.J), (Hom.app (?h.𝒰.map i) U) (s ^ N) = 0

case h.𝒰
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ X.OpenCover
state_after: case h.h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
i : ?h.𝒰.J
⊢ (Hom.app (?h.𝒰.map i) U) s ^ N = 0

case h.𝒰
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ X.OpenCover
tactic: on_goal 1 => intro i; simp only [map_pow]
state_before: case h.h
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
i : ?h.𝒰.J
⊢ (Hom.app (?h.𝒰.map i) U) s ^ N = 0

case h.𝒰
X✝ Y Z : Scheme
𝒰✝ : X✝.OpenCover
f : X✝ ⟶ Z
g : Y ⟶ Z
inst✝¹ : ∀ (x : 𝒰✝.J), HasPullback (𝒰✝.map x ≫ f) g
X : Scheme
U : X.Opens
s : ↑Γ(X, U)
𝒰 : X.OpenCover
inst✝ : Finite 𝒰.J
fn : 𝒰.J → ℕ
hfn : ∀ (i : 𝒰.J), (Hom.app (𝒰.map i) U) s ^ fn i = 0
this : Fintype 𝒰.J
N : ℕ := Finset.univ.sup fn
hfnleN : ∀ (i : 𝒰.J), fn i ≤ N
⊢ X.OpenCover
state_after: no goals
tactic: exact pow_eq_zero_of_le (hfnleN i) (hfn i)