1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
import numpy as np
import itertools as it
def make_subsemigroup():
print("Введите элементы множества:")
elements = input().split()
n = len(elements)
print("Введите элементы подмножества:")
subelements = input().split()
print("Введите значения таблицы Кэли:")
cayley = []
for _ in range(n):
cayley.append(input().split())
cayley = np.array(cayley)
x_i = subelements[:]
while True:
x_l = []
for x in x_i:
for y in subelements:
x_l.append(cayley[elements.index(x)][elements.index(y)])
tmp = list(set(x_i) | set(x_l))
tmp.sort()
if tmp == x_i:
break
x_i = tmp[:]
print("Подполугруппа:")
print(x_i)
def find_correlation(matrices):
result = {}
correlations = {}
for key, value in matrices.items():
if not any(np.array_equal(value, i) for i in result.values()):
result[key] = value
else:
for k, v in result.items():
if np.array_equal(v, value):
correlations[key] = k
print("Копредставления:")
for key, value in result.items():
print(f"{''.join(key)}:")
print(value)
print("Полученные соотношения:")
for key, value in correlations.items():
print(''.join(key), "->", ''.join(value))
def make_semigroup_binrel():
print("Введите элементы множества:")
elements = input().split()
n = len(elements)
print("Введите количество бинарных отношений:")
q = int(input())
matrices = {}
for i in range(q):
print("Введите значения матрицы:")
matrix = []
for _ in range(n):
matrix.append(list(map(int, input().split())))
matrices[str(i + 1)] = np.array(matrix)
combinations = []
for i in range(1, q + 1):
combination = list(it.product(map(str, range(1, q + 1)), repeat=i))
combinations.extend(combination)
for combination in combinations:
matrix = matrices[combination[0]].copy()
word = combination[0]
for comb_i in range(1, len(combination)):
matrix *= matrices[combination[comb_i]]
word += combination[comb_i]
matrices[word] = matrix
find_correlation(matrices)
def make_semigroup():
print("Введите элементы полугруппы:")
elements = input().split()
n = len(elements)
print("Введите элементы множества преобразований:")
generators_list = input().split()
gn = len(generators_list)
translations = []
for i in range(gn):
print(f"Введите значения преобразования '{generators_list[i]}' "
"элементов полугруппы:")
print(*elements)
translations.append(input().split())
combinations = []
for i in range(1, gn + 1):
combinations.extend(it.product(''.join(generators_list), repeat=i))
result = {}
for combination in combinations:
correlation = []
for i in elements:
element = i
for generator in combination:
if element not in elements:
element = '*'
else:
gi = generators_list.index(generator)
si = elements.index(element)
element = translations[gi][si]
correlation.append(element)
result[combination] = correlation
find_correlation(result)
def main():
flag = input("Построить подполугруппу по таблице Кэли? (да/НЕТ) ")
if flag.lower() == "да":
make_subsemigroup()
flag = input("Построить полугруппу бинарных отношений по порождающему "
"множеству? (да/НЕТ) ")
if flag.lower() == "да":
make_semigroup_binrel()
flag = input("Построить полугруппу по порождающему множеству и "
"определяющим соотношениям? (да/НЕТ) ")
if flag.lower() == "да":
make_semigroup()
if __name__ == "__main__":
main()
|