Skip to content

Commit e9a89ab

Browse files
committed
chore: generalize more materials about linear independence over semirings (#20497)
Also add `Finsupp.linearCombination_one_tmul` and `linearIndependent_one_tmul` that connects linear independence to flatness.
1 parent 82b0bf2 commit e9a89ab

File tree

9 files changed

+121
-145
lines changed

9 files changed

+121
-145
lines changed

Mathlib/LinearAlgebra/Basis/Basic.lean

Lines changed: 59 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -161,61 +161,7 @@ theorem basis_singleton_iff {R M : Type*} [Ring R] [Nontrivial R] [AddCommGroup
161161

162162
end Singleton
163163

164-
end Basis
165-
166-
end Module
167-
168-
section Module
169-
170-
open LinearMap
171-
172-
variable {v : ι → M}
173-
variable [Ring R] [CommRing R₂] [AddCommGroup M]
174-
variable [Module R M] [Module R₂ M]
175-
variable {x y : M}
176-
variable (b : Basis ι R M)
177-
178-
theorem Basis.eq_bot_of_rank_eq_zero [NoZeroDivisors R] (b : Basis ι R M) (N : Submodule R M)
179-
(rank_eq : ∀ {m : ℕ} (v : Fin m → N), LinearIndependent R ((↑) ∘ v : Fin m → M) → m = 0) :
180-
N = ⊥ := by
181-
rw [Submodule.eq_bot_iff]
182-
intro x hx
183-
contrapose! rank_eq with x_ne
184-
refine ⟨1, fun _ => ⟨x, hx⟩, ?_, one_ne_zero⟩
185-
rw [Fintype.linearIndependent_iff]
186-
rintro g sum_eq i
187-
cases' i with _ hi
188-
simp only [Function.const_apply, Fin.default_eq_zero, Submodule.coe_mk, Finset.univ_unique,
189-
Function.comp_const, Finset.sum_singleton] at sum_eq
190-
convert (b.smul_eq_zero.mp sum_eq).resolve_right x_ne
191-
192-
namespace Basis
193-
194-
/-- Any basis is a maximal linear independent set.
195-
-/
196-
theorem maximal [Nontrivial R] (b : Basis ι R M) : b.linearIndependent.Maximal := fun w hi h => by
197-
-- If `w` is strictly bigger than `range b`,
198-
apply le_antisymm h
199-
-- then choose some `x ∈ w \ range b`,
200-
intro x p
201-
by_contra q
202-
-- and write it in terms of the basis.
203-
have e := b.linearCombination_repr x
204-
-- This then expresses `x` as a linear combination
205-
-- of elements of `w` which are in the range of `b`,
206-
let u : ι ↪ w :=
207-
fun i => ⟨b i, h ⟨i, rfl⟩⟩, fun i i' r =>
208-
b.injective (by simpa only [Subtype.mk_eq_mk] using r)⟩
209-
simp_rw [Finsupp.linearCombination_apply] at e
210-
change ((b.repr x).sum fun (i : ι) (a : R) ↦ a • (u i : M)) = ((⟨x, p⟩ : w) : M) at e
211-
rw [← Finsupp.sum_embDomain (f := u) (g := fun x r ↦ r • (x : M)),
212-
← Finsupp.linearCombination_apply] at e
213-
-- Now we can contradict the linear independence of `hi`
214-
refine hi.linearCombination_ne_of_not_mem_support _ ?_ e
215-
simp only [Finset.mem_map, Finsupp.support_embDomain]
216-
rintro ⟨j, -, W⟩
217-
simp only [u, Embedding.coeFn_mk, Subtype.mk_eq_mk] at W
218-
apply q ⟨j, W⟩
164+
variable {v : ι → M} {x y : M}
219165

220166
section Mk
221167

@@ -333,6 +279,8 @@ theorem unitsSMul_apply {v : Basis ι R M} {w : ι → Rˣ} (i : ι) : unitsSMul
333279
mk_apply (LinearIndependent.units_smul v.linearIndependent w)
334280
(units_smul_span_eq_top v.span_eq).ge i
335281

282+
variable [CommSemiring R₂] [Module R₂ M]
283+
336284
@[simp]
337285
theorem coord_unitsSMul (e : Basis ι R₂ M) (w : ι → R₂ˣ) (i : ι) :
338286
(unitsSMul e w).coord i = (w i)⁻¹ • e.coord i := by
@@ -363,6 +311,62 @@ theorem repr_isUnitSMul {v : Basis ι R₂ M} {w : ι → R₂} (hw : ∀ i, IsU
363311
(v.isUnitSMul hw).repr x i = (hw i).unit⁻¹ • v.repr x i :=
364312
repr_unitsSMul _ _ _ _
365313

314+
end Basis
315+
316+
end Module
317+
318+
section Module
319+
320+
open LinearMap
321+
322+
variable {v : ι → M}
323+
variable [Ring R] [CommRing R₂] [AddCommGroup M]
324+
variable [Module R M] [Module R₂ M]
325+
variable {x y : M}
326+
variable (b : Basis ι R M)
327+
328+
theorem Basis.eq_bot_of_rank_eq_zero [NoZeroDivisors R] (b : Basis ι R M) (N : Submodule R M)
329+
(rank_eq : ∀ {m : ℕ} (v : Fin m → N), LinearIndependent R ((↑) ∘ v : Fin m → M) → m = 0) :
330+
N = ⊥ := by
331+
rw [Submodule.eq_bot_iff]
332+
intro x hx
333+
contrapose! rank_eq with x_ne
334+
refine ⟨1, fun _ => ⟨x, hx⟩, ?_, one_ne_zero⟩
335+
rw [Fintype.linearIndependent_iff]
336+
rintro g sum_eq i
337+
cases' i with _ hi
338+
simp only [Function.const_apply, Fin.default_eq_zero, Submodule.coe_mk, Finset.univ_unique,
339+
Function.comp_const, Finset.sum_singleton] at sum_eq
340+
convert (b.smul_eq_zero.mp sum_eq).resolve_right x_ne
341+
342+
namespace Basis
343+
344+
/-- Any basis is a maximal linear independent set.
345+
-/
346+
theorem maximal [Nontrivial R] (b : Basis ι R M) : b.linearIndependent.Maximal := fun w hi h => by
347+
-- If `w` is strictly bigger than `range b`,
348+
apply le_antisymm h
349+
-- then choose some `x ∈ w \ range b`,
350+
intro x p
351+
by_contra q
352+
-- and write it in terms of the basis.
353+
have e := b.linearCombination_repr x
354+
-- This then expresses `x` as a linear combination
355+
-- of elements of `w` which are in the range of `b`,
356+
let u : ι ↪ w :=
357+
fun i => ⟨b i, h ⟨i, rfl⟩⟩, fun i i' r =>
358+
b.injective (by simpa only [Subtype.mk_eq_mk] using r)⟩
359+
simp_rw [Finsupp.linearCombination_apply] at e
360+
change ((b.repr x).sum fun (i : ι) (a : R) ↦ a • (u i : M)) = ((⟨x, p⟩ : w) : M) at e
361+
rw [← Finsupp.sum_embDomain (f := u) (g := fun x r ↦ r • (x : M)),
362+
← Finsupp.linearCombination_apply] at e
363+
-- Now we can contradict the linear independence of `hi`
364+
refine hi.linearCombination_ne_of_not_mem_support _ ?_ e
365+
simp only [Finset.mem_map, Finsupp.support_embDomain]
366+
rintro ⟨j, -, W⟩
367+
simp only [u, Embedding.coeFn_mk, Subtype.mk_eq_mk] at W
368+
apply q ⟨j, W⟩
369+
366370
section Fin
367371

368372
/-- Let `b` be a basis for a submodule `N` of `M`. If `y : M` is linear independent of `N`

Mathlib/LinearAlgebra/DirectSum/Finsupp.lean

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,14 @@ end TensorProduct
239239

240240
variable (R S M N ι κ : Type*)
241241
[CommSemiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R N]
242-
[Semiring S] [Algebra R S] [Module S M] [IsScalarTower R S M]
242+
[Semiring S] [Algebra R S]
243+
244+
theorem Finsupp.linearCombination_one_tmul [DecidableEq ι] {v : ι → M} :
245+
(linearCombination S ((1 : S) ⊗ₜ[R] v ·)).restrictScalars R =
246+
(linearCombination R v).lTensor S ∘ₗ (finsuppScalarRight R S ι).symm := by
247+
ext; simp [smul_tmul']
248+
249+
variable [Module S M] [IsScalarTower R S M]
243250

244251
open scoped Classical in
245252
/-- The tensor product of `ι →₀ M` and `κ →₀ N` is linearly equivalent to `(ι × κ) →₀ (M ⊗ N)`. -/
@@ -362,3 +369,5 @@ theorem finsuppTensorFinsuppRid_self :
362369
finsuppTensorFinsuppRid R R ι κ = finsuppTensorFinsupp' R ι κ := by
363370
rw [finsuppTensorFinsupp', finsuppTensorFinsuppLid, finsuppTensorFinsuppRid,
364371
TensorProduct.lid_eq_rid]
372+
373+
end

Mathlib/LinearAlgebra/Finsupp/LinearCombination.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ theorem linearCombination_linearCombination {α β : Type*} (A : α → M) (B :
252252

253253
@[deprecated (since := "2024-08-29")] alias total_total := linearCombination_linearCombination
254254

255+
theorem linearCombination_smul [Module R S] [Module S M] [IsScalarTower R S M] {w : α' → S} :
256+
linearCombination R (fun i : α × α' ↦ w i.2 • v i.1) = (linearCombination S v).restrictScalars R
257+
∘ₗ mapRange.linearMap (linearCombination R w) ∘ₗ (finsuppProdLEquiv R).toLinearMap := by
258+
ext; simp [finsuppProdLEquiv, finsuppProdEquiv, Finsupp.curry]
259+
255260
@[simp]
256261
theorem linearCombination_fin_zero (f : Fin 0 → M) : linearCombination R f = 0 := by
257262
ext i

Mathlib/RingTheory/Adjoin/PowerBasis.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ noncomputable def adjoin.powerBasisAux {x : S} (hx : IsIntegral K x) :
3333
IsIntegral K (⟨x, subset_adjoin (Set.mem_singleton x)⟩ : adjoin K ({x} : Set S)) := by
3434
apply (isIntegral_algebraMap_iff hST).mp
3535
convert hx
36-
apply
37-
@Basis.mk (Fin (minpoly K x).natDegree) _ (adjoin K {x}) fun i =>
38-
⟨x, subset_adjoin (Set.mem_singleton x)⟩ ^ (i : ℕ)
36+
apply Basis.mk (v := fun i : Fin _ ↦ ⟨x, subset_adjoin (Set.mem_singleton x)⟩ ^ (i : ℕ))
3937
· have : LinearIndependent K _ := linearIndependent_pow
4038
(⟨x, self_mem_adjoin_singleton _ _⟩ : adjoin K {x})
4139
rwa [← minpoly.algebraMap_eq hST] at this

Mathlib/RingTheory/AdjoinRoot.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def powerBasisAux (hf : f ≠ 0) : Basis (Fin f.natDegree) K (AdjoinRoot f) := b
506506
rw [natDegree_mul hf, natDegree_C, add_zero]
507507
· rwa [Ne, C_eq_zero, inv_eq_zero, leadingCoeff_eq_zero]
508508
have minpoly_eq : minpoly K (root f) = f' := minpoly_root hf
509-
apply @Basis.mk _ _ _ fun i : Fin f.natDegree => root f ^ i.val
509+
apply Basis.mk (v := fun i : Fin f.natDegree root f ^ i.val)
510510
· rw [← deg_f', ← minpoly_eq]
511511
exact linearIndependent_pow (root f)
512512
· rintro y -

Mathlib/RingTheory/AlgebraTower.lean

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Kenny Lau
55
-/
66
import Mathlib.Algebra.Algebra.Tower
7-
import Mathlib.Algebra.Module.BigOperators
87
import Mathlib.LinearAlgebra.Basis.Basic
98

109
/-!
@@ -27,9 +26,7 @@ base rings to be a field, so we also generalize the lemma to rings in this file.
2726

2827
open Pointwise
2928

30-
universe u v w u₁
31-
32-
variable (R : Type u) (S : Type v) (A : Type w) (B : Type u₁)
29+
variable (R S A B : Type*)
3330

3431
namespace IsScalarTower
3532

@@ -39,7 +36,6 @@ variable [CommSemiring R] [CommSemiring S] [Semiring A] [Semiring B]
3936
variable [Algebra R S] [Algebra S A] [Algebra S B] [Algebra R A] [Algebra R B]
4037
variable [IsScalarTower R S A] [IsScalarTower R S B]
4138

42-
4339
/-- Suppose that `R → S → A` is a tower of algebras.
4440
If an element `r : R` is invertible in `S`, then it is invertible in `A`. -/
4541
def Invertible.algebraTower (r : R) [Invertible (algebraMap R S r)] :
@@ -91,33 +87,19 @@ open Finsupp
9187

9288
open scoped Classical
9389

94-
universe v₁ w₁
95-
9690
variable {R S A}
97-
98-
section
99-
variable [Ring R] [Ring S] [AddCommGroup A]
91+
variable [Semiring R] [Semiring S] [AddCommMonoid A]
10092
variable [Module R S] [Module S A] [Module R A] [IsScalarTower R S A]
10193

102-
theorem linearIndependent_smul {ι : Type v₁} {b : ι → S} {ι' : Type w₁} {c : ι' → A}
94+
theorem linearIndependent_smul {ι : Type*} {b : ι → S} {ι' : Type*} {c : ι' → A}
10395
(hb : LinearIndependent R b) (hc : LinearIndependent S c) :
104-
LinearIndependent R fun p : ι × ι' => b p.1 • c p.2 := by
105-
rw [linearIndependent_iff'] at hb hc; rw [linearIndependent_iff'']; rintro s g hg hsg ⟨i, k⟩
106-
by_cases hik : (i, k) ∈ s
107-
· have h1 : ∑ i ∈ s.image Prod.fst ×ˢ s.image Prod.snd, g i • b i.1 • c i.2 = 0 := by
108-
rw [← hsg]
109-
exact
110-
(Finset.sum_subset Finset.subset_product fun p _ hp =>
111-
show g p • b p.1 • c p.2 = 0 by rw [hg p hp, zero_smul]).symm
112-
rw [Finset.sum_product_right] at h1
113-
simp_rw [← smul_assoc, ← Finset.sum_smul] at h1
114-
exact hb _ _ (hc _ _ h1 k (Finset.mem_image_of_mem _ hik)) i (Finset.mem_image_of_mem _ hik)
115-
exact hg _ hik
116-
end
96+
LinearIndependent R fun p : ι × ι' ↦ b p.1 • c p.2 := by
97+
rw [← linearIndependent_equiv' (.prodComm ..) (g := fun p : ι' × ι ↦ b p.2 • c p.1) rfl,
98+
LinearIndependent, linearCombination_smul]
99+
simpa using Function.Injective.comp hc
100+
((mapRange_injective _ (map_zero _) hb).comp <| Equiv.injective _)
117101

118102
variable (R)
119-
variable [Semiring R] [Semiring S] [AddCommMonoid A]
120-
variable [Module R S] [Module S A] [Module R A] [IsScalarTower R S A]
121103

122104
-- LinearIndependent is enough if S is a ring rather than semiring.
123105
theorem Basis.isScalarTower_of_nonempty {ι} [Nonempty ι] (b : Basis ι S A) : IsScalarTower R S S :=
@@ -197,7 +179,6 @@ variable {A} {C D : Type*} [CommSemiring A] [CommSemiring C] [CommSemiring D] [A
197179

198180
variable [CommSemiring B] [Algebra A B] [Algebra B C] [IsScalarTower A B C] (f : C →ₐ[A] D)
199181

200-
201182
/-- Restrict the domain of an `AlgHom`. -/
202183
def AlgHom.restrictDomain : B →ₐ[A] D :=
203184
f.comp (IsScalarTower.toAlgHom A B C)

Mathlib/RingTheory/Flat/Basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,12 @@ theorem lTensor_preserves_injective_linearMap {N' : Type*} [AddCommGroup N'] [Mo
274274
Function.Injective (L.lTensor M) :=
275275
(L.lTensor_inj_iff_rTensor_inj M).2 (rTensor_preserves_injective_linearMap L hL)
276276

277+
theorem linearIndependent_one_tmul {S} [Ring S] [Algebra R S] [Flat R S] {ι} {v : ι → M}
278+
(hv : LinearIndependent R v) : LinearIndependent S ((1 : S) ⊗ₜ[R] v ·) := by
279+
classical rw [LinearIndependent, ← LinearMap.coe_restrictScalars R,
280+
Finsupp.linearCombination_one_tmul]
281+
simpa using lTensor_preserves_injective_linearMap _ hv
282+
277283
variable (R M) in
278284
/-- `M` is flat if and only if `f ⊗ 𝟙 M` is injective whenever `f` is an injective linear map.
279285
See `Module.Flat.iff_rTensor_preserves_injective_linearMap` to specialize the universe of

Mathlib/RingTheory/Localization/Module.lean

Lines changed: 27 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,11 @@ variable {R : Type*} (Rₛ : Type*)
3232

3333
section IsLocalizedModule
3434

35-
section AddCommMonoid
36-
variable [CommSemiring R] (S : Submonoid R)
37-
3835
open Submodule
3936

40-
variable [CommSemiring Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
41-
variable {M M' : Type*} [AddCommMonoid M] [Module R M]
42-
[AddCommMonoid M'] [Module R M'] [Module Rₛ M'] [IsScalarTower R Rₛ M'] (f : M →ₗ[R] M')
43-
[IsLocalizedModule S f]
37+
variable [CommSemiring R] (S : Submonoid R) [CommSemiring Rₛ] [Algebra R Rₛ] [IsLocalization S Rₛ]
38+
{M Mₛ : Type*} [AddCommMonoid M] [Module R M] [AddCommMonoid Mₛ] [Module R Mₛ]
39+
[Module Rₛ Mₛ] [IsScalarTower R Rₛ Mₛ] (f : M →ₗ[R] Mₛ) [IsLocalizedModule S f]
4440

4541
include S
4642

@@ -53,56 +49,33 @@ theorem span_eq_top_of_isLocalizedModule {v : Set M} (hv : span R v = ⊤) :
5349
rw [← LinearMap.coe_restrictScalars R, ← LinearMap.map_span, hv]
5450
exact mem_map_of_mem mem_top
5551

56-
end AddCommMonoid
57-
58-
section AddCommGroup
59-
60-
variable {R : Type*} (Rₛ : Type*) [CommRing R] (S : Submonoid R)
61-
variable [CommRing Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
62-
variable {M M' : Type*} [AddCommGroup M] [Module R M]
63-
[AddCommGroup M'] [Module R M'] [Module Rₛ M'] [IsScalarTower R Rₛ M'] (f : M →ₗ[R] M')
64-
[IsLocalizedModule S f]
65-
66-
include S
67-
6852
theorem LinearIndependent.of_isLocalizedModule {ι : Type*} {v : ι → M}
6953
(hv : LinearIndependent R v) : LinearIndependent Rₛ (f ∘ v) := by
70-
rw [linearIndependent_iff'] at hv ⊢
71-
intro t g hg i hi
72-
choose! a g' hg' using IsLocalization.exist_integer_multiples S t g
73-
have h0 : f (∑ i ∈ t, g' i • v i) = 0 := by
74-
apply_fun ((a : R) • ·) at hg
75-
rw [smul_zero, Finset.smul_sum] at hg
76-
rw [map_sum, ← hg]
77-
refine Finset.sum_congr rfl fun i hi => ?_
78-
rw [← smul_assoc, ← hg' i hi, map_smul, Function.comp_apply, algebraMap_smul]
79-
obtain ⟨s, hs⟩ := (IsLocalizedModule.eq_zero_iff S f).mp h0
80-
simp_rw [Finset.smul_sum, Submonoid.smul_def, smul_smul] at hs
81-
specialize hv t _ hs i hi
82-
rw [← (IsLocalization.map_units Rₛ a).mul_right_eq_zero, ← Algebra.smul_def, ← hg' i hi]
83-
exact (IsLocalization.map_eq_zero_iff S _ _).2s, hv⟩
84-
85-
variable [Module Rₛ M] [IsScalarTower R Rₛ M]
86-
87-
theorem LinearIndependent.localization {ι : Type*} {b : ι → M} (hli : LinearIndependent R b) :
54+
rw [linearIndependent_iff'] at hv ⊢
55+
intro t g₁ g₂ eq i hi
56+
choose! a fg hfg using IsLocalization.exist_integer_multiples S (t.disjSum t) (Sum.elim g₁ g₂)
57+
simp_rw [Sum.forall, Finset.inl_mem_disjSum, Sum.elim_inl, Finset.inr_mem_disjSum, Sum.elim_inr,
58+
Subtype.forall'] at hfg
59+
apply_fun ((a : R) • ·) at eq
60+
simp_rw [← t.sum_coe_sort, Finset.smul_sum, ← smul_assoc, ← hfg,
61+
algebraMap_smul, Function.comp_def, ← map_smul, ← map_sum,
62+
t.sum_coe_sort (f := fun x ↦ fg (Sum.inl x) • v x),
63+
t.sum_coe_sort (f := fun x ↦ fg (Sum.inr x) • v x)] at eq
64+
have ⟨s, eq⟩ := IsLocalizedModule.exists_of_eq (S := S) eq
65+
simp_rw [Finset.smul_sum, Submonoid.smul_def, smul_smul] at eq
66+
have := congr(algebraMap R Rₛ $(hv t _ _ eq i hi))
67+
simpa only [map_mul, (IsLocalization.map_units Rₛ s).mul_right_inj, hfg.1 ⟨i, hi⟩, hfg.2i, hi⟩,
68+
Algebra.smul_def, (IsLocalization.map_units Rₛ a).mul_right_inj] using this
69+
70+
theorem LinearIndependent.localization [Module Rₛ M] [IsScalarTower R Rₛ M]
71+
{ι : Type*} {b : ι → M} (hli : LinearIndependent R b) :
8872
LinearIndependent Rₛ b := by
8973
have := isLocalizedModule_id S M Rₛ
9074
exact hli.of_isLocalizedModule Rₛ S .id
9175

92-
end AddCommGroup
93-
94-
95-
variable [CommRing R] (S : Submonoid R)
96-
9776
section Basis
9877

99-
variable [CommRing Rₛ] [Algebra R Rₛ] [hT : IsLocalization S Rₛ]
100-
101-
open Submodule
102-
103-
variable {M Mₛ : Type*} [AddCommGroup M] [AddCommGroup Mₛ] [Module R M] [Module R Mₛ]
104-
[Module Rₛ Mₛ] (f : M →ₗ[R] Mₛ) [IsLocalizedModule S f] [IsScalarTower R Rₛ Mₛ]
105-
{ι : Type*} (b : Basis ι R M)
78+
variable {ι : Type*} (b : Basis ι R M)
10679

10780
/-- If `M` has an `R`-basis, then localizing `M` at `S` has a basis over `R` localized at `S`. -/
10881
noncomputable def Basis.ofIsLocalizedModule : Basis ι Rₛ Mₛ :=
@@ -138,12 +111,12 @@ end IsLocalizedModule
138111

139112
section LocalizationLocalization
140113

141-
variable [CommRing R] (S : Submonoid R) [CommRing Rₛ] [Algebra R Rₛ]
142-
variable [hT : IsLocalization S Rₛ]
143-
variable {A : Type*} [CommRing A] [Algebra R A]
144-
variable (Aₛ : Type*) [CommRing Aₛ] [Algebra A Aₛ]
114+
variable [CommSemiring R] (S : Submonoid R) [CommSemiring Rₛ] [Algebra R Rₛ]
115+
variable [IsLocalization S Rₛ]
116+
variable {A : Type*} [CommSemiring A] [Algebra R A]
117+
variable (Aₛ : Type*) [CommSemiring Aₛ] [Algebra A Aₛ]
145118
variable [Algebra Rₛ Aₛ] [Algebra R Aₛ] [IsScalarTower R Rₛ Aₛ] [IsScalarTower R A Aₛ]
146-
variable [hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ]
119+
variable [IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ]
147120

148121
open Submodule
149122

0 commit comments

Comments
 (0)