Tìm số nhóm con của một nhóm hữu hạn


14

Các định nghĩa

Bạn có thể bỏ qua phần này nếu bạn đã biết định nghĩa của các nhóm , nhóm hữu hạnnhóm phụ .

Các nhóm

Trong đại số trừu tượng, một nhóm là một tuple (G, *) , nơi G là một tập hợp và * là một hàm G × G → G như vậy mà sau giữ:

  • Đóng cửa: cho tất cả x, y trong G , x * y cũng nằm trong G (ngụ ý bởi thực tế là * là một hàm G × G → G ).

  • Associativity: với mọi x, y, z trong G , (x ∗ y) ∗ z = x ∗ (y ∗ z) .

  • Danh tính: tồn tại một phần tử e trong G sao cho với mọi x trong G , x ∗ e = x = e x .

  • Nghịch đảo: với mỗi x trong G , tồn tại một phần tử y trong G sao cho x ∗ y = e = y ∗ x , trong đó e là phần tử nhận dạng được đề cập trong dấu đầu dòng trước đó.

Nhóm hữu hạn

Một nhóm hữu hạn là một nhóm (G,) trong đó G là hữu hạn, tức là có nhiều yếu tố hữu hạn.

Phân nhóm

Một nhóm con (H, ∗) của một nhóm (G,) sao cho H là tập con của G (không nhất thiết là tập con đúng) và (H,) cũng là một nhóm (tức là thỏa mãn 4 tiêu chí trên).

Ví dụ

Hãy xem xét các nhóm nhị diện D 3 (G, *) nơi G = {1, A, B, C, D, E}* được định nghĩa dưới đây (một bảng như thế này được gọi là một bảng Cayley ):

∗ | 1 ABCDE
- + ----------------------
1 | 1 ABCDE
Một | AB 1 tháng 12
B | B 1 AECD
C | CED 1 BA
D | DCEA 1 B
E | BẠC 1

Trong nhóm này, danh tính là 1 . Ngoài ra, AB là nghịch đảo của nhau, trong khi 1 , C , DE lần lượt là nghịch đảo của chúng (nghịch đảo của 11 , nghịch đảo của CC , nghịch đảo của DD và nghịch đảo của EE ).

Bây giờ, chúng ta có thể xác minh rằng (H,) trong đó H = {1, A, B} là một nhóm con của (G,) . Đối với việc đóng cửa, tham khảo bảng dưới đây:

∗ | 1 AB
- + ----------
1 | 1 AB
Một | AB 1
B | B 1 A

nơi tất cả các cặp có thể có của các yếu tố trong H dưới * cung cấp cho một thành viên trong H .

Các associativity không yêu cầu kiểm tra, vì các yếu tố của H là những yếu tố của G .

Danh tính là 1 . Điều này phải giống với danh tính nhóm. Ngoài ra, danh tính trong một nhóm phải là duy nhất. (Bạn có thể chứng minh điều này?)

Đối nghịch đảo, kiểm tra xem các nghịch đảo của AB , mà là một thành viên của H . Nghịch đảo của BMột , cũng là một thành viên của H . Nghịch đảo của 1 vẫn là chính nó, không cần kiểm tra.


Bài tập

Sự miêu tả

Cho một nhóm hữu hạn (G, ∗) , tìm số nhóm con của nó.

Đầu vào

Đối với một nhóm (G, *) , bạn sẽ nhận được một mảng 2D kích thước n × n , nơi n là số phần tử trong G . Giả sử chỉ số đó 0là yếu tố nhận dạng. Mảng 2D sẽ đại diện cho bảng nhân. Ví dụ: đối với nhóm ở trên, bạn sẽ nhận được mảng 2D sau:

[[0, 1, 2, 3, 4, 5],
[1, 2, 0, 4, 5, 3],
[2, 0, 1, 5, 3, 4],
[3, 5, 4, 0, 2, 1],
[4, 3, 5, 1, 0, 2],
[5, 4, 3, 2, 1, 0]]

Ví dụ: bạn có thể thấy rằng 3 1 = 5 bởi vì a[3][1] = 5, amảng 2D ở trên.

