컴퓨터 대수 시스템은 수학 연구에 매우 유용하지만, 소프트웨어의 예상치 못한 오류는 때때로 연구에 심각한 영향을 미칠 수 있다. 예시로서, 저자들은 정수 행렬의 행렬식 계산 시 Mathematica의 오류를 어떻게 발견했는지 보여준다: 행렬식을 잘못 계산할 뿐만 아니라 동일한 행렬식을 두 번 계산하면 서로 다른 결과가 나온다.
저자들은 직교 다항식의 Casorati 행렬식을 연구할 때:
P_{f_1}(a_k) & P_{f_1}(a_{k+1}) & \cdots & P_{f_1}(a_{k+l}) \\ P_{f_2}(a_k) & P_{f_2}(a_{k+1}) & \cdots & P_{f_2}(a_{k+l}) \\ \vdots & \vdots & \ddots & \vdots \\ P_{f_l}(a_k) & P_{f_l}(a_{k+1}) & \cdots & P_{f_l}(a_{k+l}) \end{pmatrix}$$ 부동소수점 문제를 피하기 위해 정수를 사용하여 모든 예시를 구성했지만, Mathematica와 Maple이 서로 다른 결과를 제시했다. ### 오류 격리 방법 계산 문제를 격리하기 위해 저자들은 다음과 같은 방법으로 오류를 유발하는 행렬을 생성했다: 1. **기본 행렬 생성**: ```mathematica basicMatrix = Table[Table[RandomInteger[{-99, 99}], {i, 1, 14}], {j, 1, 14}] ``` 2. **대정수 생성**: ```mathematica powersMatrix = DiagonalMatrix[{10^123, 10^152, 10^185, 10^220, 10^397, 10^449, 10^503, 10^563, 10^979, 10^1059, 10^1143, 10^1229, 10^1319, 10^1412}] ``` 3. **무작위 섭동 추가**: ```mathematica smallMatrix = Table[Table[RandomInteger[{-999, 999}], {i, 1, 14}], {j, 1, 14}] ``` 4. **최종 행렬 구성**: ```mathematica bigMatrix = basicMatrix.powersMatrix + smallMatrix ``` ### 오류 검증 동일한 행렬의 행렬식을 여러 번 계산하여 오류를 검증했다: ```mathematica a = Det[bigMatrix]; b = Det[bigMatrix]; ``` 결과적으로 `a==b`가 자주 `False`를 반환했다. ## 실험 설정 ### 테스트 환경 - **소프트웨어 버전**: Mathematica 8.0부터 9.0.1까지 - **운영 체제**: Mac 및 Windows - **비교 소프트웨어**: 검증 도구로 Maple과 Sage 사용 ### 테스트 데이터 - **행렬 규모**: 14×14 - **수치 범위**: 약 10,000자리의 대정수 포함 - **생성 방식**: 기본 행렬을 무작위로 생성한 후 거듭제곱으로 확대하고 작은 섭동을 추가하여 구성 ## 실험 결과 ### 주요 발견 1. **계산 오류**: Mathematica가 계산한 행렬식 값이 완전히 잘못됨 2. **비결정론성**: 동일한 행렬의 여러 번 계산이 서로 다른 결과를 생성 3. **버전 관련성**: 오류는 버전 8과 9에서 나타나며, 버전 6과 7은 영향을 받지 않는 것으로 보임 ### 구체적 사례 특정 예시에서: - Mathematica 첫 번째 계산: `N[a] = -3.263388173990166 × 10^9768` - Mathematica 두 번째 계산: `N[b] = -8.158470434975415 × 10^9768` - 정확한 결과(Maple/Sage): `≈ 1.95124219131987 × 10^9762` ### 오류 보고 저자들은 2013년 10월 7일 Wolfram Research에 이 오류를 보고했다(사례 번호: CASE:303438). 확인 회신을 받았지만 문제는 이후 버전에서도 해결되지 않았다. ## 관련 연구 1. **역사적 선례**: 1994년 Thomas Nicely가 발견한 펜티엄 나눗셈 오류와 유사 2. **소프트웨어 검증**: 오픈소스 컴퓨터 대수 시스템의 검증 기술 연구 언급 3. **수학 소프트웨어 성공 사례**: - 사색 정리의 증명(Appel과 Haken) - 케플러 추측의 증명(Thomas Hales) - Kenzo 소프트웨어가 발견한 발표된 정리의 오류 ## 결론 및 논의 ### 주요 결론 1. **신뢰성 문제**: 기호 계산(정수 연산)이라도 컴퓨터 대수 시스템은 오류를 생성할 수 있다 2. **영향 범위**: 대정수 계산 오류는 이론 수학뿐만 아니라 암호학 등의 응용 분야에도 영향을 미친다 3. **체계적 문제**: 상용 소프트웨어의 "블랙박스" 특성으로 인해 오류를 예측하고 피하기 어렵다 ### 한계 1. **오류 유발 조건 불명확**: 어떤 행렬이 오류를 유발할지 정확히 예측할 수 없다 2. **버전 특이성**: 오류는 특정 버전에서만 나타난다 3. **플랫폼 의존성**: 서로 다른 운영 체제에서 검증이 필요하다 ### 향후 방향 1. 더 나은 소프트웨어 검증 기술 개발 2. 상용 소프트웨어의 투명성 향상 3. 더 완벽한 오류 보고 및 수정 메커니즘 구축 ## 심층 평가 ### 장점 1. **실질적 의의가 큼**: 광범위하게 사용되는 수학 소프트웨어의 심각한 오류를 규명 2. **방법이 과학적**: 여러 독립적 시스템을 통한 검증으로 발견의 신뢰성 보장 3. **재현성이 강함**: 오류 재현 방법을 상세히 제공 4. **작성이 명확함**: 구체적인 수학 연구를 배경으로 문제 발견 과정을 생생하게 제시 ### 부족한 점 1. **이론적 분석 제한**: 오류 발생의 근본 원인에 대한 심층 분석 부재 2. **해결 방안 부족**: 주로 문제 보고이며, 이러한 오류를 예방하거나 탐지하는 방법 부재 3. **테스트 범위**: 주로 특정 유형의 계산(대정수 행렬 행렬식)에 집중 ### 영향력 1. **학술적 가치**: 컴퓨터 보조 증명의 신뢰성 문제에 대해 연구자들에게 주의 환기 2. **실용적 가치**: Mathematica를 사용하여 대정수 계산을 수행하는 사용자에게 중요한 경고 3. **소프트웨어 개선**: 소프트웨어 개발사가 이러한 오류를 중시하고 수정하도록 촉구 ### 적용 가능한 시나리오 이 연구의 발견은 다음에 적용 가능하다: - Mathematica를 사용하여 대정수 행렬 계산을 수행하는 연구 - 암호학의 대수 연산 - 고정밀 기호 계산이 필요한 수학 연구 - 컴퓨터 대수 시스템의 신뢰성 평가 ## 참고 문헌 논문이 인용한 중요 문헌: 1. Karlin & Szegő (1960/1961) - 직교 다항식 행렬식에 관한 원본 연구 2. Appel & Haken (1977) - 사색 문제의 컴퓨터 보조 증명 3. Hales (2005) - 케플러 추측의 증명 4. Ciaurri & Varona (2006) - 컴퓨터 계산 신뢰성에 관한 초기 연구 --- 이 논문은 비록 분량이 길지 않지만, 중요한 문제를 규명한다: 겉으로는 신뢰할 수 있어 보이는 기호 계산도 체계적 오류를 포함할 수 있다는 것이다. 이는 수학 연구를 위해 컴퓨터에 의존할 때 신중함을 유지해야 하며, 소프트웨어 검증과 투명성의 중요성을 강조한다.