Как проверить, все ли элементы таблицы умножения ассоциативны?

#python #python-3.x #numpy #associative-array #finite-group-theory

#python #python-3.x #numpy #ассоциативный-массив #теория конечных групп

Вопрос:

Я хочу проверить, не является ли таблица умножения, подобная следующей, кодом, но я не смог найти способ написать ее по-другому

 *  0 1 2
0 |0 1 0
1 |0 0 0 
2 |0 1 1
  

Он хранится в виде списка с подсписками в моем коде, например

 [[0,1,0], [0,0,0], [0,1,1]]

#How to write a function which checks elements satisfy the condition x*(y*z) = (x*y)*z ? 

#This is what I have so far: 

def is_associative(X):
    n = len(X)
    a = []
    for i in range(n):
        a.append[i]
        for j in range(n):
            a[j]*a[j] = X[j]
  

Комментарии:

1. Я не уверен, что понимаю, не x*(y*z) всегда равно (x*y)*z ? Разве * в вашем случае это не умножение?

2. @cglacet На основе таблицы, 1 * 0 == 0 , но 0 * 1 == 1 .

3. Я тоже не уверен, как понимать таблицу, если то, что вы интерпретируете, правильно, то * это действительно не умножение, а что-то другое (произвольная функция, я полагаю?).

4. Это слишком сложно, вам нужно делать это меньшими шагами. (1) Напишите функцию, которая принимает x , y , z и возвращает x*(y*z) . (2) Напишите другую функцию, которая возвращает (x*y)*z . (3) Напишите еще одну функцию, которая вычисляет оба произведения путем вызова предыдущих функций, сравнивает значения и возвращает, равны они или нет.

Ответ №1:

Вы должны перебирать все три переменные:

 for x in range(n):
    for y in range(n):
        for z in range(n):
  

И затем вам нужно проверить, являются ли

 X[X[x, y], z] == X[x, X[y, z]]
  

для всех значений.