File: Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean

full_name: mk_eq_mk_of_basis
code: /-- The dimension theorem: if `v` and `v'` are two bases, their index types
have the same cardinalities. -/
theorem mk_eq_mk_of_basis (v : Basis ι R M) (v' : Basis ι' R M) :
    Cardinal.lift.{w'} #ι = Cardinal.lift.{w} #ι' 
goal: Cardinal.lift.{w', w} #ι = Cardinal.lift.{w, w'} #ι'

full_name: Basis.indexEquiv
code: /-- Given two bases indexed by `ι` and `ι'` of an `R`-module, where `R` satisfies the invariant
basis number property, an equiv `ι ≃ ι'`. -/
def Basis.indexEquiv (v : Basis ι R M) (v' : Basis ι' R M) : ι ≃ ι' 
goal: ι ≃ ι'

full_name: mk_eq_mk_of_basis'
code: theorem mk_eq_mk_of_basis' {ι' : Type w} (v : Basis ι R M) (v' : Basis ι' R M) : #ι = #ι' 
goal: #ι = #ι'

full_name: Basis.le_span''
code: /-- An auxiliary lemma for `Basis.le_span`.

If `R` satisfies the rank condition,
then for any finite basis `b : Basis ι R M`,
and any finite spanning set `w : Set M`,
the cardinality of `ι` is bounded by the cardinality of `w`.
-/
theorem Basis.le_span'' {ι : Type*} [Fintype ι] (b : Basis ι R M) {w : Set M} [Fintype w]
    (s : span R w = ⊤) : Fintype.card ι ≤ Fintype.card w 
goal: Fintype.card ι ≤ Fintype.card ↑w

full_name: basis_le_span'
code: /--
Another auxiliary lemma for `Basis.le_span`, which does not require assuming the basis is finite,
but still assumes we have a finite spanning set.
-/
theorem basis_le_span' {ι : Type*} (b : Basis ι R M) {w : Set M} [Fintype w] (s : span R w = ⊤) :
    #ι ≤ Fintype.card w 
goal: #ι ≤ ↑(Fintype.card ↑w)

full_name: Basis.le_span
code: /-- If `R` satisfies the rank condition,
then the cardinality of any basis is bounded by the cardinality of any spanning set.
-/
theorem Basis.le_span {J : Set M} (v : Basis ι R M) (hJ : span R J = ⊤) : #(range v) ≤ #J 
goal: #↑(Set.range ⇑v) ≤ #↑J

full_name: linearIndependent_le_span_aux'
code: theorem linearIndependent_le_span_aux' {ι : Type*} [Fintype ι] (v : ι → M)
    (i : LinearIndependent R v) (w : Set M) [Fintype w] (s : range v ≤ span R w) :
    Fintype.card ι ≤ Fintype.card w 
goal: Fintype.card ι ≤ Fintype.card ↑w

full_name: LinearIndependent.finite_of_le_span_finite
code: /-- If `R` satisfies the strong rank condition,
then any linearly independent family `v : ι → M`
contained in the span of some finite `w : Set M`,
is itself finite.
-/
lemma LinearIndependent.finite_of_le_span_finite {ι : Type*} (v : ι → M) (i : LinearIndependent R v)
    (w : Set M) [Finite w] (s : range v ≤ span R w) : Finite ι 
goal: Finite ι

full_name: linearIndependent_le_span'
code: /-- If `R` satisfies the strong rank condition,
then for any linearly independent family `v : ι → M`
contained in the span of some finite `w : Set M`,
the cardinality of `ι` is bounded by the cardinality of `w`.
-/
theorem linearIndependent_le_span' {ι : Type*} (v : ι → M) (i : LinearIndependent R v) (w : Set M)
    [Fintype w] (s : range v ≤ span R w) : #ι ≤ Fintype.card w 
goal: #ι ≤ ↑(Fintype.card ↑w)

full_name: linearIndependent_le_span
code: /-- If `R` satisfies the strong rank condition,
then for any linearly independent family `v : ι → M`
and any finite spanning set `w : Set M`,
the cardinality of `ι` is bounded by the cardinality of `w`.
-/
theorem linearIndependent_le_span {ι : Type*} (v : ι → M) (i : LinearIndependent R v) (w : Set M)
    [Fintype w] (s : span R w = ⊤) : #ι ≤ Fintype.card w 
goal: #ι ≤ ↑(Fintype.card ↑w)

full_name: linearIndependent_le_span_finset
code: /-- A version of `linearIndependent_le_span` for `Finset`. -/
theorem linearIndependent_le_span_finset {ι : Type*} (v : ι → M) (i : LinearIndependent R v)
    (w : Finset M) (s : span R (w : Set M) = ⊤) : #ι ≤ w.card 
goal: #ι ≤ ↑w.card

full_name: linearIndependent_le_infinite_basis
code: /-- An auxiliary lemma for `linearIndependent_le_basis`:
we handle the case where the basis `b` is infinite.
-/
theorem linearIndependent_le_infinite_basis {ι : Type w} (b : Basis ι R M) [Infinite ι] {κ : Type w}
    (v : κ → M) (i : LinearIndependent R v) : #κ ≤ #ι 
