Moufang 루프 계산


17

루프는 매우 간단한 대수 구조입니다. 또한 튜플 (G, +) G가 세트이며 + 이진 연산자 G × G → G . 즉, +G 에서 두 개의 요소를 가져 와서 새 요소를 반환합니다. 운영자는 두 가지 특성을 충족해야합니다.

  • 취소 : 모든 내용 및 BG 고유 존재 XYG 되도록을

    a + x = b
    y + a = b
    
  • 신원 일 :이 전자G 등 그 모든에 대한 에서 G

    e + a = a
    a + e = a
    

그룹의 개념에 익숙하다면 루프는 연관 속성이없는 그룹 일뿐입니다.

루프는 매우 간단하여 사람들이 더 흥미로운 규칙을 추가하여 더 흥미로운 새 구조를 만드는 것을 좋아합니다. 이러한 구조 중 하나는 Moufang 루프 로 , G의 모든 x , yz 에 대해 다음 네 가지 ID를 만족시키는 루프입니다.

z + (x + (z + y)) = ((z + x) + z) + y
((y + z) + x) + z = y + (z + (x + z))
(z + x) + (y + z) = (z + (x + y)) + z
(z + x) + (y + z) = z + ((x + y) + z)

예를 들어 다음 Cayley 테이블은 Moufang 루프를 나타냅니다.

0  1  2  3
1  0  3  2
2  3  0  1
3  2  1  0

(Cyley 테이블에 익숙하지 않은 경우 M i, ji + j와 같은 정사각 행렬 M 입니다. 집합에서 이진 연산자를 나타내는 편리한 방법입니다.)

우리는 오히려 쉽게 정체성이 있음을 보여줄 수있다 0. 취소는 표시하기가 조금 어렵지만 무차별 대입 방식으로이 테이블을 생성합니다.

b a → 0 1 2 3
↓
0     0 1 2 3
1     1 0 3 2
2     2 3 0 1
3     3 2 1 0

우리의 요소가 해결책이되는 곳

a + x = b = x + a

(이 테이블이 Cayley 테이블과 동일하다는 것을 알 수 있습니다.이 Moufang 루프의 경우를 이해하기 위해 독자에게 연습용으로 남겨 두겠습니다)

이제 우리 구조에 대한 Moufang의 정체성을 확인해야합니다. 특정 구조에 대해이 작업을 수행하는 두 가지 방법이 있는데, 첫 번째 방법은 연관성이 있고 자동으로 기준을 충족한다는 것을 인식하는 것입니다. 그러나 이것은 일반적으로 작동하지 않으므로 결과를 무차별하게 적용 할 수 있습니다. 여기에는 모든 표현에 4 개의 값이있는 3 개의 자유 변수가 있습니다. 즉, 7 * 4 3 또는 448 계산 을 수행해야합니다 . 나는 원시 계산을 생략 할 것이지만 여기에 이것을 확인하는 데 사용할 수있는 Haskell이 있습니다 .

직무

입력 출력으로 양의 정수 n이 주어지면 차수 n 인 Moufang 루프의 수입니다 . (그룹의 순서는 세트의 크기입니다)

이것은 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.

테스트 사례

처음 71 개 입력에 대한 Moufang 루프 수는 다음과 같습니다.

1,1,1,2,1,2,1,5,2,2,1,6,1,2,1,19,1,5,1,6,2,2,1,20,2,2,5,5,1,4,1,122,1,2,1,18,1,2,2,19,1,7,1,5,2,2,1,103,2,5,1,6,1,17,2,17,2,2,1,18,1,2,4,4529,1,4,1,6,1,4,1

1
" G × G " 는 무엇입니까 ?
아웃 골퍼 에릭

8
관련된 수학이 매우 솜털이어서이 도전을 읽는 모든 사람이 접근 할 수 없기 때문에이 도전에 대해 찬성했습니다. 아마도 예제가 도움이 될 것입니다 (8 번째 입력 결과가 5 인 이유를 설명하는 것처럼)? 하나를 추가하면 내 투표를 철회 할 것입니다. 물론 그것은 귀하에게 달려 있습니다.

6
@ IanGödel 솜털의 의미가 무엇인지 설명해 주시겠습니까? 확실히 고급 수학 주제이지만 PPCG의 수학에서 멀어 질 것이라고 생각하지 않습니다. Moufang 루프의 예제를 추가 하겠지만 전체 입력을 직접 계산하면 문제가 복잡해질 수 있습니다.
Post Rock Garf Hunter

2
@WheatWizard "Fluffy", 아마도 "Advanced". 편집 : 나는 downvote를 철회했지만 여전히 예제를 기다리고 있습니다.

