@@ -227,6 +227,10 @@ begin
227
227
apply dim_range_le,
228
228
end
229
229
230
+ theorem dim_quotient_le (p : submodule R M) :
231
+ module.rank R p.quotient ≤ module.rank R M :=
232
+ (mkq p).dim_le_of_surjective (surjective_quot_mk _)
233
+
230
234
variables [nontrivial R]
231
235
232
236
lemma {m } cardinal_lift_le_dim_of_linear_independent
@@ -717,6 +721,13 @@ theorem basis.mk_range_eq_dim (v : basis ι R M) :
717
721
cardinal.mk (range v) = module.rank R M :=
718
722
v.reindex_range.mk_eq_dim''
719
723
724
+ /-- If a vector space has a finite basis, then its dimension (seen as a cardinal) is equal to the
725
+ cardinality of the basis. -/
726
+ lemma dim_eq_card_basis {ι : Type w} [fintype ι] (h : basis ι R M) :
727
+ module.rank R M = fintype.card ι :=
728
+ by rw [←h.mk_range_eq_dim, cardinal.fintype_card,
729
+ set.card_range_of_injective h.injective]
730
+
720
731
theorem basis.mk_eq_dim (v : basis ι R M) :
721
732
cardinal.lift.{w v} (cardinal.mk ι) = cardinal.lift.{v w} (module.rank R M) :=
722
733
by rw [←v.mk_range_eq_dim, cardinal.mk_range_eq_of_injective v.injective]
@@ -757,7 +768,7 @@ by { rw [← @set_of_mem_eq _ s, ← subtype.range_coe_subtype], exact dim_span
757
768
758
769
variables (R)
759
770
760
- lemma dim_of_ring : module.rank R R = 1 :=
771
+ lemma dim_self : module.rank R R = 1 :=
761
772
by rw [←cardinal.lift_inj, ← (basis.singleton punit R).mk_eq_dim, cardinal.mk_punit]
762
773
763
774
end strong_rank_condition
@@ -852,6 +863,68 @@ begin
852
863
⟨equiv.ulift.trans (equiv.sum_congr equiv.ulift equiv.ulift).symm ⟩),
853
864
end
854
865
866
+ -- TODO the remainder of this section should generalize beyond division rings.
867
+
868
+ lemma dim_zero_iff_forall_zero : module.rank K V = 0 ↔ ∀ x : V, x = 0 :=
869
+ begin
870
+ split,
871
+ { intros h x,
872
+ have card_mk_range := (basis.of_vector_space K V).mk_range_eq_dim,
873
+ rw [h, cardinal.mk_emptyc_iff, coe_of_vector_space, subtype.range_coe] at card_mk_range,
874
+ simpa [card_mk_range] using (of_vector_space K V).mem_span x },
875
+ { intro h,
876
+ have : (⊤ : submodule K V) = ⊥,
877
+ { ext x, simp [h x] },
878
+ rw [←dim_top, this , dim_bot] }
879
+ end
880
+
881
+ lemma dim_zero_iff : module.rank K V = 0 ↔ subsingleton V :=
882
+ dim_zero_iff_forall_zero.trans (subsingleton_iff_forall_eq 0 ).symm
883
+
884
+ lemma dim_pos_iff_exists_ne_zero : 0 < module.rank K V ↔ ∃ x : V, x ≠ 0 :=
885
+ begin
886
+ rw ←not_iff_not,
887
+ simpa using dim_zero_iff_forall_zero
888
+ end
889
+
890
+ lemma dim_pos_iff_nontrivial : 0 < module.rank K V ↔ nontrivial V :=
891
+ dim_pos_iff_exists_ne_zero.trans (nontrivial_iff_exists_ne 0 ).symm
892
+
893
+ lemma dim_pos [h : nontrivial V] : 0 < module.rank K V :=
894
+ dim_pos_iff_nontrivial.2 h
895
+
896
+
897
+ section fintype
898
+ variable [fintype η]
899
+ variables [∀i, add_comm_group (φ i)] [∀i, module K (φ i)]
900
+
901
+ open linear_map
902
+
903
+ lemma dim_pi : module.rank K (Πi, φ i) = cardinal.sum (λi, module.rank K (φ i)) :=
904
+ begin
905
+ let b := assume i, basis.of_vector_space K (φ i),
906
+ let this : basis (Σ j, _) K (Π j, φ j) := pi.basis b,
907
+ rw [←cardinal.lift_inj, ← this.mk_eq_dim],
908
+ simp [λ i, (b i).mk_range_eq_dim.symm, cardinal.sum_mk]
909
+ end
910
+
911
+ lemma dim_fun {V η : Type u} [fintype η] [add_comm_group V] [module K V] :
912
+ module.rank K (η → V) = fintype.card η * module.rank K V :=
913
+ by rw [dim_pi, cardinal.sum_const, cardinal.fintype_card]
914
+
915
+ lemma dim_fun_eq_lift_mul :
916
+ module.rank K (η → V) = (fintype.card η : cardinal.{max u₁' v}) *
917
+ cardinal.lift.{v u₁'} (module.rank K V) :=
918
+ by rw [dim_pi, cardinal.sum_const_eq_lift_mul, cardinal.fintype_card, cardinal.lift_nat_cast]
919
+
920
+ lemma dim_fun' : module.rank K (η → K) = fintype.card η :=
921
+ by rw [dim_fun_eq_lift_mul, dim_self, cardinal.lift_one, mul_one, cardinal.nat_cast_inj]
922
+
923
+ lemma dim_fin_fun (n : ℕ) : module.rank K (fin n → K) = n :=
924
+ by simp [dim_fun']
925
+
926
+ end fintype
927
+
855
928
end division_ring
856
929
857
930
section field
@@ -863,10 +936,6 @@ theorem dim_quotient_add_dim (p : submodule K V) :
863
936
module.rank K p.quotient + module.rank K p = module.rank K V :=
864
937
by classical; exact let ⟨f⟩ := quotient_prod_linear_equiv p in dim_prod.symm.trans f.dim_eq
865
938
866
- theorem dim_quotient_le (p : submodule K V) :
867
- module.rank K p.quotient ≤ module.rank K V :=
868
- by { rw ← dim_quotient_add_dim p, exact self_le_add_right _ _ }
869
-
870
939
/-- rank-nullity theorem -/
871
940
theorem dim_range_add_dim_ker (f : V →ₗ[K] V₁) :
872
941
module.rank K f.range + module.rank K f.ker = module.rank K V :=
@@ -944,37 +1013,6 @@ by { rw [← dim_sup_add_dim_inf_eq], exact self_le_add_right _ _ }
944
1013
945
1014
end
946
1015
947
- section fintype
948
- variable [fintype η]
949
- variables [∀i, add_comm_group (φ i)] [∀i, module K (φ i)]
950
-
951
- open linear_map
952
-
953
- lemma dim_pi : module.rank K (Πi, φ i) = cardinal.sum (λi, module.rank K (φ i)) :=
954
- begin
955
- let b := assume i, basis.of_vector_space K (φ i),
956
- let this : basis (Σ j, _) K (Π j, φ j) := pi.basis b,
957
- rw [←cardinal.lift_inj, ← this.mk_eq_dim],
958
- simp [λ i, (b i).mk_range_eq_dim.symm, cardinal.sum_mk]
959
- end
960
-
961
- lemma dim_fun {V η : Type u} [fintype η] [add_comm_group V] [module K V] :
962
- module.rank K (η → V) = fintype.card η * module.rank K V :=
963
- by rw [dim_pi, cardinal.sum_const, cardinal.fintype_card]
964
-
965
- lemma dim_fun_eq_lift_mul :
966
- module.rank K (η → V) = (fintype.card η : cardinal.{max u₁' v}) *
967
- cardinal.lift.{v u₁'} (module.rank K V) :=
968
- by rw [dim_pi, cardinal.sum_const_eq_lift_mul, cardinal.fintype_card, cardinal.lift_nat_cast]
969
-
970
- lemma dim_fun' : module.rank K (η → K) = fintype.card η :=
971
- by rw [dim_fun_eq_lift_mul, dim_of_ring, cardinal.lift_one, mul_one, cardinal.nat_cast_inj]
972
-
973
- lemma dim_fin_fun (n : ℕ) : module.rank K (fin n → K) = n :=
974
- by simp [dim_fun']
975
-
976
- end fintype
977
-
978
1016
lemma exists_mem_ne_zero_of_ne_bot {s : submodule K V} (h : s ≠ ⊥) : ∃ b : V, b ∈ s ∧ b ≠ 0 :=
979
1017
begin
980
1018
classical,
@@ -1035,21 +1073,6 @@ end rank
1035
1073
1036
1074
-- TODO The remainder of this file could be generalized to arbitrary rings.
1037
1075
1038
- lemma dim_zero_iff_forall_zero : module.rank K V = 0 ↔ ∀ x : V, x = 0 :=
1039
- begin
1040
- split,
1041
- { intros h x,
1042
- have card_mk_range := (basis.of_vector_space K V).mk_range_eq_dim,
1043
- rw [h, cardinal.mk_emptyc_iff, coe_of_vector_space, subtype.range_coe] at card_mk_range,
1044
- simpa [card_mk_range] using (of_vector_space K V).mem_span x },
1045
- { intro h,
1046
- have : (⊤ : submodule K V) = ⊥,
1047
- { ext x, simp [h x] },
1048
- rw [←dim_top, this , dim_bot] }
1049
- end
1050
-
1051
- lemma dim_zero_iff : module.rank K V = 0 ↔ subsingleton V :=
1052
- dim_zero_iff_forall_zero.trans (subsingleton_iff_forall_eq 0 ).symm
1053
1076
1054
1077
/-- The `ι` indexed basis on `V`, where `ι` is an empty type and `V` is zero-dimensional.
1055
1078
@@ -1067,19 +1090,6 @@ end
1067
1090
basis.of_dim_eq_zero hV i = 0 :=
1068
1091
rfl
1069
1092
1070
-
1071
- lemma dim_pos_iff_exists_ne_zero : 0 < module.rank K V ↔ ∃ x : V, x ≠ 0 :=
1072
- begin
1073
- rw ←not_iff_not,
1074
- simpa using dim_zero_iff_forall_zero
1075
- end
1076
-
1077
- lemma dim_pos_iff_nontrivial : 0 < module.rank K V ↔ nontrivial V :=
1078
- dim_pos_iff_exists_ne_zero.trans (nontrivial_iff_exists_ne 0 ).symm
1079
-
1080
- lemma dim_pos [h : nontrivial V] : 0 < module.rank K V :=
1081
- dim_pos_iff_nontrivial.2 h
1082
-
1083
1093
lemma le_dim_iff_exists_linear_independent {c : cardinal} :
1084
1094
c ≤ module.rank K V ↔ ∃ s : set V, cardinal.mk s = c ∧ linear_independent K (coe : s → V) :=
1085
1095
begin
0 commit comments