Giả sử rằng có thuật toán polytime rằng cho và → một tính kết quả của đa tuyến tính của C trên → một . (wlog tôi sẽ cho rằng sản lượng → b sẽ là một vector của p -bit số nhị phân b i là k iff b i , k là một.)C(x⃗ )∈F(x⃗ )a⃗ Ca⃗ b⃗ pbikbi,k
Vì , có một mạch boolean polysize đưa ra mã hóa của mạch số học và các giá trị cho các biến tính toán đa tuyến tính của mạch số học trên các đầu vào. Hãy gọi cho mạch này M .P⊆P/polyM
Gọi là một mạch số học tùy ý. Khắc phục các biến của mạch boolean M mô tả mạch số học, do đó chúng ta có một mạch boolean tính toán đa tuyến tính của C trên các đầu vào đã cho.CMC
Chúng tôi có thể biến mạch này vào một mạch số học trên bằng cách ghi nhận rằng x p - 1 là 1 cho tất cả các giá trị nhưng 0 vì vậy đầu tiên huy động tất cả các nguyên liệu đầu vào với sức mạnh p - 1 . Thay thế mỗi cổng f ∧ g bằng cách nhân f . g , mỗi cổng f ∨ g bởi f + g - f . g và mỗi cổng ¬ f bằng 1 - f .Fpxp−110p−1f∧gf.gf∨gf+g−f.g¬f1−f
Theo giả định mà chúng tôi đã đưa ra ở trên về định dạng của đầu ra, chúng tôi có thể biến đầu ra từ nhị phân sang giá trị trên . Đi đầu ra cho b i và kết hợp chúng để có được Σ 0 ≤ k ≤ p - 1 k b i , k .Fpbi∑0≤k≤p−1kbi,k
Chúng ta cũng có thể chuyển đổi đầu vào được cung cấp dưới dạng giá trị trên sang dạng nhị phân vì có các đa thức đi qua bất kỳ số điểm hữu hạn nào. Ví dụ: nếu chúng ta đang làm việc trong mod 3 , hãy xem xét các đa thức 2 x ( x + 1 ) và 2 x ( x + 2 ) cung cấp các bit đầu tiên và thứ hai của đầu vào x ∈ F 3 .Fpmod32x(x+1)2x(x+2)x∈F3
Kết hợp những chúng ta có một mạch số học trên tính toán đa tuyến tính của C với kích thước polynomail trong kích thước của C .FpCC