1
그것의 당신을 수정할 때 @Giuseppe 할 일이 너무 기분 나빠하지, 나 또한 실수를 12하지 11. 나는 11소수 이기 때문에 깨달았습니다 .
Post Rock Garf Hunter

답변:


4

파이썬 3 , 475410 바이트

바이트를 절약 해 준 Mr.Xcoder에게 감사합니다!

수식의 대칭을 사용하여 65 바이트를 절약하십시오. 그렇습니다.

from itertools import*
n=int(input())
P=permutations
R=[*range(n)]
u=[]
A=all
S=sorted
for T in P(P(R),n):u+=[T]*(A(A(R==S(x)for x in
t)and any([*x]==S(x)for x in t)and
A(t[z][t[x][t[z][y]]]==t[t[t[z][x]][z]][y]and
t[t[z][x]][t[y][z]]==t[t[z][t[x][y]]][z]for x in R
for y in R for z in R)for t
in(T,[*zip(*T)]))and A(A(1-A(p[T[i][j]]==U[p[i]][p[j]]for i in R
for j in R)for p in P(R))for U in u))
print(len(u))

온라인으로 사용해보십시오!


일부 and는로 대체되어 *바이트 수는 줄어들지 만 실행 시간이 상당히 느려집니다.

파이썬 3 , ??? 바이트

[TODO는 여기에 코드를 넣습니다]

(물론 *프로그램이 크게 느려지는 것은 아니며 일부만 중요합니다)


언 골프 드 :

from itertools import *
n = 4 # int(input())
rangeN = list(range(n))

def is_moufang_loop(T):
    A = tuple(zip(*T))
    return all(
        all(sorted(x) == rangeN for x in t)
        and any(list(x) == sorted(x) for x in t)
        and all(
                T[z][T[x][T[z][y]]] == T[T[T[z][x]][z]][y]
            and T[T[z][x]][T[y][z]] == T[T[z][T[x][y]]][z]
            for x in rangeN for y in rangeN for z in rangeN)
        for t in (T, A)
    )

def isomorphic(loop1, loop2):
    for p in permutations(rangeN):
        if all(
            p[loop1[i][j]] == loop2[p[i]][p[j]]
            for i in rangeN
            for j in rangeN
        ): return True
    return False

unique_moufang_loops = []
for x in [
        cayley_table 
        for cayley_table in permutations(permutations(rangeN), n)
        if is_moufang_loop(cayley_table)
]:
    if all(not isomorphic(x, y) for y in unique_moufang_loops):
        unique_moufang_loops.append(x)

print(len(unique_moufang_loops))

온라인으로 사용해보십시오!

스크롤 바가 없습니다 ...


설명:

이 프로그램은 매우 간단합니다.

  • 가능한 각 "이진 연산자"는 Cayley 테이블 (0- 인덱싱)로 표시됩니다.
  • "identity"속성 ee'번째 행과 e'번째 열이 모두 같 [0, 1, 2, ..., n-1]으며 이는 동일한 조건입니다.

    배열 T과 그 전치 행의 행은 모두 같습니다 [0, 1, 2, ..., n-1].

  • "취소"특성은 다음과 같습니다.

    모든 행과 모든 열은 순열입니다 [0, 1, 2, ..., n-1].

그래서 부분

all(
        all(sorted(x) == rangeN for x in t) 
        and any(list(x) == sorted(x) for x in t) 
        for t in (T, A))

코드 중 그것을 확인합니다. (어레이의 모든 행에 대해 T그 트랜스 A그것은 같다 정렬되고 rangeN, 양쪽의 행이 존재 T하고 A자신에게 해당되는 정렬 등호)

Moufang 루프의 4 가지 조건은 수동으로 점검됩니다.

z + (x + (z + y)) = ((z + x) + z) + y
((y + z) + x) + z = y + (z + (x + z))
(z + x) + (y + z) = (z + (x + y)) + z
(z + x) + (y + z) = z + ((x + y) + z)

코드에서는 (a + b)로 표시됩니다 T[a][b]. (Cayley 테이블로 표시되기 때문에). 의 중복을 피하기 위해 Python chaining equality 비교를 사용하십시오 (z + x) + (y + z).

그러나 수식이 대칭이기 때문에 :

+첫 번째 수식에서 피연산자를 전환 하면 두 번째 수식을 얻습니다. 우리의 피연산자를 전환하는 경우와 +세 번째 수식에서, 우리는와 넷째 화학식 얻을 xy교환 장소.

Cayley 테이블의 조옮김은 피연산자가 교체 된 이항 연산자와 같습니다. ( x + y -> y + x)

마지막으로, 모든 후보 Cayley 테이블은

permutations(permutations(rangeN), n) 

각각의 행의 순열 있음 rangeN(인 [0, 1, 2, ..., n-1])하고있다 n별개 행.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.