컴퓨터 대수 시스템

편집 역사 토론
소프트웨어 수치해석 마지막 수정: 2026-08-20 04:33:47

1. 개요[편집]

컴퓨터 대수 시스템
Computer Algebra System (CAS)
분야기호 계산 × 컴퓨터 대수
핵심부동소수점이 아니라 정확한 기호 조작
산술임의정밀 정수 · 정확 유리수 · 대수적 수
단골 함정중간식 팽창 (expression swell)
대표 시스템Mathematica · Maple · SymPy · Maxima · SageMath

수치해석이 “값”을 구한다면, 컴퓨터 대수는 “식”을 구한다. 2\sqrt{2}를 1.41421…이 아니라 2\sqrt{2} 그대로 들고 다니는 고집.

컴퓨터 대수 시스템(Computer Algebra System, CAS)은 수식을 근삿값이 아니라 기호 그대로 정확하게 조작하는 소프트웨어다. 1/31/3을 0.3333…으로 뭉개지 않고 유리수 1/31/3으로, π\pi를 3.14159…가 아니라 기호 π\pi로 유지하며, 다항식 인수분해·미분·적분·방정식 풀이·극한을 오차 없이 수행한다. 핵심 철학은 부동소수점 연산의 반올림 오차를 아예 발생시키지 않는 정확 산술(exact arithmetic)에 있다.

이 정확성의 대가는 속도와 메모리다. 부동소수점 곱셈 하나가 CPU 한 사이클이면, 100자리 정수 곱셈은 그 수백 배가 든다. 그래서 CAS는 “빠르게 대략” 대신 “느리게 정확히”를 택한 도구이며, 이론 유도·공식 도출·정수론·기호 미적분처럼 근삿값이 무의미하거나 위험한 영역에서 진가를 발휘한다.

2. 정확 산술: 수를 부수지 않는다[편집]

CAS의 밑바닥은 임의정밀도 산술(arbitrary-precision arithmetic)이다.

  • 임의정밀 정수(bignum) — 기계어 워드(64비트)를 넘는 정수를 워드 배열로 표현해 자릿수 제한 없이 계산한다. 210002^{1000}이든 1000!이든 마지막 자리까지 정확하다. 큰 곱셈은 카라추바·쇤하게-슈트라센(고속 푸리에 변환 기반) 같은 준선형 알고리즘으로 가속한다.
  • 정확 유리수 — 분자/분모를 bignum 쌍으로 들고, 연산마다 최대공약수로 약분한다. 1/3+1/6=1/21/3 + 1/6 = 1/2가 반올림 없이 나온다.
  • 대수적 수·기호 상수2\sqrt{2}, 황금비, π\pi, ee를 최소다항식이나 기호로 유지하다가 필요할 때만 원하는 자릿수로 전개한다.

이 지점이 수치해석과의 근본적 갈림길이다. 가우스 소거법을 부동소수점으로 돌리면 반올림 오차가 누적되지만, 유리수 산술로 돌리면 정확한 해가 나온다. 대신 중간 분수의 분자·분모 자릿수가 폭발할 수 있다는 새로운 문제가 생긴다. 크라메르 법칙이 CAS에서 되살아나는 이유도 여기 있다 — 계수가 기호일 때 해를 “행렬식의 비”라는 닫힌 유리식으로 표현하는 것 자체가 목적이 되기 때문이다.

3. 기호 대수의 엔진들[편집]

CAS 내부에서 무겁게 돌아가는 핵심 알고리즘들.

  • 다항식 GCD — 두 다항식의 최대공약수. 순진하게 유클리드 호제법을 유리수 계수로 돌리면 중간 계수가 지수적으로 커진다(아래 중간식 팽창). 그래서 실제로는 부분종결식 PRS(subresultant polynomial remainder sequence)나 모듈러(유한체로 사상 후 CRT 복원) 방식을 쓴다.
  • 다항식 인수분해 — 정수 계수 다항식을 기약 인자로 쪼갠다. 유한체 위에서 베를레캄프·칸토어-차센하우스로 인수분해한 뒤, 헨젤 리프팅(Hensel lifting)으로 정수 위로 끌어올리고, 참 인자 조합을 고르는 단계에서 LLL 격자 기법(반 후에이)까지 동원되는 다항식 인수분해의 세계다.
  • 그뢰브너 기저 — 다변수 다항식 연립방정식(이데알)의 “정규형” 생성기. 부흐베르거 알고리즘(1965)이 원조이고, 파우제르의 F4·F5가 현대적 고속판이다. 연립 다항방정식 풀이·기하 정리 자동 증명의 표준 도구지만, 최악의 경우 이중 지수 시간(마이어-마이어)이라 몸을 사려야 한다. 자세히는 그뢰브너 기저 참고.

4. 기호 미적분과 적분[편집]

