@@ -882,11 +882,9 @@ open Basis
882
882
883
883
open Fintype
884
884
885
- variable [Fintype ι] (b : Basis ι R M)
886
-
887
885
/-- A module over `R` with a finite basis is linearly equivalent to functions from its basis to `R`.
888
886
-/
889
- def Basis.equivFun : M ≃ₗ[R] ι → R :=
887
+ def Basis.equivFun [Finite ι] (b : Basis ι R M) : M ≃ₗ[R] ι → R :=
890
888
LinearEquiv.trans b.repr
891
889
({ Finsupp.equivFunOnFinite with
892
890
toFun := (↑)
@@ -896,12 +894,12 @@ def Basis.equivFun : M ≃ₗ[R] ι → R :=
896
894
#align basis.equiv_fun Basis.equivFun
897
895
898
896
/-- A module over a finite ring that admits a finite basis is finite. -/
899
- def Module.fintypeOfFintype (b : Basis ι R M) [Fintype R] : Fintype M :=
897
+ def Module.fintypeOfFintype [Fintype ι] (b : Basis ι R M) [Fintype R] : Fintype M :=
900
898
haveI := Classical.decEq ι
901
899
Fintype.ofEquiv _ b.equivFun.toEquiv.symm
902
900
#align module.fintype_of_fintype Module.fintypeOfFintype
903
901
904
- theorem Module.card_fintype (b : Basis ι R M) [Fintype R] [Fintype M] :
902
+ theorem Module.card_fintype [Fintype ι] (b : Basis ι R M) [Fintype R] [Fintype M] :
905
903
card M = card R ^ card ι := by
906
904
classical
907
905
calc
@@ -912,60 +910,55 @@ theorem Module.card_fintype (b : Basis ι R M) [Fintype R] [Fintype M] :
912
910
/-- Given a basis `v` indexed by `ι`, the canonical linear equivalence between `ι → R` and `M` maps
913
911
a function `x : ι → R` to the linear combination `∑_i x i • v i`. -/
914
912
@[simp]
915
- theorem Basis.equivFun_symm_apply (x : ι → R) : b.equivFun.symm x = ∑ i, x i • b i := by
913
+ theorem Basis.equivFun_symm_apply [Fintype ι] (b : Basis ι R M) (x : ι → R) :
914
+ b.equivFun.symm x = ∑ i, x i • b i := by
916
915
simp [Basis.equivFun, Finsupp.total_apply, Finsupp.sum_fintype, Finsupp.equivFunOnFinite]
917
916
#align basis.equiv_fun_symm_apply Basis.equivFun_symm_apply
918
917
919
918
@[simp]
920
- theorem Basis.equivFun_apply (u : M) : b.equivFun u = b.repr u :=
919
+ theorem Basis.equivFun_apply [Finite ι] (b : Basis ι R M) (u : M) : b.equivFun u = b.repr u :=
921
920
rfl
922
921
#align basis.equiv_fun_apply Basis.equivFun_apply
923
922
924
923
@[simp]
925
- theorem Basis.map_equivFun (f : M ≃ₗ[R] M') : (b.map f).equivFun = f.symm.trans b.equivFun :=
924
+ theorem Basis.map_equivFun [Finite ι] (b : Basis ι R M) (f : M ≃ₗ[R] M') :
925
+ (b.map f).equivFun = f.symm.trans b.equivFun :=
926
926
rfl
927
927
#align basis.map_equiv_fun Basis.map_equivFun
928
928
929
- theorem Basis.sum_equivFun (u : M) : ∑ i, b.equivFun u i • b i = u := by
930
- conv_rhs => rw [← b.total_repr u]
931
- simp [Finsupp.total_apply, Finsupp.sum_fintype , b.equivFun_apply ]
929
+ theorem Basis.sum_equivFun [Fintype ι] (b : Basis ι R M) ( u : M) :
930
+ ∑ i, b.equivFun u i • b i = u := by
931
+ rw [← b.equivFun_symm_apply , b.equivFun.symm_apply_apply ]
932
932
#align basis.sum_equiv_fun Basis.sum_equivFun
933
933
934
- theorem Basis.sum_repr (u : M) : ∑ i, b.repr u i • b i = u :=
934
+ theorem Basis.sum_repr [Fintype ι] (b : Basis ι R M) (u : M) : ∑ i, b.repr u i • b i = u :=
935
935
b.sum_equivFun u
936
936
#align basis.sum_repr Basis.sum_repr
937
937
938
938
@[simp]
939
- theorem Basis.equivFun_self [DecidableEq ι] (i j : ι) :
939
+ theorem Basis.equivFun_self [Finite ι] [ DecidableEq ι] (b : Basis ι R M) (i j : ι) :
940
940
b.equivFun (b i) j = if i = j then 1 else 0 := by rw [b.equivFun_apply, b.repr_self_apply]
941
941
#align basis.equiv_fun_self Basis.equivFun_self
942
942
943
- theorem Basis.repr_sum_self (c : ι → R) : ⇑(b.repr (∑ i, c i • b i)) = c := by
944
- ext j
945
- simp only [map_sum, LinearEquiv.map_smul, repr_self, Finsupp.smul_single, smul_eq_mul, mul_one,
946
- Finset.sum_apply']
947
- rw [Finset.sum_eq_single j, Finsupp.single_eq_same]
948
- · rintro i - hi
949
- exact Finsupp.single_eq_of_ne hi
950
- · intros
951
- have := Finset.mem_univ j
952
- contradiction
943
+ theorem Basis.repr_sum_self [Fintype ι] (b : Basis ι R M) (c : ι → R) :
944
+ b.repr (∑ i, c i • b i) = c := by
945
+ simp_rw [← b.equivFun_symm_apply, ← b.equivFun_apply, b.equivFun.apply_symm_apply]
953
946
#align basis.repr_sum_self Basis.repr_sum_self
954
947
955
948
/-- Define a basis by mapping each vector `x : M` to its coordinates `e x : ι → R`,
956
949
as long as `ι` is finite. -/
957
- def Basis.ofEquivFun (e : M ≃ₗ[R] ι → R) : Basis ι R M :=
950
+ def Basis.ofEquivFun [Finite ι] (e : M ≃ₗ[R] ι → R) : Basis ι R M :=
958
951
.ofRepr <| e.trans <| LinearEquiv.symm <| Finsupp.linearEquivFunOnFinite R R ι
959
952
#align basis.of_equiv_fun Basis.ofEquivFun
960
953
961
954
@[simp]
962
- theorem Basis.ofEquivFun_repr_apply (e : M ≃ₗ[R] ι → R) (x : M) (i : ι) :
955
+ theorem Basis.ofEquivFun_repr_apply [Finite ι] (e : M ≃ₗ[R] ι → R) (x : M) (i : ι) :
963
956
(Basis.ofEquivFun e).repr x i = e x i :=
964
957
rfl
965
958
#align basis.of_equiv_fun_repr_apply Basis.ofEquivFun_repr_apply
966
959
967
960
@[simp]
968
- theorem Basis.coe_ofEquivFun [DecidableEq ι] (e : M ≃ₗ[R] ι → R) :
961
+ theorem Basis.coe_ofEquivFun [Finite ι] [ DecidableEq ι] (e : M ≃ₗ[R] ι → R) :
969
962
(Basis.ofEquivFun e : ι → M) = fun i => e.symm (Function.update 0 i 1 ) :=
970
963
funext fun i =>
971
964
e.injective <|
@@ -974,16 +967,14 @@ theorem Basis.coe_ofEquivFun [DecidableEq ι] (e : M ≃ₗ[R] ι → R) :
974
967
#align basis.coe_of_equiv_fun Basis.coe_ofEquivFun
975
968
976
969
@[simp]
977
- theorem Basis.ofEquivFun_equivFun (v : Basis ι R M) : Basis.ofEquivFun v.equivFun = v := by
978
- classical
979
- ext j
980
- simp only [Basis.equivFun_symm_apply, Basis.coe_ofEquivFun]
981
- simp_rw [Function.update_apply, ite_smul]
982
- simp only [Finset.mem_univ, if_true, Pi.zero_apply, one_smul, Finset.sum_ite_eq', zero_smul]
970
+ theorem Basis.ofEquivFun_equivFun [Finite ι] (v : Basis ι R M) :
971
+ Basis.ofEquivFun v.equivFun = v :=
972
+ Basis.repr_injective <| by ext; rfl
983
973
#align basis.of_equiv_fun_equiv_fun Basis.ofEquivFun_equivFun
984
974
985
975
@[simp]
986
- theorem Basis.equivFun_ofEquivFun (e : M ≃ₗ[R] ι → R) : (Basis.ofEquivFun e).equivFun = e := by
976
+ theorem Basis.equivFun_ofEquivFun [Finite ι] (e : M ≃ₗ[R] ι → R) :
977
+ (Basis.ofEquivFun e).equivFun = e := by
987
978
ext j
988
979
simp_rw [Basis.equivFun_apply, Basis.ofEquivFun_repr_apply]
989
980
#align basis.equiv_fun_of_equiv_fun Basis.equivFun_ofEquivFun
@@ -993,21 +984,22 @@ variable (S : Type*) [Semiring S] [Module S M']
993
984
variable [SMulCommClass R S M']
994
985
995
986
@[simp]
996
- theorem Basis.constr_apply_fintype (f : ι → M') (x : M) :
987
+ theorem Basis.constr_apply_fintype [Fintype ι] (b : Basis ι R M) (f : ι → M') (x : M) :
997
988
(constr (M' := M') b S f : M → M') x = ∑ i, b.equivFun x i • f i := by
998
989
simp [b.constr_apply, b.equivFun_apply, Finsupp.sum_fintype]
999
990
#align basis.constr_apply_fintype Basis.constr_apply_fintype
1000
991
1001
992
/-- If the submodule `P` has a finite basis,
1002
993
`x ∈ P` iff it is a linear combination of basis vectors. -/
1003
- theorem Basis.mem_submodule_iff' {P : Submodule R M} (b : Basis ι R P) {x : M} :
994
+ theorem Basis.mem_submodule_iff' [Fintype ι] {P : Submodule R M} (b : Basis ι R P) {x : M} :
1004
995
x ∈ P ↔ ∃ c : ι → R, x = ∑ i, c i • (b i : M) :=
1005
996
b.mem_submodule_iff.trans <|
1006
997
Finsupp.equivFunOnFinite.exists_congr_left.trans <|
1007
998
exists_congr fun c => by simp [Finsupp.sum_fintype, Finsupp.equivFunOnFinite]
1008
999
#align basis.mem_submodule_iff' Basis.mem_submodule_iff'
1009
1000
1010
- theorem Basis.coord_equivFun_symm (i : ι) (f : ι → R) : b.coord i (b.equivFun.symm f) = f i :=
1001
+ theorem Basis.coord_equivFun_symm [Finite ι] (b : Basis ι R M) (i : ι) (f : ι → R) :
1002
+ b.coord i (b.equivFun.symm f) = f i :=
1011
1003
b.coord_repr_symm i (Finsupp.equivFunOnFinite.symm f)
1012
1004
#align basis.coord_equiv_fun_symm Basis.coord_equivFun_symm
1013
1005
0 commit comments