LINUX.ORG.RU

История изменений

Исправление 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] // -+ сожгли др друга, для -- просто убрали дубликаты
    // среди деревьев дубликатов нет

Порядок операндов не важен, важны их значения, дубликаты операндов в одном дереве и дубликаты деревьев (от перестановки слагаемых сумма не меняется) удаляются как показано выше.

Все значения будут известны, на момент выполнения может «сгореть» какой-то результат по вине значений, но это уже другая история.