CAS가 학생들에게 가장 사랑(과 원망)받는 기능이 기호 미적분이다. 미분은 쉽다 — 곱·연쇄 법칙을 식 트리에 재귀적으로 적용하면 끝, 항상 닫힌 형식이 나온다. 적분은 완전히 다른 짐승이다.

부정적분은 “이 함수의 원시함수가 초등함수로 표현되는가?”라는 결정 문제부터 어렵다. 이를 정면으로 다룬 것이 리시 알고리즘(Risch algorithm, 1969)이다. 리시는 초등함수의 부정적분이 초등함수로 표현되는지를 판정하고, 되면 구성하는 절차를 제시했다. 예컨대 ex2dx\int e^{-x^2}\,dx가 초등함수로 표현 불가능(그래서 오차함수 erf가 특수함수로 존재)함을 알고리즘이 판별해낸다. 다만 완전한 리시 알고리즘은 방대하고 미묘한 판정 분기를 요구해, 어떤 CAS도 100% 구현하지 못했고 실무에서는 휴리스틱과 패턴 매칭을 섞어 쓴다.1

5. 중간식 팽창 (expression swell)[편집]

CAS를 오래 쓰면 반드시 만나는 벽이 중간식 팽창(intermediate expression swell)이다. 최종 답은 간결한데, 계산 중간 단계의 식이 지수적으로 부풀어 메모리를 잡아먹고 계산이 멈추는 현상.

전형적 예가 유리수 계수 다항식의 유클리드 GCD다. 입력과 출력은 작은데 중간 나머지의 계수 분수가 매 단계 커진다. 행렬식을 여인수 전개로 상징적으로 계산할 때도, 소거·약분 전 중간식이 항 수 기준 계승적으로 늘어난다. CAS의 알고리즘 상당수(모듈러 방법, 부분종결식, 확률적 검산)가 사실은 이 팽창을 억누르기 위한 장치다. “정확 산술은 공짜가 아니다”를 몸으로 가르치는 대목.2

6. 대표 시스템들[편집]

시스템성격한줄
Mathematica상용, Wolfram Language방대한 함수·문서, 노트북 UI의 원조격
Maple상용공학·교육에서 강세, 기호+수치 균형
SymPy오픈소스, 순수 Python의존성 없이 임포트 한 줄, 파이썬 생태계 표준
Maxima오픈소스, Lisp1960년대 MIT Macsyma의 직계 후손
SageMath오픈소스 통합수백 개 오픈소스 패키지를 파이썬으로 묶은 우산

이 밖에 정수론·대수기하 특화의 Magma·PARI/GP·Singular, 군론의 GAP 등 분야별 전문 시스템도 널리 쓰인다. 뿌리를 따라가면 1960~70년대 MIT의 Macsyma와 Reduce로 이어지는데, 인공지능 연구의 부산물로 태어났다는 점이 흥미롭다.

7. 수치해석과의 대비[편집]

CAS와 수치해석은 경쟁이 아니라 상보 관계다.

  • 정확 vs 근사 — CAS는 오차 0이지만 특정 입력에서 폭발적으로 느려지거나 멈춘다. 수치해석은 반올림 오차를 안고 가는 대신 크기가 커져도 예측 가능한 시간에 끝난다.
  • 기호 vs 값 — 파라미터가 문자로 남은 일반해가 필요하면 CAS, 특정 수치를 빠르게 뽑아야 하면 수치법. 실무에서는 CAS로 공식을 유도해 코드로 내보내고, 그 코드를 부동소수점으로 돌리는 하이브리드가 국룰이다(코드 생성 기능이 그래서 존재한다).
  • 검증 도구 — 수치 코드가 맞는지 확인할 때, 작은 케이스를 CAS로 정확히 풀어 대조하는 것이 흔한 V&V 관행이다.

“모든 걸 CAS로 풀자”는 순진한 발상은 중간식 팽창 앞에서 꺾이고, “전부 부동소수점”은 정확성이 생명인 곳에서 위험하다. 도구의 성질을 알고 자리를 배분하는 것이 요령이다.

8. 관련 문서[편집]

9. Footnotes[편집]

  1. “Wolfram Alpha가 못 푸는 적분이 있나요?”의 답은 “많다”이다. 초등함수로 표현 불가능한 적분이 널려 있고(대부분의 실제 함수가 그렇다), 리시 알고리즘이 “표현 불가”를 판정해주는 것 자체가 기능이다. 학생이 손으로 못 푸는 적분과, 원리적으로 초등함수로 안 되는 적분은 전혀 다른 얘기.

  2. 유명한 실험: gcd\gcd 두 줄짜리를 유리수로 순진하게 돌려 놓고 차수를 조금씩 올려보면, 어느 순간 중간 분수의 분자가 수백 자리가 되며 계산이 기어간다. 이걸 처음 목격한 사람은 대개 “버그인가?” 싶어 코드를 노려보지만, 버그가 아니라 이론이 예언한 팽창이다.