@@ -113,47 +113,41 @@ theorem normal_iff_eq_cosets : normal_subgroup s ↔ ∀ g, g *l s = s *r g :=
113
113
114
114
end coset_subgroup
115
115
116
- def left_cosets [group α] (s : set α) : set (set α) := range (λa, a *l s)
116
+ instance left_rel [group α] (s : set α) [is_subgroup s] : setoid α :=
117
+ ⟨λ x y, x⁻¹ * y ∈ s,
118
+ assume x, by simp [is_submonoid.one_mem],
119
+ assume x y hxy,
120
+ have (x⁻¹ * y)⁻¹ ∈ s, from is_subgroup.inv_mem hxy,
121
+ by simpa using this ,
122
+ assume x y z hxy hyz,
123
+ have x⁻¹ * y * (y⁻¹ * z) ∈ s, from is_submonoid.mul_mem hxy hyz,
124
+ by simpa [mul_assoc] using this ⟩
125
+
126
+ def left_cosets [group α] (s : set α) [is_subgroup s] : Type * := quotient (left_rel s)
127
+
128
+ instance left_cosets.inhabited [group α] (s : set α) [is_subgroup s] : inhabited (left_cosets s) := ⟨⟦1 ⟧⟩
129
+
130
+ def left_cosets.left_coset [group α] (s : set α) [is_subgroup s] (g : α) : {x | ⟦x⟧ = ⟦g⟧} = left_coset g s :=
131
+ set.ext $ λ z, by simp [eq_comm, mem_left_coset_iff]; refl
117
132
118
133
namespace is_subgroup
119
- open is_submonoid
120
- variable [group α]
121
-
122
- lemma subgroup_mem_left_cosets (s : set α) [is_subgroup s] : s ∈ left_cosets s :=
123
- ⟨1 , by simp⟩
124
-
125
- lemma left_cosets_disjoint {s : set α} [is_subgroup s] :
126
- ∀{s₁ s₂ : set α}, s₁ ∈ left_cosets s → s₂ ∈ left_cosets s → ∀{a}, a ∈ s₁ → a ∈ s₂ → s₁ = s₂
127
- | _ _ ⟨a₁, rfl⟩ ⟨a₂, rfl⟩ a h₁ h₂ :=
128
- have h₁ : a₁⁻¹ * a ∈ s, by simpa [mem_left_coset_iff] using h₁,
129
- have h₂ : a₂⁻¹ * a ∈ s, by simpa [mem_left_coset_iff] using h₂,
130
- have a₁⁻¹ * a₂ ∈ s, by simpa [mul_assoc] using mul_mem h₁ (inv_mem h₂),
131
- have a₁ *l s = a₁ *l ((a₁⁻¹ * a₂) *l s), by rw [left_coset_mem_left_coset _ this ],
132
- by simpa
133
-
134
- lemma pairwise_left_cosets_disjoint {s : set α} (hs : is_subgroup s) :
135
- pairwise_on (left_cosets s) disjoint :=
136
- assume s₁ h₁ s₂ h₂ ne, eq_empty_iff_forall_not_mem.mpr $ assume a ⟨ha₁, ha₂⟩,
137
- ne $ left_cosets_disjoint h₁ h₂ ha₁ ha₂
138
-
139
- lemma left_cosets_equiv_subgroup {s : set α} (hs : is_subgroup s) :
140
- ∀{t : set α}, t ∈ left_cosets s → nonempty (t ≃ s)
141
- | _ ⟨a, rfl⟩ := ⟨(equiv.set.image ((*) a) s injective_mul).symm⟩
142
-
143
- lemma Union_left_cosets_eq_univ {s : set α} (hs : is_subgroup s) : ⋃₀ left_cosets s = univ :=
144
- eq_univ_of_forall $ assume a, ⟨(*) a '' s, mem_range_self _, ⟨1 , hs.one_mem, mul_one _⟩⟩
145
-
146
- lemma group_equiv_left_cosets_times_subgroup {s : set α} (hs : is_subgroup s) :
147
- nonempty (α ≃ (left_cosets s × s)) :=
148
- ⟨calc α ≃ (@set.univ α) :
149
- (equiv.set.univ α).symm
150
- ... ≃ (⋃t∈left_cosets s, t) :
151
- by rw [←hs.Union_left_cosets_eq_univ]; simp
152
- ... ≃ (Σt:left_cosets s, t) :
153
- equiv.set.bUnion_eq_sigma_of_disjoint hs.pairwise_left_cosets_disjoint
154
- ... ≃ (Σt:left_cosets s, s) :
155
- equiv.sigma_congr_right $ λ⟨t, ht⟩, classical.choice $ hs.left_cosets_equiv_subgroup ht
156
- ... ≃ (left_cosets s × s) :
157
- equiv.sigma_equiv_prod _ _⟩
134
+ variables [group α] {s : set α}
135
+
136
+ def left_coset_equiv_subgroup (g : α) : left_coset g s ≃ s :=
137
+ ⟨λ x, ⟨g⁻¹ * x.1 , (mem_left_coset_iff _).1 x.2 ⟩,
138
+ λ x, ⟨g * x.1 , x.1 , x.2 , rfl⟩,
139
+ λ ⟨x, hx⟩, subtype.eq $ by simp,
140
+ λ ⟨g, hg⟩, subtype.eq $ by simp⟩
141
+
142
+ noncomputable def group_equiv_left_cosets_times_subgroup (hs : is_subgroup s) :
143
+ α ≃ (left_cosets s × s) :=
144
+ calc α ≃ Σ L : left_cosets s, {x // ⟦x⟧ = L} :
145
+ equiv.equiv_fib quotient.mk
146
+ ... ≃ Σ L : left_cosets s, left_coset (quotient.out L) s :
147
+ equiv.sigma_congr_right (λ L, by rw ← left_cosets.left_coset; simp)
148
+ ... ≃ Σ L : left_cosets s, s :
149
+ equiv.sigma_congr_right (λ L, left_coset_equiv_subgroup _)
150
+ ... ≃ (left_cosets s × s) :
151
+ equiv.sigma_equiv_prod _ _
158
152
159
153
end is_subgroup
0 commit comments