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 x23x4 :

  • multilineare , nessun potere diverso da 1 : x+xyx1+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+xy1.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.FnF

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..r1]
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.