Скилы по упрощению логических выражений пусть лучше лошадь развивает, у неё голова большая )))
Но раз уж тебе так приспичило - вот тренажер:
from random import choice
def scheme(n, m):
"""
:param n: число входных аргументов, не более 26 (a..z)
:param m: число логических операций, фигачь сколько влезет
:return: строка с логическим выражением для упрощения
"""
l, s = list('abcdefghijklmnopqrstuvwxyz'[:n]), ''
while s.count('(') < m:
op = choice(('not', 'and', 'or', '^'))
s = f'(not {choice(l)})' if op == 'not' else f'({choice(l)} {op} {choice(l)})'
l.append(s)
return s
print(scheme(5, 10))
Вот проверялка, никакой обработки ошибок, всё по хардкору - извини:
import re
from itertools import product
def check(task, solution):
"""
:param task: строка задачи
:param solution: строка решения
:return: эквивалентны ли они (bool)
"""
args = sorted(set(re.findall(r'\b[a-z]\b', task)))
chk = compile(f'({task})==({solution})', '<string>', 'eval')
return all(eval(chk, {}, dict(zip(args, bulls)))
for bulls in product((False, True), repeat=len(args)))
print(check('a and (b or not b)', 'a'))
print(check('a and (b or not b)', 'a ^ b'))
Не забудь рассказать об успехах.