Linear independence #
This file defines linear independence in a module or vector space.
It is inspired by Isabelle/HOL's linear algebra, and hence indirectly by HOL Light.
We define linear_independent R v as ker (finsupp.total ι M R v) = ⊥. Here finsupp.total is the
linear map sending a function f : ι →₀ R with finite support to the linear combination of vectors
from v with these coefficients. Then we prove that several other statements are equivalent to this
one, including injectivity of finsupp.total ι M R v and some versions with explicitly written
linear combinations.
Main definitions #
All definitions are given for families of vectors, i.e. v : ι → M where M is the module or
vector space and ι : Type* is an arbitrary indexing type.
-
linear_independent R vstates that the elements of the familyvare linearly independent. -
linear_independent.repr hv xreturns the linear combination representingx : span R (range v)on the linearly independent vectorsv, givenhv : linear_independent R v(using classical choice).linear_independent.repr hvis provided as a linear map.
Main statements #
We prove several specialized tests for linear independence of families of vectors and of sets of vectors.
fintype.linear_independent_iff: ifιis a finite type, then any functionf : ι → Rhas finite support, so we can reformulate the statement using∑ i : ι, f i • v iinstead of a sum over an auxiliarys : finset ι;linear_independent_empty_type: a family indexed by an empty type is linearly independent;linear_independent_unique_iff: ifιis a singleton, thenlinear_independent K vis equivalent tov default ≠ 0;- linear_independent_option
,linear_independent_sum,linear_independent_fin_cons,linear_independent_fin_succ`: type-specific tests for linear independence of families of vector fields; linear_independent_insert,linear_independent_union,linear_independent_pair,linear_independent_singleton: linear independence tests for set operations.
In many cases we additionally provide dot-style operations (e.g., linear_independent.union) to
make the linear independence tests usable as hv.insert ha etc.
We also prove that, when working over a division ring, any family of vectors includes a linear independent subfamily spanning the same subspace.
Implementation notes #
We use families instead of sets because it allows us to say that two identical vectors are linearly dependent.
If you want to use sets, use the family (λ x, x : s → M) given a set s : set M. The lemmas
linear_independent.to_subtype_range and linear_independent.of_subtype_range connect those two
worlds.
Tags #
linearly dependent, linear dependence, linearly independent, linear independence
linear_independent R v states the family of vectors v is linearly independent over R.
Equations
- linear_independent R v = (linear_map.ker (finsupp.total ι M R v) = ⊥)
A finite family of vectors v i is linear independent iff the linear map that sends
c : ι → R to ∑ i, c i • v i has the trivial kernel.
A subfamily of a linearly independent family (i.e., a composition with an injective map) is a linearly independent family.
If v is a linearly independent family of vectors and the kernel of a linear map f is
disjoint with the submodule spanned by the vectors of v, then f ∘ v is a linearly independent
family of vectors. See also linear_independent.map' for a special case assuming ker f = ⊥.
An injective linear map sends linearly independent families of vectors to linearly independent
families of vectors. See also linear_independent.map for a more general statement.
If the image of a family of vectors under a linear map is linearly independent, then so is the original family.
If f is an injective linear map, then the family f ∘ v is linearly independent
if and only if the family v is linearly independent.
Alias of the forward direction of linear_independent_subtype_range.
See linear_independent.fin_cons for a family of elements in a vector space.
A set of linearly independent vectors in a module M over a semiring K is also linearly
independent over a subring R of K.
The implementation uses minimal assumptions about the relationship between R, K and M.
The version where K is an R-algebra is linear_independent.restrict_scalars_algebras.
Every finite subset of a linearly independent set is linearly independent.
If every finite set of linearly independent vectors has cardinality at most n,
then the same is true for arbitrary sets of linearly independent vectors.
The following lemmas use the subtype defined by a set in M as the index set ι.
A version of linear_dependent_comp_subtype' with finsupp.total unfolded.
Alias of the forward direction of linear_independent_iff_injective_total.
A linearly independent family is maximal if there is no strictly larger linearly independent family.
An alternative characterization of a maximal linearly independent family,
quantifying over types (in the same universe as M) into which the indexing family injects.
Linear independent families are injective, even if you multiply either side.
The following lemmas use the subtype defined by a set in M as the index set ι.
Canonical isomorphism between linear combinations and the span of linearly independent vectors.
Equations
- hv.total_equiv = linear_equiv.of_bijective (linear_map.cod_restrict (submodule.span R (set.range v)) (finsupp.total ι M R v) linear_independent.total_equiv._proof_3) _ linear_independent.total_equiv._proof_7
Linear combination representing a vector in the span of linearly independent vectors.
Given a family of linearly independent vectors, we can represent any vector in their span as
a linear combination of these vectors. These are provided by this linear map.
It is simply one direction of linear_independent.total_equiv.
Equations
- hv.repr = ↑(hv.total_equiv.symm)
See also complete_lattice.independent_iff_linear_independent_of_ne_zero.
Dedekind's linear independence of characters
Alias of the reverse direction of linear_independent_unique_iff.
Properties which require division_ring K #
These can be considered generalizations of properties of linear independence in vector spaces.
See linear_independent.fin_cons' for an uglier version that works if you
only have a module over a semiring.
linear_independent.extend adds vectors to a linear independent set s ⊆ t until it spans
all elements of t.
Equations
- hs.extend hst = classical.some _