@@ -78,6 +78,24 @@ lemma le_of_fin_injective [strong_rank_condition R] {n m : ℕ} (f : (fin n →
78
78
injective f → n ≤ m :=
79
79
strong_rank_condition.le_of_fin_injective f
80
80
81
+ lemma card_le_of_injective [strong_rank_condition R] {α β : Type *} [fintype α] [fintype β]
82
+ (f : (α → R) →ₗ[R] (β → R)) (i : injective f) : fintype.card α ≤ fintype.card β :=
83
+ begin
84
+ let P := linear_map.fun_congr_left R R (fintype.equiv_fin α),
85
+ let Q := linear_map.fun_congr_left R R (fintype.equiv_fin β),
86
+ exact le_of_fin_injective R ((Q.symm.to_linear_map.comp f).comp P.to_linear_map)
87
+ (((linear_equiv.symm Q).injective.comp i).comp (linear_equiv.injective P)),
88
+ end
89
+
90
+ lemma card_le_of_injective' [strong_rank_condition R] {α β : Type *} [fintype α] [fintype β]
91
+ (f : (α →₀ R) →ₗ[R] (β →₀ R)) (i : injective f) : fintype.card α ≤ fintype.card β :=
92
+ begin
93
+ let P := (finsupp.linear_equiv_fun_on_fintype R R β),
94
+ let Q := (finsupp.linear_equiv_fun_on_fintype R R α).symm,
95
+ exact card_le_of_injective R ((P.to_linear_map.comp f).comp Q.to_linear_map)
96
+ ((P.injective.comp i).comp Q.injective)
97
+ end
98
+
81
99
/-- We say that `R` satisfies the rank condition if `(fin n → R) →ₗ[R] (fin m → R)` surjective
82
100
implies `m ≤ n`. -/
83
101
class rank_condition : Prop :=
@@ -87,6 +105,24 @@ lemma le_of_fin_surjective [rank_condition R] {n m : ℕ} (f : (fin n → R) →
87
105
surjective f → m ≤ n :=
88
106
rank_condition.le_of_fin_surjective f
89
107
108
+ lemma card_le_of_surjective [rank_condition R] {α β : Type *} [fintype α] [fintype β]
109
+ (f : (α → R) →ₗ[R] (β → R)) (i : surjective f) : fintype.card β ≤ fintype.card α :=
110
+ begin
111
+ let P := linear_map.fun_congr_left R R (fintype.equiv_fin α),
112
+ let Q := linear_map.fun_congr_left R R (fintype.equiv_fin β),
113
+ exact le_of_fin_surjective R ((Q.symm.to_linear_map.comp f).comp P.to_linear_map)
114
+ (((linear_equiv.symm Q).surjective.comp i).comp (linear_equiv.surjective P)),
115
+ end
116
+
117
+ lemma card_le_of_surjective' [rank_condition R] {α β : Type *} [fintype α] [fintype β]
118
+ (f : (α →₀ R) →ₗ[R] (β →₀ R)) (i : surjective f) : fintype.card β ≤ fintype.card α :=
119
+ begin
120
+ let P := (finsupp.linear_equiv_fun_on_fintype R R β),
121
+ let Q := (finsupp.linear_equiv_fun_on_fintype R R α).symm,
122
+ exact card_le_of_surjective R ((P.to_linear_map.comp f).comp Q.to_linear_map)
123
+ ((P.surjective.comp i).comp Q.surjective)
124
+ end
125
+
90
126
/--
91
127
By the universal property for free modules, any surjective map `(fin n → R) →ₗ[R] (fin m → R)`
92
128
has an injective splitting `(fin m → R) →ₗ[R] (fin n → R)`
@@ -117,6 +153,11 @@ variables (R : Type u) [ring R] [invariant_basis_number R]
117
153
lemma eq_of_fin_equiv {n m : ℕ} : ((fin n → R) ≃ₗ[R] (fin m → R)) → n = m :=
118
154
invariant_basis_number.eq_of_fin_equiv
119
155
156
+ lemma card_eq_of_lequiv {α β : Type *} [fintype α] [fintype β]
157
+ (f : (α → R) ≃ₗ[R] (β → R)) : fintype.card α = fintype.card β :=
158
+ eq_of_fin_equiv R (((linear_map.fun_congr_left R R (fintype.equiv_fin α)).trans f).trans
159
+ ((linear_map.fun_congr_left R R (fintype.equiv_fin β)).symm))
160
+
120
161
lemma nontrivial_of_invariant_basis_number : nontrivial R :=
121
162
begin
122
163
by_contra h,
0 commit comments