Theorem: Module.Finite.of_localizationSpan'
File: Mathlib/RingTheory/Localization/Finiteness.lean

Proof steps:
state_before: R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
ht : Ideal.span t = ⊤
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
⊢ Finite R M
state_after: R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
ht : ∃ s', ↑s' ⊆ t ∧ Ideal.span ↑s' = ⊤
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
⊢ Finite R M
tactic: rw [Ideal.span_eq_top_iff_finite] at ht
state_before: R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
ht : ∃ s', ↑s' ⊆ t ∧ Ideal.span ↑s' = ⊤
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
⊢ Finite R M
state_after: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
⊢ Finite R M
tactic: obtain ⟨t', hc, ht'⟩ := ht
state_before: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
⊢ Finite R M
state_after: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
this : ∀ (g : { x // x ∈ t' }), IsLocalization.Away (↑g) (Rₚ ⟨↑g, ⋯⟩)
⊢ Finite R M
tactic: have (g : t') : IsLocalization.Away g.val (Rₚ ⟨g.val, hc g.property⟩) :=
    h₁ ⟨g.val, hc g.property⟩
state_before: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
this : ∀ (g : { x // x ∈ t' }), IsLocalization.Away (↑g) (Rₚ ⟨↑g, ⋯⟩)
⊢ Finite R M
state_after: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
this✝ : ∀ (g : { x // x ∈ t' }), IsLocalization.Away (↑g) (Rₚ ⟨↑g, ⋯⟩)
this : ∀ (g : { x // x ∈ t' }), IsLocalizedModule (Submonoid.powers ↑g) ((fun g => f ⟨↑g, ⋯⟩) g)
⊢ Finite R M
tactic: have (g : t') : IsLocalizedModule (Submonoid.powers g.val)
    ((fun g ↦ f ⟨g.val, hc g.property⟩) g) := h₂ ⟨g.val, hc g.property⟩
state_before: case intro.intro
R : Type u
inst✝⁸ : CommRing R
S : Submonoid R
M : Type w
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
t : Set R
Mₚ : ↑t → Type u_1
inst✝⁵ : (g : ↑t) → AddCommMonoid (Mₚ g)
inst✝⁴ : (g : ↑t) → Module R (Mₚ g)
Rₚ : ↑t → Type u
inst✝³ : (g : ↑t) → CommRing (Rₚ g)
inst✝² : (g : ↑t) → Algebra R (Rₚ g)
h₁ : ∀ (g : ↑t), IsLocalization.Away (↑g) (Rₚ g)
inst✝¹ : (g : ↑t) → Module (Rₚ g) (Mₚ g)
inst✝ : ∀ (g : ↑t), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : ↑t) → M →ₗ[R] Mₚ g
h₂ : ∀ (g : ↑t), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : ↑t), Finite (Rₚ g) (Mₚ g)
t' : Finset R
hc : ↑t' ⊆ t
ht' : Ideal.span ↑t' = ⊤
this✝ : ∀ (g : { x // x ∈ t' }), IsLocalization.Away (↑g) (Rₚ ⟨↑g, ⋯⟩)
this : ∀ (g : { x // x ∈ t' }), IsLocalizedModule (Submonoid.powers ↑g) ((fun g => f ⟨↑g, ⋯⟩) g)
⊢ Finite R M
state_after: no goals
tactic: apply of_localizationSpan_finite' t' ht' (fun g ↦ f ⟨g.val, hc g.property⟩)
    (fun g ↦ H ⟨g.val, hc g.property⟩)