Có một thuật toán hiệu quả cho sự tương đương biểu thức?


14

vd: xy+x+y=x+y(x+1) ?

Các biểu thức là từ đại số trung học phổ thông, nhưng bị giới hạn trong phép cộng và nhân số học (ví dụ 2+2=4;2.3=6 ), không có nghịch đảo, trừ hoặc chia. Chữ cái là biến.

Nếu nó giúp, chúng ta có thể cấm bất kỳ biểu thức nào có thể biểu thị bằng các giá trị số khác 1 ; tức là không x2 cũng không 3x hay 4 :

  • đa tuyến , không có quyền hạn nào ngoài : x + x y x 1 + x 1 y 1 là OK, nhưng không phải là x 2 + x 3 y 4 , và không phải bất cứ điều gì có thể được biểu diễn như vậy, như trong một bản mở rộng đầy đủ notice-sản phẩm ví dụ như không x ( x + y ) x 2 + y ; 1x+xyx1+x1y1x2+x3y4x(x+y)x2+y
  • tất cả một , không có hệ số nào khác ngoài : x + x y 1. x + 1. x y là OK, nhưng không phải là 2 x + 3 x y , và không phải bất cứ điều gì có thể được biểu diễn như vậy, như trong một bản mở rộng đầy đủ sum-of-sản phẩm ví dụ như không một ( x + y ) + x ( một + b ) 2 một x + một y + b x ; và 1x+xy1.x+1.xy2x+3xya(x+y)+x(a+b)2ax+ay+bx
  • không có hằng số khác hơn là : một lần nữa, trong mở rộng đầy đủ sum-of-sản phẩm ví dụ như không ( một + 1 ) + ( b + 1 ) một + b + 21(a+1)+(b+1)a+b+2

Có một thuật toán hiệu quả để xác định xem hai biểu thức có tương đương không?Q.


Để minh họa, đây là một thuật toán vũ phu không hiệu quả với thời gian theo cấp số nhân:

mở rộng cả hai biểu thức thành tổng sản phẩm , có thể dễ dàng kiểm tra tính tương đương (chỉ cần bỏ qua thứ tự, vì đi lại / liên kết có thể sắp xếp lại).

ví dụ
một ( x + y ) + b ( x + y ) một x + một y + b x + b y(a+b)(x+y)ax+ay+bx+by
a(x+y)+b(x+y)ax+ay+bx+by


Đây có vẻ là một vấn đề nổi tiếng - ngay cả học sinh trung học cũng được dạy cách thủ công để giải quyết nó. Nó cũng được giải quyết bằng các trình kiểm tra / kiểm tra định lý tự động, nhưng chúng tập trung vào các khía cạnh tinh vi hơn.

Đây là một công cụ định lý tự động trực tuyến đang hoạt động: http://tryacl2.org/ , cho thấy sự tương đương bằng cách tìm một chuỗi giao dịch / liên kết / phân phối, v.v.

? --- 188 bước xy+x+y=x+y(x+1)
(thm (= (+ (* x y) x y) (+ x (* y (+ x 1))) ))

? --- 325 bướcy+x(y+1)=x+y(x+1)
(thm (= (+ y (* x (+ y 1))) (+ x (* y (+ x 1))) ))

Đây là câu hỏi đầu tiên của tôi ở đây, vì vậy vui lòng cho tôi biết nếu tôi đã chọn sai địa điểm, thẻ sai, cách mô tả / hỏi sai, v.v ... Cảm ơn!
NB: câu hỏi này đã được viết lại để trả lời các bình luận
Cảm ơn tất cả những người trả lời! Tôi đã học được rất nhiều.


3
Câu hỏi ở đây cần một số làm rõ. Lĩnh vực nào bạn đang hoạt động trên? Là các đối tượng như " " và " b " trong các thành phần biểu thức của trường hoặc các biến? Có thực sự là một lĩnh vực (nghĩa là phép cộng và phép nhân có nghịch đảo) không? Lưu ý rằng các sản phẩm tổng hợp-of-không giúp đỡ vì ( một 1 + b 1 ) ( một 2 + b 2 ) ( một n + b n ) có exponetially nhiều thuật ngữ. ab(a1+b1)(a2+b2)(an+bn)
David Richerby

4
Nếu các đối tượng là các biến và phép trừ được cho phép, thì về cơ bản bạn đang hỏi về kiểm tra nhận dạng đa thức, có thuật toán thời gian đa thức ngẫu nhiên theo bổ đề Schwartz Zippel . iff f ( x ) - g ( x ) = 0 và ý tưởng cơ bản là một đa thức không giống hệt nhau không có nhiều gốc vì vậy, nếu bạn bắt đầu đoán gốc ngẫu nhiên và tìm thấy rất nhiều gốc rễ, có khả năng cao là đa thức của bạn bằng không. f(x)=g(x)f(x)g(x)=0
David Richerby

