기본 콘텐츠로 건너뛰기

라벨이 다항식인 게시물 표시

MATH-04. 라그랑주 보간법: 제약 조건을 다항식으로 표현

라그랑주 보간법은 주어진 여러 개의 점을 모두 지나는 특정 차수의 다항 함수를 찾는 방법입니다. 이 방법은 데이터 포인트들 사이의 값을 추정하는 데 유용하게 사용됩니다. 라그랑주 보간법의 원리 라그랑주 보간법의 핵심 아이디어는 각 데이터 포인트를 지나는 개별적인 라그랑주 기저 다항식(Lagrange basis polynomials)을 만든 후, 이들을 선형 결합하여 최종 보간 다항식을 구하는 것입니다. n+1개의 데이터 포인트 $(x_0, y_0), (x_1, y_1), …, (x_n, y_n)$가 주어졌을 때, 라그랑주 보간 다항식 $P(x)$는 다음과 같이 정의됩니다. $$P(x) = \sum_{j=0}^{n} y_j L_j(x)$$ 여기서 $L_j(x)$는 라그랑주 기저 다항식이며, 다음과 같은 형태를 가집니다. $$L_j(x) = \prod_{i=0, i \neq j}^{n} \frac{x - x_i}{x_j - x_i} = \frac{(x-x_0)}{(x_j-x_0)} \cdots \frac{(x-x_{j-1})}{(x_j-x_{j-1})} \frac{(x-x_{j+1})}{(x_j-x_{j+1})} \cdots \frac{(x-x_n)}{(x_j-x_n)}$$ 기저 다항식$ L_j(x)$는 다음과 같은 중요한 특징을 가집니다. $x = x_j$일 때, $L_j(x_j) = 1$입니다. $x = x_i$이고 $i ≠ j$일 때, $L_j(x_i) = 0$입니다. 이러한 특징 덕분에, 전체 보간 다항식 $P(x)$는 각 데이터 포인트 $(x_j, y_j)$를 정확하게 지나가게 됩니다. 예를 들어, $P(x_j)$를 계산하면 $y_j L_j(x_j)$ 항만 남고 나머지는 모두 0이 되어 $P(x_j) = y_j$가 성립합니다. 라그랑주 보간법의 활용: 계산 과정을 다항식으로 영지식 증명의 목표는 "내가 이 계산을 올바르게 수행했다"는 사실을 계산의 입력값이나 중간 과정을 노출하지 않고 증명하는 것입니다. 컴퓨터 프로그램의 모든 계산은 근...

MATH-05. 컴퓨터로 다항식 나누기: 다항식 장제법, 조립제법

컴퓨터로 다항식의 나눗셈을 수행하는 대표적인 알고리즘은 다항식 장제법(Polynomial Long Division)과 조립제법(Synthetic Division)을 컴퓨터 코드로 구현하는 것입니다. 이 중 장제법은 일반적인 경우에 모두 사용될 수 있는 범용적인 방법이며, 조립제법은 나누는 식이 1차식일 때 매우 효율적입니다. 다항식 장제법 (Polynomial Long Division) 다항식 장제법은 우리가 손으로 다항식을 나누는 방법과 동일한 원리를 컴퓨터로 구현한 것입니다. 이 알고리즘의 핵심은 최고차항을 반복적으로 소거하는 것입니다. 알고리즘 순서 두 다항식 A(x) (피제수)와 B(x) (제수)가 주어졌을 때, 몫 Q(x)와 나머지 R(x)를 구하는 과정은 다음과 같습니다. (A(x) = B(x)Q(x) + R(x)) 초기화: 몫 Q(x)와 나머지 R(x)를 0으로 초기화합니다. 나머지 R(x)는 피제수 A(x)와 같다고 설정하고 시작합니다. 반복 조건 확인: 나머지 R(x)의 차수가 제수 B(x)의 차수보다 크거나 같은 동안 아래 과정을 반복합니다. 최고차항 비교 및 몫 계산: 나머지 R(x)의 최고차항을 제수 B(x)의 최고차항으로 나눕니다. 이 결과가 몫의 새로운 항(t(x))이 됩니다. 예: R(x) = 5x^3 + 2x^2 + …이고 B(x) = x^2 + …이면, t(x) = 5x^3/x^2 = 5x가 됩니다. 몫 누적: 계산된 항 t(x)를 전체 몫 Q(x)에 더합니다. (Q(x) = Q(x) + t(x)) 나머지 갱신: 현재 나머지 R(x)에서 t(x) · B(x)를 뺍니다. 이 과정을 통해 R(x)의 최고차항이 소거됩니다. (R(x) = R(x) - t(x) · B(x)) 종료: 반복이 끝나면, 그때의 Q(x)가 최종 몫이고 R(x)가 최종 나머지가 됩니다. 예시 A(x) = x^3 - 2x^2 + x - 5를 B(x) = x - 2로 나누는 경우: 1단계: R(x) = x^3 - 2x^2 + x - 5, Q(x) = 0 ...

ZKP-4. 영지식 증명: 계산을 다항식 문제로 변환하기

영지식 증명(Zero-Knowledge Proof)의 핵심은 '무언가를 안다’는 사실을, 그 ‘무엇’ 자체는 공개하지 않고 증명하는 것입니다. 이를 실현하기 위해 암호학자들은 아주 독창적인 방법을 고안했습니다. 바로 컴퓨터가 수행하는 복잡한 '계산’을, 간결하고 강력한 '다항식의 관계’로 번역 하는 것입니다. 이 번역 과정만 이해하면 영지식 증명의 가장 중요한 원리를 파악할 수 있습니다. 이 문서에서는 간단한 예제를 통해 그 과정을 단계별로 살펴보겠습니다. 우리가 증명하려는 계산은 x³ + x + 5 = 35 입니다. 증명자(Prover)는 이 방정식의 해인 x=3 이라는 비밀값을 알고 있음을 검증자(Verifier)에게 증명하고자 합니다. 1단계: 계산의 평탄화 (Flattening) - 산술 회로로 변환 가장 먼저, 복잡한 계산식을 기본적인 산술 연산(덧셈, 뺄셈, 곱셈)의 연속으로 분해하여 산술 회로(Arithmetic Circuit)로 만듭니다. 각 연산은 하나의 '게이트(gate)'가 됩니다. 이 과정은 컴퓨터가 이해하는 복잡한 로직을 영지식 증명 시스템이 처리할 수 있는 표준화된 형식으로 바꾸는 첫 단계입니다. x³ + x + 5 식은 다음과 같이 분해할 수 있습니다. sym_1 = x * x (x²) sym_2 = sym_1 * x (x³) sym_3 = sym_2 + x (x³ + x) ~out = sym_3 + 5 (x³ + x + 5) 이제 x=3 이라는 비밀값을 각 단계에 대입하여 중간 결과값을 계산합니다. x = 3 sym_1 = 3 * 3 = 9 sym_2 = 9 * 3 = 27 sym_3 = 27 + 3 = 30 ~out = 30 + 5 = 35 이 산술 회로는 계산의 흐름을 명확하게 보여주는 청사진 역할을 합니다. 위 다이어그램은 각 변수가 게이트를 통해 어떻게 연결되고 변환되는지 시각적으로 보여줍니다. 2단계: R1CS(Rank-1 Constraint System)로 표현 다음으로,...