case intro
ι : Type u_1
R : Type u_3
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
inst✝¹ : _root_.Finite ι
s : ι → M
hs : span R (range s) = ⊤
inst✝ : NoZeroSMulDivisors R M
val✝ : Fintype ι
⊢ Free R M
ι : Type u_1
R : Type u_3
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
inst✝¹ : _root_.Finite ι
s : ι → M
hs : span R (range s) = ⊤
inst✝ : NoZeroSMulDivisors R M
⊢ Free R M
cases nonempty_fintype ι
case intro.mk
ι : Type u_1
R : Type u_3
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
b✝ : ι → M
inst✝¹ : _root_.Finite ι
s : ι → M
hs : span R (range s) = ⊤
inst✝ : NoZeroSMulDivisors R M
val✝ : Fintype ι
n : ℕ
b : Basis (Fin n) R M
⊢ Free R M
case intro
ι : Type u_1
R : Type u_3
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
inst✝¹ : _root_.Finite ι
s : ι → M
hs : span R (range s) = ⊤
inst✝ : NoZeroSMulDivisors R M
val✝ : Fintype ι
⊢ Free R M
obtain ⟨n, b⟩ : Σn, Basis (Fin n) R M := Module.basisOfFiniteTypeTorsionFree hs
no goals
case intro.mk
ι : Type u_1
R : Type u_3
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
b✝ : ι → M
inst✝¹ : _root_.Finite ι
s : ι → M
hs : span R (range s) = ⊤
inst✝ : NoZeroSMulDivisors R M
val✝ : Fintype ι
n : ℕ
b : Basis (Fin n) R M
⊢ Free R M
exact Module.Free.of_basis b