Esiste un algoritmo efficiente per l'equivalenza delle espressioni?


14

ad es. xy+x+y=x+y(x+1) ?

Le espressioni provengono dalla normale algebra del liceo, ma sono limitate all'aggiunta e alla moltiplicazione aritmetica (ad es. 2+2=4;2.3=6 ), senza inversioni, sottrazioni o divisioni. Le lettere sono variabili.

Se aiuta, possiamo vietare qualsiasi espressione rappresentabile con valori numerici diversi da 1 ; cioè non x2 né 3x né 4 :

  • multilineare , nessun potere diverso da 1 : x+xy≡x1+x1y1 è OK, ma non x2+x3y4 , e non tutto ciò che potrebbe essere rappresentato come quello, come in una piena espansione per riassumere -di-prodotti, ad esempio non x(x+y)≡x2+y ;
  • tutto uno , nessun coefficiente diverso da 1 : x+xy≡1.x+1.xy è OK, ma non 2x+3xy , e non tutto ciò che potrebbe essere rappresentato come quello, come in una piena espansione a somma dei prodotti, ad es. non a(x+y)+x(a+b)≡2ax+ay+bx ; e
  • nessuna costante diversa da 1 : di nuovo, nella somma dei prodotti completamente espansa, ad es. no (a+1)+(b+1)≡a+b+2

Q.Esiste un algoritmo efficiente per determinare se due espressioni sono equivalenti?


Per illustrare, ecco un inefficiente algoritmo a forza bruta con tempo esponenziale:

espandi completamente entrambe le espressioni alla somma dei prodotti , che può essere facilmente verificata per equivalenza (basta ignorare l'ordine, poiché il tragitto giornaliero / associato può essere riordinato).

es.
(a+b)(x+y)→ax+ay+bx+by
a(x+y)+b(x+y)→ax+ay+bx+by


Questo sembra un problema ben noto - anche agli studenti delle scuole superiori vengono insegnati modi manuali per risolverlo. È anche risolto da tester / controllori di teoremi automatizzati, ma si concentrano su aspetti più sofisticati.

Ecco un proveratore di teoremi automatizzato online funzionante: http://tryacl2.org/ , che mostra l'equivalenza trovando una sequenza di permuta / associa / distribuisci ecc:

? --- 188 passaggi xy+x+y=x+y(x+1)
(thm (= (+ (* x y) x y) (+ x (* y (+ x 1))) ))

? --- 325 passiy+x(y+1)=x+y(x+1)
(thm (= (+ y (* x (+ y 1))) (+ x (* y (+ x 1))) ))

Questa è la mia prima domanda qui, quindi per favore fatemi sapere se ho scelto il posto sbagliato, i tag sbagliati, il modo sbagliato di descrivere / chiedere ecc. Grazie!
NB: questa domanda è stata riscritta in risposta ai commenti
Grazie a tutti i rispondenti! Ho imparato molto


3
La domanda qui necessita di alcuni chiarimenti. In quale campo stai operando? Gli oggetti come " " e " b " nelle espressioni sono elementi del campo o delle variabili? In realtà è un campo (cioè, l'addizione e la moltiplicazione hanno inversioni)? Nota che la somma dei prodotti non aiuta perché ( a 1 + b 1 ) ( a 2 + b 2 ) ⋯ ( a n + b n ) ha esponenzialmente molti termini. ab(a1+b1)(a2+b2)⋯(an+bn)
— David Richerby,

4
Se gli oggetti sono variabili e la sottrazione è consentita, allora stai essenzialmente chiedendo il test di identità polinomiale, che ha un algoritmo di tempo polinomiale randomizzato dal lemma di Schwartz-Zippel . iff f ( x ) - g ( x ) = 0 e l'idea di base è che un polinomio che non è identicamente zero non abbia molte radici, quindi se inizi a indovinare le radici a caso e trova molte radici, c'è un'alta probabilità che il tuo polinomio fosse identicamente zero. f(x)=g(x)f(x)−g(x)=0
— David Richerby

2
Sono sorpreso che nessuno lo abbia ancora menzionato, ma "se è in NP non devo preoccuparmi di trovare un algoritmo polinomiale" non ha senso. Ogni problema in P è anche in NP. Probabilmente intendevi chiedere se il problema è NP-complete (o -hard).
— Tom van der Zanden,

2
Se hai difficoltà con le basi, le nostre domande di riferimento potrebbero esserti utili.
— Raffaello

2
@hyperpallium Prima di chiedere se una lingua (cioè un problema decisionale) è in NP, è meglio se hai capito cosa significa. Forse le domande di riferimento a cui Raphael si collegava avrebbero aiutato.
— Yuval Filmus,

Risposte:


9

Il problema si riduce a zero test dei polinomi multivariati, per i quali esistono algoritmi randomizzati efficienti.

Le tue espressioni sono tutti polinomi multivariati. Apparentemente, le tue espressioni sono costruite dalle seguenti regole: (a) se è una variabile, allora x è un'espressione; (b) se c è una costante, allora c è un'espressione; (c) se e 1 , e 2 sono espressioni, allora e 1 + e 2 ed e 1 e 2 sono espressioni. Se è proprio quello che intendevi, ogni espressione è un polinomio multivariato sulle variabili.xxcce1,e2e1+e2e1e2

Ora, vuoi sapere se due espressioni sono equivalenti. Ciò equivale a verificare se due polinomi multivariati sono equivalenti: dati e p 2 ( x 1 , ... , x n ) , si desidera sapere se questi due polinomi sono equivalenti. Puoi verificarlo sottraendoli e controllando se il risultato è identicamente zero: definiscip1(x1,…,xn)p2(x1,…,xn)

q(x1,…,xn)=p1(x1,…,xn)−p2(x1,…,xn).

Ora sono equivalenti se e solo se q è il polinomio zero.p1,p2q

Verificare se è identicamente zero è il problema del test zero per i polinomi multivariati. Ci sono algoritmi efficienti per questo. Ad esempio, un algoritmo di esempio è valutare q ( x 1 , … , x n ) a molti valori casuali di x 1 , … , x n . Se trovi un valore di x 1 , ... , x n tale che q ( x 1 , ... , x n ) , allora sai che qqq(x1,…,xn)x1,…,xnx1,…,xnq(x1,…,xn)qnon è identicamente zero, cioè non sono equivalenti. Se dopo molte prove sono tutte zero, allora puoi concludere che q è identicamente zero (se q non è identicamente zero, la probabilità che tutte queste prove producano zero può essere resa esponenzialmente bassa). Il numero di iterazioni che devi fare è correlato al grado di q ; vedere la letteratura sui test di identità polinomiale per i dettagli.p1,p2qqq

Ad esempio, vedi https://en.wikipedia.org/wiki/Schwartz%E2%80%93Zippel_lemma e http://rjlipton.wordpress.com/2009/11/30/the-curious-history-of-the- Schwartz-Zippel-lemma /

Questi algoritmi si applicano se si lavora su un campo finito. Lei non ha precisato quale campo / anello si sta lavorando, e se si sta trattando queste espressioni come espressioni formali (ad esempio, polinomi come oggetti astratti) o come funzioni da . Se stai lavorando su un campo finito, i metodi sopra indicati si applicano immediatamente.Fn→F

Se stai trattando le espressioni come oggetti formali, le tue espressioni sono equivalenti a polinomi multivariati con coefficienti interi. È possibile verificare l'equivalenza di questi, scegliendo un grande primo caso e test di equivalenza modulo R , vale a dire, nel campo Z / R Z . Ripeti questo polinomialmente molte volte, con diversi valori casuali di r , e dovresti ottenere un algoritmo randomizzato efficiente per testare l'equivalenza di queste espressioni formali.rrZ/rZr


1
D'altra parte, sarebbe difficile dimostrare che per ogni espressione identicamente zero, vi è una prova non troppo lunga che l'espressione è identicamente zero.

@RickyDemer, ottimo punto! Bella osservazione. Ho interpretato la domanda chiedendo di provare l'equivalenza piuttosto che provarla, ma è una osservazione molto bella. (Se si desidera esibire una prova di equivalenza in pratica, sospetto che sia possibile esibire tale prova se si è disposti a fare ipotesi crittografiche, per una definizione di "prova" - ad esempio, uno schema che raggiunge la solidità nella modello di oracolo casuale.)
— DW

1
Grazie! Li sto trattando come oggetti formali, senza inversioni, divisioni o sottrazioni (ma uso l'algebra del liceo per questa domanda; sembra più probabile che sia già stato risolto). Vuoi dire, continuare a scegliere grandi numeri primi casuali , e questo sta trattando le espressioni come se fossero campi finiti sull'insieme sottostante di numeri interi [ 0 .. r - 1 ] ? Quel link wiki dice che non esiste un algoritmo deterministico sub-esponenziale noto per questo test zero. Sai se questo si applica al mio problema? r[0..r−1]
— iperpallium

1
@Iperpallium, sì, è esattamente quello che intendo. Sì, credo che valga anche per il tuo problema. Ecco perché ho suggerito un algoritmo randomizzato: esistono algoritmi randomizzati efficienti, anche se non sono noti algoritmi deterministici efficienti.
— DW

Come sottolineato in un commento sopra, il PO non sta funzionando in un campo finito, ma piuttosto un semenzaggio commutativo. Ciò significa che non è garantito che esistano inversioni additive, quindi "sottrarre" le espressioni per verificare l'uguaglianza con zero non è un'operazione valida.
— apnorton,

0

Per dare seguito ai vincoli di una potenza , di una sola e di una costante nella domanda:

Questi definiscono un sottoinsieme il problema del test di identità polinomiale. Chiaramente, possono essere risolti con una tecnica che risolve il problema generale. La domanda è se formano un sottoinsieme che è più facile da risolvere.

(a+b)n(a+b)(a+b)=aa+ab+ab+bb=aa+2ab+bb(aa+2ab+bb)(a+b)=aaa+2aab+abb+aab+2abb+bbb=aaa+3aab+3abb+bbb and again terms are combined, making a smaller simpler problem. This combining of terms is a form of dynamic programming.

That is, the possibility of combining terms, creating a non-one coefficient, makes the problem easier not harder.

(Although there is more work in calculation in multiplying non-one coefficients)

non-one constants are included in the above argument by considering constants as variables with zero exponent.

one-power I don't think this makes any difference. Although non-one exponents can be created in more than one way (e.g. a4=a2a2=a1a3), and this can lead to overlap and combination (as in the Binomial Theorm/Pascal's triangle above), actual combination is only possible if non-one coefficients are allowed.

The above is not a formal or rigorous argument. It rests on an assumption about what makes the problem difficult. But it does seem to me that combining terms only makes for an easier problem - so preventing this by the one coefficient constraint is not going to make the subset easier.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.