Ghi chú:

  • Bạn có thể sử dụng mảng 2D 1 chỉ mục.
  • Hàng và cột cho danh tính có thể được bỏ qua.
  • Bạn có thể sử dụng các định dạng khác khi bạn thấy phù hợp, nhưng nó phải nhất quán. (tức là bạn có thể muốn chỉ mục cuối cùng là danh tính, v.v.)

Đầu ra

Một số dương biểu thị số lượng nhóm con trong nhóm.

Ví dụ: đối với nhóm ở trên, (H,) là nhóm con của (G,) bất cứ khi nào H =

  • {1}
  • {1, A, B}
  • {1, C}
  • {1, D}
  • {1, E}
  • {1, A, B, C, D, E}

Do đó, có 6 nhóm con và đầu ra của bạn cho ví dụ này là 6.


Gợi ý

Bạn có thể đọc các bài viết mà tôi liên kết đến. Những bài viết này chứa các định lý về các nhóm và các nhóm con có thể hữu ích cho bạn.


Chấm điểm

Đây là . Trả lời với chiến thắng đếm byte thấp nhất.


Ồ, điều đó không rõ ràng với tôi, e đặc biệt đề cập đến yếu tố nhận dạng, không chỉ bất kỳ kết quả trung gian nào.
orlp

@orlp làm rõ.
Leaky Nun

Nếu bạn định gọi 0phần tử nhận dạng, thì thật khó hiểu khi toán tử được mô tả là nhân ...
Neil

@Neil eh ... khi hội nghị đụng độ.
Leaky Nun

1
Tôi giả sử các phần tử trong danh sách 2D giống hệt với các chỉ số của các hàng / cột của chúng, nếu không bạn thậm chí sẽ xác định hàng / cột nào đi với cái nào?
Ørjan Johansen

Câu trả lời:


8

Toán học, 62 48 byte

Count[Subsets@First@#,x_/;Union@@#[[x,x]]==x]-1&

Hàm thuần túy mong đợi một mảng 2D 1 chỉ mục. Counts số lượng Subsetscủa Firsthàng của mảng đầu vào được đóng dưới sự hoạt động nhóm. Vì điều này sẽ bao gồm các tập hợp trống, chúng tôi trừ 1. Lưu ý rằng một tập hợp con không trống của một nhóm hữu hạn được đóng trong hoạt động nhóm trên thực tế là một nhóm con , (và ngược lại, theo định nghĩa).

Nói đúng ra tôi không kiểm tra xem tập hợp con xcó bị đóng trong hoạt động nhóm không, tôi giới hạn bảng nhân cho tập hợp con xvà kiểm tra xem nó có chứa chính xác các phần tử của không x. Rõ ràng điều này ngụ ý rằng nó xđược đóng lại đối với hoạt động nhóm. Ngược lại, bất kỳ nhóm con nào xcũng sẽ chứa 1và do đó xsẽ là một tập hợp con của các phần tử xuất hiện trong bảng nhân bị hạn chế và do xđược đóng dưới hoạt động của nhóm, nên nó phải bằng nhau x.


4

Haskell , 79 byte

Về cơ bản là một cổng của phương pháp Mathicala của ngenisis. (Ngoại trừ tôi đang sử dụng mảng 0 chỉ mục.)

clấy một danh sách các danh sách của Ints và trả về một số nguyên.

c g=sum[1|l<-foldr(\r->([id,(r!!0:)]<*>))[[]]g,and[g!!x!!y`elem`l|x<-l,y<-l]]-1

Hãy thử trực tuyến!

Giả định rằng các Ints được đánh số giống như các hàng (danh sách bên ngoài) và các cột hiển thị phép nhân của chúng. Do đó, vì 0 là danh tính, cột đầu tiên giống như các chỉ số của các hàng. Điều này cho phép sử dụng các mục của cột đầu tiên để xây dựng các tập hợp con.

Làm thế nào nó hoạt động

  • c là chức năng chính.
  • g là mảng nhóm như một danh sách các danh sách.
  • llà tập hợp con của các phần tử. Danh sách các tập hợp con được xây dựng như sau:
    • foldr(\r->([id,(r!!0:)]<*>))[[]]ggấp một hàm trên các hàng của g.
    • rlà một hàng của gphần tử đầu tiên (0th) được trích xuất dưới dạng phần tử có thể được bao gồm ( (r!!0:)) hoặc không ( id).
    • <*> kết hợp các lựa chọn cho hàng này với những cái sau.
  • and[g!!x!!y`elem`l|x<-l,y<-l]kiểm tra cho từng cặp yếu tố trong lviệc nhiều của chúng là trong l.
  • sum[1|...]-1 đếm các tập con vượt qua bài kiểm tra, ngoại trừ một tập hợp con trống.

3

Thạch , 17 16 byte

1 byte nhờ vào ETHproductions ( LR → J)

ị³Z⁸ịFḟ
JŒPÇÐḟL’

JŒPÇÐḟL’  main link. one argument (2D array)
J         [1,2,3,...,length of argument]
 ŒP       power set of ^
    Ðḟ    throw away elements that pass the test...
   Ç      in the helper link
      L   length (number of elements that do not pass)
       ’  decrement (the empty set is still closed under
          multiplication, but it is not a subgroup, as
          the identity element does not exist.)

ị³Z⁸ịFḟ   helper link. one argument (1D indexing array)
ị³        elements at required indices of program input (2D array)
  Z       transpose
   ⁸ị     elements at required indices of ^
     F    flatten
      ḟ   remove elements of ^ that are in the argument given
          if the set is closed under multiplication, this will
          result in an empty set, which is considered falsey.

Hãy thử trực tuyến! (1 chỉ mục)


Bạn có thể làm Jthay vì LRđể lưu một byte :-)
ETHproductions