goal: #κ ≤ #ι

full_name: linearIndependent_le_basis
code: /-- Over any ring `R` satisfying the strong rank condition,
if `b` is a basis for a module `M`,
and `s` is a linearly independent set,
then the cardinality of `s` is bounded by the cardinality of `b`.
-/
theorem linearIndependent_le_basis {ι : Type w} (b : Basis ι R M) {κ : Type w} (v : κ → M)
    (i : LinearIndependent R v) : #κ ≤ #ι 
goal: #κ ≤ #ι

full_name: Basis.card_le_card_of_linearIndependent_aux
code: /-- Let `R` satisfy the strong rank condition. If `m` elements of a free rank `n` `R`-module are
linearly independent, then `m ≤ n`. -/
theorem Basis.card_le_card_of_linearIndependent_aux {R : Type*} [Ring R] [StrongRankCondition R]
    (n : ℕ) {m : ℕ} (v : Fin m → Fin n → R) : LinearIndependent R v → m ≤ n 
goal: LinearIndependent R v → m ≤ n

full_name: maximal_linearIndependent_eq_infinite_basis
code: /-- Over any ring `R` satisfying the strong rank condition,
if `b` is an infinite basis for a module `M`,
then every maximal linearly independent set has the same cardinality as `b`.

This proof (along with some of the lemmas above) comes from
[Les familles libres maximales d'un module ont-elles le meme cardinal?][lazarus1973]
-/
theorem maximal_linearIndependent_eq_infinite_basis {ι : Type w} (b : Basis ι R M) [Infinite ι]
    {κ : Type w} (v : κ → M) (i : LinearIndependent R v) (m : i.Maximal) : #κ = #ι 
goal: #κ = #ι

full_name: Basis.mk_eq_rank''
code: theorem Basis.mk_eq_rank'' {ι : Type v} (v : Basis ι R M) : #ι = Module.rank R M 
goal: #ι = Module.rank R M

full_name: Basis.mk_range_eq_rank
code: theorem Basis.mk_range_eq_rank (v : Basis ι R M) : #(range v) = Module.rank R M 
goal: #↑(Set.range ⇑v) = Module.rank R M

full_name: rank_eq_card_basis
code: /-- If a vector space has a finite basis, then its dimension (seen as a cardinal) is equal to the
cardinality of the basis. -/
theorem rank_eq_card_basis {ι : Type w} [Fintype ι] (h : Basis ι R M) :
    Module.rank R M = Fintype.card ι 
goal: Module.rank R M = ↑(Fintype.card ι)

full_name: Basis.card_le_card_of_linearIndependent
code: theorem Basis.card_le_card_of_linearIndependent {ι : Type*} [Fintype ι] (b : Basis ι R M)
    {ι' : Type*} [Fintype ι'] {v : ι' → M} (hv : LinearIndependent R v) :
    Fintype.card ι' ≤ Fintype.card ι 
goal: Fintype.card ι' ≤ Fintype.card ι

full_name: Basis.card_le_card_of_submodule
code: theorem Basis.card_le_card_of_submodule (N : Submodule R M) [Fintype ι] (b : Basis ι R M)
    [Fintype ι'] (b' : Basis ι' R N) : Fintype.card ι' ≤ Fintype.card ι 
goal: Fintype.card ι' ≤ Fintype.card ι

full_name: Basis.card_le_card_of_le
code: theorem Basis.card_le_card_of_le {N O : Submodule R M} (hNO : N ≤ O) [Fintype ι] (b : Basis ι R O)
    [Fintype ι'] (b' : Basis ι' R N) : Fintype.card ι' ≤ Fintype.card ι 
goal: Fintype.card ι' ≤ Fintype.card ι

full_name: Basis.mk_eq_rank
code: theorem Basis.mk_eq_rank (v : Basis ι R M) :
    Cardinal.lift.{v} #ι = Cardinal.lift.{w} (Module.rank R M) 
goal: Cardinal.lift.{v, w} #ι = Cardinal.lift.{w, v} (Module.rank R M)

full_name: Basis.mk_eq_rank'
code: theorem Basis.mk_eq_rank'.{m} (v : Basis ι R M) :
    Cardinal.lift.{max v m} #ι = Cardinal.lift.{max w m} (Module.rank R M) 
goal: Cardinal.lift.{max v m, w} #ι = Cardinal.lift.{max w m, v} (Module.rank R M)

full_name: rank_span
code: theorem rank_span {v : ι → M} (hv : LinearIndependent R v) :
    Module.rank R ↑(span R (range v)) = #(range v) 
goal: Module.rank R ↥(Submodule.span R (Set.range v)) = #↑(Set.range v)

full_name: rank_span_set
code: theorem rank_span_set {s : Set M} (hs : LinearIndependent R (fun x => x : s → M)) :
    Module.rank R ↑(span R s) = #s 
goal: Module.rank R ↥(Submodule.span R s) = #↑s

full_name: Submodule.inductionOnRank
code: /-- An induction (and recursion) principle for proving results about all submodules of a fixed
finite free module `M`. A property is true for all submodules of `M` if it satisfies the following
"inductive step": the property is true for a submodule `N` if it's true for all submodules `N'`
of `N` with the property that there exists `0 ≠ x ∈ N` such that the sum `N' + Rx` is direct. -/
def Submodule.inductionOnRank [IsDomain R] [Finite ι] (b : Basis ι R M)
    (P : Submodule R M → Sort*) (ih : ∀ N : Submodule R M,
    (∀ N' ≤ N, ∀ x ∈ N, (∀ (c : R), ∀ y ∈ N', c • x + y = (0 : M) → c = 0) → P N') → P N)
    (N : Submodule R M) : P N 
goal: P N

full_name: Ideal.rank_eq
code: /-- If `S` a module-finite free `R`-algebra, then the `R`-rank of a nonzero `R`-free
ideal `I` of `S` is the same as the rank of `S`. -/
theorem Ideal.rank_eq {R S : Type*} [CommRing R] [StrongRankCondition R] [Ring S] [IsDomain S]
    [Algebra R S] {n m : Type*} [Fintype n] [Fintype m] (b : Basis n R S) {I : Ideal S}
    (hI : I ≠ ⊥) (c : Basis m R I) : Fintype.card m = Fintype.card n 
goal: Fintype.card m = Fintype.card n

full_name: finrank_eq_nat_card_basis
code: theorem finrank_eq_nat_card_basis (h : Basis ι R M) :
    finrank R M = Nat.card ι 
goal: FiniteDimensional.finrank R M = Nat.card ι

full_name: FiniteDimensional.finrank_eq_card_basis
code: /-- If a vector space (or module) has a finite basis, then its dimension (or rank) is equal to the
cardinality of the basis. -/
theorem finrank_eq_card_basis {ι : Type w} [Fintype ι] (h : Basis ι R M) :
    finrank R M = Fintype.card ι 
goal: FiniteDimensional.finrank R M = Fintype.card ι

full_name: Module.mk_finrank_eq_card_basis
code: /-- If a free module is of finite rank, then the cardinality of any basis is equal to its
`finrank`. -/
theorem _root_.Module.mk_finrank_eq_card_basis [Module.Finite R M]
    {ι : Type w} (h : Basis ι R M) : (finrank R M : Cardinal.{w}) = #ι 
goal: ↑(FiniteDimensional.finrank R M) = #ι

full_name: FiniteDimensional.finrank_eq_card_finset_basis
code: /-- If a vector space (or module) has a finite basis, then its dimension (or rank) is equal to the
cardinality of the basis. This lemma uses a `Finset` instead of indexed types. -/
theorem finrank_eq_card_finset_basis {ι : Type w} {b : Finset ι} (h : Basis b R M) :
    finrank R M = Finset.card b 
goal: FiniteDimensional.finrank R M = b.card

full_name: rank_self
code: @[simp]
theorem rank_self : Module.rank R R = 1 
goal: Module.rank R R = 1

full_name: FiniteDimensional.finrank_self
code: /-- A ring satisfying `StrongRankCondition` (such as a `DivisionRing`) is one-dimensional as a
module over itself. -/
@[simp]
theorem FiniteDimensional.finrank_self : finrank R R = 1 
goal: FiniteDimensional.finrank R R = 1

full_name: Basis.unique
code: /-- Given a basis of a ring over itself indexed by a type `ι`, then `ι` is `Unique`. -/
noncomputable def Basis.unique {ι : Type*} (b : Basis ι R R) : Unique ι 
goal: Unique ι

full_name: rank_lt_aleph0
code: /-- The rank of a finite module is finite. -/
theorem rank_lt_aleph0 [Module.Finite R M] : Module.rank R M < ℵ₀ 
goal: Module.rank R M < ℵ₀

full_name: finrank_eq_rank
code: /-- If `M` is finite, `finrank M = rank M`. -/
@[simp]
theorem finrank_eq_rank [Module.Finite R M] :
    ↑(FiniteDimensional.finrank R M) = Module.rank R M 
goal: ↑(FiniteDimensional.finrank R M) = Module.rank R M

full_name: LinearMap.finrank_le_finrank_of_injective
code: theorem LinearMap.finrank_le_finrank_of_injective [Module.Finite R M'] {f : M →ₗ[R] M'}
    (hf : Function.Injective f) : finrank R M ≤ finrank R M' 
goal: FiniteDimensional.finrank R M ≤ FiniteDimensional.finrank R M'

full_name: LinearMap.finrank_range_le
code: theorem LinearMap.finrank_range_le [Module.Finite R M] (f : M →ₗ[R] M') :
    finrank R (LinearMap.range f) ≤ finrank R M 
goal: FiniteDimensional.finrank R ↥(LinearMap.range f) ≤ FiniteDimensional.finrank R M