История изменений
Исправление deep-purple, (текущая версия) :
Для ( a+(-b) ) | ( a+(-c) ) = два результата a-b и a-c
(a+b) равно ли (b+a) ? — да
a+(b|c)+d+(b|c) — дубликаты зависит от ситуации, для этого примера так:
a+(b|c)+d+(b|c)
=> [a+b+d+b, a+b+d+c, a+c+d+b, a+c+d+c] // развернули в 4
=> [a+b+d, a+b+d+c, a+c+d+b, a+c+d] // удалили дубликаты (в 1 и в 4)
=> [a+b+d, a+b+d+c, a+c+d] // удалили третье как дубликат второго
Предугадываю насчет вопроса про разнознаковые:
a+(-b|-c)+d+(b|-c)
=> [a-b+d+b, a-b+d-c, a-c+d+b, a-c+d-c] // развернули в 4
=> [a+d, a-b+d-c, a-c+d+b, a-c+d] // -+ сожгли др друга, для -- просто убрали дубликаты
// среди деревьев дубликатов нет
Порядок операндов не важен, важны их значения, дубликаты операндов в одном дереве и дубликаты деревьев (от перестановки слагаемых сумма не меняется) удаляются как показано выше.
Все значения будут известны, на момент выполнения может «сгореть» какой-то результат по вине значений, но это уже другая история.
Исходная версия deep-purple, :
Для ( a+(-b) ) | ( a+(-c) ) = два результата a-b и a-c
(a+b) равно ли (b+a) ? — да
a+(b|c)+d+(b|c) — дубликаты зависит от ситуации, для этого примера так:
a+(b|c)+d+(b|c)
=> [a+b+d+b, a+b+d+c, a+c+d+b, a+c+d+c] // развернули в 4
=> [a+b+d, a+b+d+c, a+c+d+b, a+c+d] // удалили дубликаты (в 1 и в 3)
=> [a+b+d, a+b+d+c, a+c+d] // удалили третье как дубликат второго
Предугадываю насчет вопроса про разнознаковые:
a+(-b|-c)+d+(b|-c)
=> [a-b+d+b, a-b+d-c, a-c+d+b, a-c+d-c] // развернули в 4
=> [a+d, a-b+d-c, a-c+d+b, a-c+d] // -+ сожгли др друга, для -- просто убрали дубликаты
// среди деревьев дубликатов нет
Порядок операндов не важен, важны их значения, дубликаты операндов в одном дереве и дубликаты деревьев (от перестановки слагаемых сумма не меняется) удаляются как показано выше.
Все значения будут известны, на момент выполнения может «сгореть» какой-то результат по вине значений, но это уже другая история.