@ETHproductions wow, cảm ơn vì đã phát hiện ra điều đó.
Leaky Nun

3

Python 2, 297 215 byte

from itertools import*
T=input()
G=T[0]
print sum(all(T[y][x]in g for x,y in product(g,g))*all(any(T[y][x]==G[0]==T[x][y]for y in g)for x in g)*(G[0]in g)for g in chain(*[combinations(G,n)for n in range(len(G)+1)]))

Dùng thử trực tuyến

Chương trình này hoạt động cho nhóm ví dụ mà không có ==T[x][y], nhưng tôi vẫn khá chắc chắn rằng nó cần thiết.

Chỉnh sửa: Bây giờ giả sử rằng phần tử nhận dạng của G luôn là đầu tiên.


Ung dung:

from itertools import*
T=input()
G=T[0]
def f(x,y):return T[y][x]                                           # function
def C(g):return all(f(x,y)in g for x,y in product(g,g))             # closure
def E(g):return[all(f(x,y)==y for y in g)for x in g]                # identity

a=E(G)
e=any(a)
e=G[a.index(1)]if e else-1                                          # e in G

def I(G):return all(any(f(x,y)==e==f(y,x)for y in G)for x in G)     # inverse

#print e
#print C(G),any(E(G)),I(G)

#for g in chain(*[combinations(G,n)for n in range(len(G)+1)]):      # print all subgroups
#   if C(g)and I(g)and e in g:print g

print sum(C(g)*I(g)*(e in g)for g in chain(*[combinations(G,n)for n in range(len(G)+1)]))

TIO bị đánh cắp

Các yếu tố nhóm tiêu cực có thể được hỗ trợ miễn phí bằng cách thay đổi -1thành ''.


Tại sao bạn kiểm tra danh tính? Danh tính được đảm bảo là yếu tố đầu tiên. Chỉ cần thực hiện tất cả các kết hợp mà không có phần tử đầu tiên và thêm phần tử đầu tiên vào mỗi kết hợp.
orlp

"Giả sử rằng 0 là yếu tố nhận dạng."
orlp

Vâng, nhưng điều đó không có nghĩa là nó đầu tiên trong danh sách. Tôi nghĩ rằng nó đang nói về con số 0cho ví dụ, không phải chỉ số.
mbomb007

@ mbomb007 rõ ràng là chỉ số
Leaky Nun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.