@@ -1154,6 +1154,81 @@ ext $ λ x, by simp [mem_pi]
1154
1154
(eq_bot_iff_forall _).mpr $ λ p hp,
1155
1155
by { simp only [mem_pi, mem_bot] at *, ext j, exact hp j trivial, }
1156
1156
1157
+ @[to_additive]
1158
+ lemma le_pi_iff {I : set η} {H : Π i, subgroup (f i)} {J : subgroup (Π i, f i)} :
1159
+ J ≤ pi I H ↔ (∀ i : η , i ∈ I → map (pi.eval_monoid_hom f i) J ≤ H i) :=
1160
+ begin
1161
+ split,
1162
+ { intros h i hi, rintros _ ⟨x, hx, rfl⟩, exact (h hx) _ hi, },
1163
+ { intros h x hx i hi, refine h i hi ⟨_, hx, rfl⟩, }
1164
+ end
1165
+
1166
+ @[simp]
1167
+ lemma single_mem_pi [decidable_eq η] {I : set η} {H : Π i, subgroup (f i)}
1168
+ (i : η) (x : f i) :
1169
+ monoid_hom.single f i x ∈ pi I H ↔ (i ∈ I → x ∈ H i) :=
1170
+ begin
1171
+ split,
1172
+ { intros h hi, simpa using h i hi, },
1173
+ { intros h j hj,
1174
+ by_cases heq : j = i,
1175
+ { subst heq, simpa using h hj, },
1176
+ { simp [heq, one_mem], }, }
1177
+ end
1178
+
1179
+ lemma pi_mem_of_single_mem_aux [decidable_eq η] (I : finset η) {H : subgroup (Π i, f i) }
1180
+ (x : Π i, f i) (h1 : ∀ i, i ∉ I → x i = 1 ) (h2 : ∀ i, i ∈ I → pi.mul_single i (x i) ∈ H ) :
1181
+ x ∈ H :=
1182
+ begin
1183
+ induction I using finset.induction_on with i I hnmem ih generalizing x,
1184
+ { have : x = 1 ,
1185
+ { ext i, refine (h1 i (not_mem_empty i)), },
1186
+ simp [this , one_mem], },
1187
+ { have : x = function.update x i 1 * pi.mul_single i (x i),
1188
+ { ext j,
1189
+ by_cases heq : j = i,
1190
+ { subst heq, simp, },
1191
+ { simp [heq], }, },
1192
+ rw this , clear this ,
1193
+ apply mul_mem,
1194
+ { apply ih; clear ih,
1195
+ { intros j hj,
1196
+ by_cases heq : j = i,
1197
+ { subst heq, simp, },
1198
+ { simp [heq], apply h1 j, simpa [heq] using hj, } },
1199
+ { intros j hj,
1200
+ have : j ≠ i, by { rintro rfl, contradiction },
1201
+ simp [this ],
1202
+ exact h2 _ (finset.mem_insert_of_mem hj), }, },
1203
+ { apply h2, simp, } }
1204
+ end
1205
+
1206
+ lemma pi_mem_of_single_mem [fintype η] [decidable_eq η] {H : subgroup (Π i, f i) } (x : Π i, f i)
1207
+ (h : ∀ i, pi.mul_single i (x i) ∈ H) : x ∈ H :=
1208
+ pi_mem_of_single_mem_aux finset.univ x (by simp) (λ i _, h i)
1209
+
1210
+ /-- For finite index types, the `subgroup.pi` is generated by the embeddings of the groups. -/
1211
+ lemma pi_le_iff [decidable_eq η] [fintype η] {H : Π i, subgroup (f i)} {J : subgroup (Π i, f i)} :
1212
+ pi univ H ≤ J ↔ (∀ i : η, map (monoid_hom.single f i) (H i) ≤ J) :=
1213
+ begin
1214
+ split,
1215
+ { rintros h i _ ⟨x, hx, rfl⟩, apply h, simpa using hx },
1216
+ { exact λ h x hx, pi_mem_of_single_mem x (λ i, h i (mem_map_of_mem _ (hx i trivial))), }
1217
+ end
1218
+
1219
+ lemma pi_eq_bot_iff (H : Π i, subgroup (f i)) :
1220
+ pi set.univ H = ⊥ ↔ ∀ i, H i = ⊥ :=
1221
+ begin
1222
+ classical,
1223
+ simp only [eq_bot_iff_forall],
1224
+ split,
1225
+ { intros h i x hx,
1226
+ have : monoid_hom.single f i x = 1 :=
1227
+ h (monoid_hom.single f i x) ((single_mem_pi i x).mpr (λ _, hx)),
1228
+ simpa using congr_fun this i, },
1229
+ { exact λ h x hx, funext (λ i, h _ _ (hx i trivial)), },
1230
+ end
1231
+
1157
1232
end pi
1158
1233
1159
1234
/-- A subgroup is normal if whenever `n ∈ H`, then `g * n * g⁻¹ ∈ H` for every `g : G` -/
0 commit comments