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 v
states that the elements of the familyv
are linearly independent. -
linear_independent.repr hv x
returns the linear combination representingx : span R (range v)
on the linearly independent vectorsv
, givenhv : linear_independent R v
(using classical choice).linear_independent.repr hv
is 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 : ι → R
has finite support, so we can reformulate the statement using∑ i : ι, f i • v i
instead 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 v
is 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 = ((finsupp.total ι M R v).ker = ⊥)
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 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 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)
Dedekind's linear independence of characters
Alias 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 _