Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit ec18563

Browse files
committed
feat(group_theory): add subtype instanes for group and monoid; monoid closure
1 parent 88960f0 commit ec18563

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

group_theory/subgroup.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ variable [group α]
3535
class is_subgroup [group α] (s : set α) extends is_submonoid s :=
3636
(inv_mem {a} : a ∈ s → a⁻¹ ∈ s)
3737

38+
instance subtype.group {s : set α} [is_subgroup s] : group s :=
39+
{ inv := λa, ⟨(a.1)⁻¹, is_subgroup.inv_mem a.2⟩,
40+
mul_left_inv := assume ⟨a, _⟩, subtype.eq $ mul_left_inv _,
41+
.. subtype.monoid }
42+
3843
theorem is_subgroup.of_div [group α] (s : set α)
3944
(one_mem : (1:α) ∈ s) (div_mem : ∀{a b:α}, a ∈ s → b ∈ s → a * b⁻¹ ∈ s):
4045
is_subgroup s :=

group_theory/submonoid.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,24 @@ lemma is_submonoid.pow_mem {a : α} {s : set α} [is_submonoid s] (h : a ∈ s)
2525
| (n + 1) := is_submonoid.mul_mem h is_submonoid.pow_mem
2626

2727
end powers
28+
29+
instance subtype.monoid {s : set α} [is_submonoid s] : monoid s :=
30+
{ mul := λa b : s, ⟨a * b, is_submonoid.mul_mem a.2 b.2⟩,
31+
one := ⟨1, is_submonoid.one_mem s⟩,
32+
mul_assoc := assume ⟨a, _⟩ ⟨b, _⟩ ⟨c, _⟩, subtype.eq $ mul_assoc _ _ _,
33+
one_mul := assume ⟨a, _⟩, subtype.eq $ one_mul _,
34+
mul_one := assume ⟨a, _⟩, subtype.eq $ mul_one _ }
35+
36+
namespace monoid
37+
38+
inductive in_closure (s : set α) : α → Prop
39+
| mem {a : α} : a ∈ s → in_closure a
40+
| one : in_closure 1
41+
| mul {a b : α} : in_closure a → in_closure b → in_closure (a * b)
42+
43+
def closure (s : set α) : set α := {a | in_closure s a }
44+
45+
lemma is_submonoid_closure (s : set α) : is_submonoid (closure s) :=
46+
{ one_mem := in_closure.one s, mul_mem := assume a b, in_closure.mul }
47+
48+
end monoid

0 commit comments

Comments
 (0)