Python Sympy bool_map ошибка с xor / xnor? - PullRequest
0 голосов
/ 30 августа 2018

Python3.5 Sympy, кажется, думает, что Xor и Xnor эквивалентны?

Этот код в python3.5:

from sympy import *
A1,A2 = symbols('A1,A2')
f1 = Xor(A1,A2)
f2 = ~(Xor(A1,A2))
print(bool_map(f2,f1))
print(bool_map(f1,f2))

Результаты в этом выводе:

((A1 & A2) | (~A1 & ~A2), {A1: A1, A2: A2})
((A1 & ~A2) | (A2 & ~A1), {A1: A1, A2: A2})

Таким образом, упрощенная логика для f1 и f2 явно различна, но bool_map все еще возвращается, считая допустимым отображение символов для 2 булевых уравнений?

Что я делаю не так?

Редактировать: Это действительно ошибка

Это недостаток отпечатка пальца из 5 предметов _finger:

'''
Assign a 5-item fingerprint to each symbol in the equation:
[
# of times it appeared as a Symbol,
# of times it appeared as a Not(symbol),
# of times it appeared as a Symbol in an And or Or,
# of times it appeared as a Not(Symbol) in an And or Or,
sum of the number of arguments with which it appeared,
counting Symbol as 1 and Not(Symbol) as 2
]
'''
from sympy import *
from sympy.logic.boolalg import _finger
from collections import defaultdict
from pprint import pprint

A1,A2 = symbols('A1,A2')
a = _finger((A1 & A2) | (~A1 & ~A2))
b = _finger((A1 & ~A2) | (~A1 & A2))

pprint(a)
pprint(b)

приводит к идентичным отпечаткам пальцев для A1 и A2:

defaultdict(<class 'list'>, {(0, 0, 1, 1, 6): [A1, A2]})
defaultdict(<class 'list'>, {(0, 0, 1, 1, 6): [A1, A2]})

, поэтому A1 и A2 кажутся взаимозаменяемыми

...