import numpy as np

# Узлы (32 узла для "Логической лампы")
nodes = [
    "T", "AT", "S",  # Тезис, Антитезис, Синтез
    "A1", "A2", "A3", "A4",  # Логические вершины квадрата оппозиции
    "M1", "M2", "M3", "M4",  # Модальные вершины
    "P1", "P2", "P3", "P4",  # Вероятностные вершины
    # Дополнительные вершины (всего 32, добавляем по необходимости)
]

# Матрица смежности (32x32) для связей
# Пример: T -> S, T -> A1, AT -> S, ...
adj_matrix = np.zeros((32, 32))

# Установим связи (1 = связь существует)
# Пример: Тезис связан с синтезом, и так далее
adj_matrix[0, 2] = 1  # T -> S
adj_matrix[1, 2] = 1  # AT -> S
adj_matrix[0, 3] = 1  # T -> A1
adj_matrix[1, 4] = 1  # AT -> A2

# Задаем начальные значения узлов (1 = истина, 0 = ложь)
values = np.zeros(32)
values[0] = 1  # Тезис истинный
values[1] = 0  # Антитезис ложный

# Логические правила
def calculate_values(adj_matrix, values):
    new_values = values.copy()
    for i in range(len(values)):
        for j in range(len(values)):
            if adj_matrix[i, j] == 1:  # Есть связь
                if values[i] == 1:  # Пример: Истинный узел влияет на связанный
                    new_values[j] = 1  # Применяем правило
                elif values[i] == 0:  # Пример: Ложный узел влияет
                    new_values[j] = 0  # Применяем правило
    return new_values

# Итеративный расчет до стабилизации
prev_values = values
while True:
    new_values = calculate_values(adj_matrix, prev_values)
    if np.array_equal(new_values, prev_values):
        break
    prev_values = new_values

# Вывод финальных значений
result = {nodes[i]: new_values[i] for i in range(len(nodes))}
result