@@ -264,6 +264,11 @@ subset.antisymm
264
264
(by simp [set.subset_def, is_submonoid.one_mem])
265
265
(group.closure_subset $ by simp)
266
266
267
+ lemma eq_trivial_iff {H : set α} [is_subgroup H] :
268
+ H = trivial α ↔ (∀ x ∈ H, x = (1 : α)) :=
269
+ by simp only [set.ext_iff, is_subgroup.mem_trivial];
270
+ exact ⟨λ h x, (h x).1 , λ h x, ⟨h x, λ hx, hx.symm ▸ is_submonoid.one_mem H⟩⟩
271
+
267
272
instance univ_subgroup : normal_subgroup (@univ α) :=
268
273
by refine {..}; simp
269
274
@@ -327,6 +332,8 @@ attribute [to_additive is_add_subgroup.trivial_normal] is_subgroup.trivial_norma
327
332
328
333
attribute [to_additive is_add_subgroup.trivial_eq_closure] is_subgroup.trivial_eq_closure
329
334
335
+ attribute [to_additive is_add_subgroup.eq_trivial_iff] is_subgroup.eq_trivial_iff
336
+
330
337
instance univ_add_subgroup : normal_add_subgroup (@univ α) :=
331
338
multiplicative.normal_subgroup_iff.1 is_subgroup.univ_subgroup
332
339
attribute [to_additive is_add_subgroup.univ_add_subgroup] is_subgroup.univ_subgroup
@@ -438,3 +445,54 @@ instance (s : set α) [is_subgroup s] : is_group_hom (subtype.val : s → α) :=
438
445
⟨λ _ _, rfl⟩
439
446
440
447
end is_group_hom
448
+
449
+ section simple_group
450
+
451
+ class simple_group (α : Type *) [group α] : Prop :=
452
+ (simple : ∀ (N : set α) [normal_subgroup N], N = is_subgroup.trivial α ∨ N = set.univ)
453
+
454
+ class simple_add_group (α : Type *) [add_group α] : Prop :=
455
+ (simple : ∀ (N : set α) [normal_add_subgroup N], N = is_add_subgroup.trivial α ∨ N = set.univ)
456
+
457
+ attribute [to_additive simple_add_group] simple_group
458
+
459
+ theorem additive.simple_add_group_iff [group α] :
460
+ simple_add_group (additive α) ↔ simple_group α :=
461
+ ⟨λ hs, ⟨λ N h, @simple_add_group.simple _ _ hs _ (by exactI additive.normal_add_subgroup_iff.2 h)⟩,
462
+ λ hs, ⟨λ N h, @simple_group.simple _ _ hs _ (by exactI additive.normal_add_subgroup_iff.1 h)⟩⟩
463
+
464
+ instance additive.simple_add_group [group α] [simple_group α] :
465
+ simple_add_group (additive α) := additive.simple_add_group_iff.2 (by apply_instance)
466
+
467
+ theorem multiplicative.simple_group_iff [add_group α] :
468
+ simple_group (multiplicative α) ↔ simple_add_group α :=
469
+ ⟨λ hs, ⟨λ N h, @simple_group.simple _ _ hs _ (by exactI multiplicative.normal_subgroup_iff.2 h)⟩,
470
+ λ hs, ⟨λ N h, @simple_add_group.simple _ _ hs _ (by exactI multiplicative.normal_subgroup_iff.1 h)⟩⟩
471
+
472
+ instance multiplicative.simple_group [add_group α] [simple_add_group α] :
473
+ simple_group (multiplicative α) := multiplicative.simple_group_iff.2 (by apply_instance)
474
+
475
+ lemma simple_group_of_surjective [group α] [group β] [simple_group α] (f : α → β)
476
+ [is_group_hom f] (hf : function.surjective f) : simple_group β :=
477
+ ⟨λ H iH, have normal_subgroup (f ⁻¹' H), by resetI; apply_instance,
478
+ begin
479
+ resetI,
480
+ cases simple_group.simple (f ⁻¹' H) with h h,
481
+ { refine or.inl (is_subgroup.eq_trivial_iff.2 (λ x hx, _)),
482
+ cases hf x with y hy,
483
+ rw ← hy at hx,
484
+ rw [← hy, is_subgroup.eq_trivial_iff.1 h y hx, is_group_hom.one f] },
485
+ { refine or.inr (set.eq_univ_of_forall (λ x, _)),
486
+ cases hf x with y hy,
487
+ rw set.eq_univ_iff_forall at h,
488
+ rw ← hy,
489
+ exact h y }
490
+ end ⟩
491
+
492
+ lemma simple_add_group_of_surjective [add_group α] [add_group β] [simple_add_group α] (f : α → β)
493
+ [is_add_group_hom f] (hf : function.surjective f) : simple_add_group β :=
494
+ multiplicative.simple_group_iff.1 (@simple_group_of_surjective (multiplicative α) (multiplicative β) _ _ _ f _ hf)
495
+
496
+ attribute [to_additive simple_add_group_of_surjective] simple_group_of_surjective
497
+
498
+ end simple_group
0 commit comments