Theorem: Module.Finite.of_localizationSpan_finite'
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 : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
⊢ Finite R M
state_after: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
⊢ ⊤.FG
tactic: constructor
state_before: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
⊢ ⊤.FG
state_after: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
⊢ ⊤.FG
tactic: choose s₁ s₂ using (fun g ↦ (H g).1)
state_before: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
⊢ ⊤.FG
state_after: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ ⊤.FG
tactic: let sf := fun x : t ↦
    IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers x.val) (f x) (s₁ x)
state_before: case out
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ ⊤.FG
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ Submodule.span R ↑(t.attach.biUnion sf) = ⊤
tactic: use t.attach.biUnion sf
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ Submodule.span R ↑(t.attach.biUnion sf) = ⊤
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ ⊤ ≤ ⨆ x, Submodule.span R ↑(sf x)
tactic: rw [Submodule.span_attach_biUnion, eq_top_iff]
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
⊢ ⊤ ≤ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
⊢ x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: rintro x -
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
⊢ x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: refine Submodule.mem_of_span_eq_top_of_smul_pow_mem _ (t : Set R) ht _ (fun r ↦ ?_)
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: set S : Submonoid R := Submonoid.powers r.val
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : ⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • IsLocalizedModule.mk' (f r) x 1 ∈ Submodule.span R ↑(s₁ r)
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: obtain ⟨⟨_, n₁, rfl⟩, hn₁⟩ := multiple_mem_span_of_mem_localization_span S (Rₚ r)
    (s₁ r : Set (Mₚ r)) (IsLocalizedModule.mk' (f r) x (1 : S)) (by rw [s₂ r]; trivial)
state_before: case h.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : ⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • IsLocalizedModule.mk' (f r) x 1 ∈ Submodule.span R ↑(s₁ r)
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: rw [Submonoid.smul_def, ← IsLocalizedModule.mk'_smul, IsLocalizedModule.mk'_one] at hn₁
state_before: case h.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h.intro.mk.intro.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: obtain ⟨⟨_, n₂, rfl⟩, hn₂⟩ := IsLocalizedModule.smul_mem_finsetIntegerMultiple_span
    S (f r) _ (s₁ r) hn₁
state_before: case h.intro.mk.intro.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h.intro.mk.intro.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: rw [Submonoid.smul_def] at hn₂
state_before: case h.intro.mk.intro.intro.mk.intro
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ∃ n, ↑r ^ n • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ (n₂ + n₁) • x ∈ ⨆ x, Submodule.span R ↑(sf x)
tactic: use n₂ + n₁
state_before: case h
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ (n₂ + n₁) • x ∈ ⨆ x, Submodule.span R ↑(sf x)
state_after: case h.a
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ (n₂ + n₁) • x ∈ Submodule.span R ↑(sf r)
tactic: apply le_iSup (fun x : t ↦ Submodule.span R (sf x : Set M)) r
state_before: case h.a
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ (n₂ + n₁) • x ∈ Submodule.span R ↑(sf r)
state_after: case h.a
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ n₂ • ↑r ^ n₁ • x ∈ Submodule.span R ↑(sf r)
tactic: rw [pow_add, mul_smul]
state_before: case h.a
R : Type u
inst✝¹⁰ : CommRing R
S✝ : Submonoid R
M : Type w
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
t : Finset R
ht : Ideal.span ↑t = ⊤
Mₚ : { x // x ∈ t } → Type u_1
inst✝⁷ : (g : { x // x ∈ t }) → AddCommMonoid (Mₚ g)
inst✝⁶ : (g : { x // x ∈ t }) → Module R (Mₚ g)
Rₚ : { x // x ∈ t } → Type u
inst✝⁵ : (g : { x // x ∈ t }) → CommRing (Rₚ g)
inst✝⁴ : (g : { x // x ∈ t }) → Algebra R (Rₚ g)
inst✝³ : ∀ (g : { x // x ∈ t }), IsLocalization.Away (↑g) (Rₚ g)
inst✝² : (g : { x // x ∈ t }) → Module (Rₚ g) (Mₚ g)
inst✝¹ : ∀ (g : { x // x ∈ t }), IsScalarTower R (Rₚ g) (Mₚ g)
f : (g : { x // x ∈ t }) → M →ₗ[R] Mₚ g
inst✝ : ∀ (g : { x // x ∈ t }), IsLocalizedModule (Submonoid.powers ↑g) (f g)
H : ∀ (g : { x // x ∈ t }), Finite (Rₚ g) (Mₚ g)
s₁ : (g : { x // x ∈ t }) → Finset (Mₚ g)
s₂ : ∀ (g : { x // x ∈ t }), Submodule.span (Rₚ g) ↑(s₁ g) = ⊤
sf : { x // x ∈ t } → Finset M := fun x => IsLocalizedModule.finsetIntegerMultiple (Submonoid.powers ↑x) (f x) (s₁ x)
x : M
r : ↑↑t
S : Submonoid R := Submonoid.powers ↑r
n₁ : ℕ
hn₁ : (f r) (↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x) ∈ Submodule.span R ↑(s₁ r)
n₂ : ℕ
hn₂ :
  ↑⟨(fun x => ↑r ^ x) n₂, ⋯⟩ • ↑⟨(fun x => ↑r ^ x) n₁, ⋯⟩ • x ∈
    Submodule.span R ↑(IsLocalizedModule.finsetIntegerMultiple S (f r) (s₁ r))
⊢ ↑r ^ n₂ • ↑r ^ n₁ • x ∈ Submodule.span R ↑(sf r)
state_after: no goals
tactic: exact hn₂