2
Tôi ngạc nhiên không ai đề cập đến điều này, nhưng "nếu nó ở NP tôi không cần phải lo lắng về việc tìm kiếm một thuật toán đa thức" thì không có ý nghĩa gì. Mọi vấn đề trong P cũng nằm trong NP. Bạn có thể muốn hỏi liệu vấn đề là NP-đầy đủ (hay -hard).
Tom van der Zanden

2
Nếu bạn đấu tranh với những điều cơ bản, các câu hỏi tham khảo của chúng tôi có thể hữu ích cho bạn.
Raphael

2
@hyperpallium Before asking if a language (i.e. a decision problem) is in NP, it's best if you understood what this means. Perhaps the reference questions that Raphael linked to would help.
Yuval Filmus

Câu trả lời:


9

Your problem reduces to zero testing of multivariate polynomials, for which there are efficient randomized algorithms.

Your expressions are all multivariate polynomials. Apparently, your expressions are built up by the following rules: (a) if x is a variable, then x is an expression; (b) if c is a constant, then c is an expression; (c) if e1,e2 are expressions, then e1+e2 and e1e2 are expressions. If that's indeed what you intended, every expression is a multivariate polynomial over the variables.

Bây giờ, bạn muốn biết nếu hai biểu thức là tương đương. Lượng này để thử nghiệm xem hai đa thức đa biến là tương đương: cho p 2 ( x 1 , ... , x n ) , bạn muốn biết nếu hai đa thức này là tương đương. Bạn có thể kiểm tra điều này bằng cách trừ chúng và kiểm tra xem kết quả có bằng 0 hay không: xác địnhp1(x1,,xn)p2(x1,,xn)

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

Now p1,p2 are equivalent if and only if q is the zero polynomial.

Testing whether q is identically zero is the zero testing problem for multivariate polynomials. There are efficient algorithms for that. For instance, one example algorithm is to evaluate q(x1,,xn) at many random values of x1,,xn. If you find a value of x1,,xn such that q(x1,,xn), then you know that q is not identically zero, i.e., p1,p2 are not equivalent. If after many trials they are all zero, then you can conclude that q is identically zero (if q is not identically zero, the probability that all of those trials yield zero can be made exponentially low). The number of iterations you need to do is related to the degree of q; see the literature on polynomial identity testing for details.

For instance, see https://en.wikipedia.org/wiki/Schwartz%E2%80%93Zippel_lemma and http://rjlipton.wordpress.com/2009/11/30/the-curious-history-of-the-schwartz-zippel-lemma/

These algorithms apply if you are working over a finite field. You didn't state what field/ring you are working in, and whether you are are treating these expressions as formal expressions (e.g., polynomials as abstract objects) or as functions from FnF. If you are working over a finite field, the methods above apply immediately.

If you're treating the expressions as formal objects, then your expressions are equivalent to multivariate polynomials with integer coefficients. You can test equivalence of these by choosing a large random prime r and testing equivalence modulo r, i.e., in the field Z/rZ. Repeat this polynomially many times, with different random values of r, and you should get an efficient randomized algorithm for testing equivalence of these formal expressions.


1
On the other hand, it would be hard to prove that for each identically-zero expression, there is a not-too-long proof that the expression is identically zero.

@RickyDemer, great point! Nice observation. I interpreted the question as asking about testing equivalence rather than proving it, but that's a very nice observation. (If you wanted to exhibit a proof of equivalence in practice, I suspect it's feasible to exhibit such a proof if you're willing to make cryptographic assumptions, for some definition of "proof" -- e.g., a scheme that achieves soundness in the random oracle model.)
D.W.

1
Thanks! I'm treating them as formal objects, without inverses, division or subtraction (but using high school algebra for this question; seems more likely to be already solved). Do you mean, keep choosing large random primes r, and this is treating the expressions as if they were finite fields over the underlying set of integers [0..r1]? That wiki link says there's no known sub-exponential deterministic algorithm for this zero-testing. Do you know if that applies to my problem?
hyperpallium

1
@hyperpallium, yes exactly that's what I mean. Yes, I believe that applies to your problem, too. That's why I suggested a randomized algorithm -- there are efficient randomized algorithms, even though there are no known efficient deterministic algorithms.
D.W.

As pointed out in a comment above, the OP is not working in a finite field, but rather a commutative semiring. This means that additive inverses are not guaranteed to exist, so "subtracting" the expressions to check equality with zero is not a valid operation.
apnorton

0

To follow up on the one-power, one-coefficent and one-constants constraints in the question:

These define a subset the problem of polynomial identity testing. Clearly, they can be solved with a technique that solves the general problem. The question is whether they form a subset that is more easily solved.

one-coefficient: in problems without this, terms might be combined, making the problem easier. Consider the Binomial Theorem/Pascal's triangle for (a+b)n. This can be expanded one factor at a time, producing terms with overlapping orders e.g. (a+b)(a+b)=aa+ab+ab+bb=aa+2ab+bb The fewer terms make it easier to expand with the next factor: (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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.