---
title: 부분 정보
tags: [concept, SDF]
sources: [SDF-ch1-flexibility, SDF-ch4-pattern-matching, SDF-ch6-layering, SDF-ch7-propagation]
updated: 2026-04-30
---

# 부분 정보

## 한 줄 정의

완전한 정보 없이도 알려진 부분만으로 작업을 진행하고, 새 정보가 도착할 때 기존 정보와 일관성 있게 병합함으로써 점진적으로 더 완전한 답을 만들어가는 계산 전략.

## 핵심 내용

### "부분적으로 알기"의 계산적 의미

대부분의 계산 모델은 완전한 정보를 전제한다. 함수는 모든 인수가 주어진 후 실행되고, 결과는 하나의 확정된 값이다. 하지만 현실의 많은 문제는 처음부터 완전한 정보를 갖지 않는다:

- 센서 데이터는 불확실성을 가진다
- 타입 추론은 각 식에서 국소적 제약만 얻고 전체 타입을 점진적으로 결정한다
- 물리 상수는 측정 오차가 있으며, 여러 독립 측정을 결합하면 더 정확해진다

SDF는 이 문제를 "부분 정보를 일급 시민(first-class citizen)으로 취급"함으로써 해결한다.

### 부분 정보의 세 가지 표현 형태

**1. 패턴 변수 (Ch4)**

패턴에서 `(? a)`, `(?? t)` 같은 변수는 "아직 모르는" 부분을 나타낸다. 패턴 매칭은 이 미지수가 무엇이어야 하는지를 데이터로부터 결정(바인딩)한다.

단일화(unification)는 한 걸음 더 나간다: 두 패턴 *모두*에 미지수가 있을 때, 두 패턴을 동시에 만족하는 가장 일반적인 바인딩을 찾는다. 타입 추론에서 각 식이 국소적으로 생성하는 타입 제약들을 결합하여 전체 타입을 추론하는 것이 이 과정이다.

**2. 구간 값 (Ch7)**

```scheme
(make-interval 2.5 3.1)  ; "2.5 이상 3.1 이하인 무언가"
```

두 구간의 교집합은 더 좁은 구간, 즉 더 정확한 정보다. 서로 다른 독립 측정에서 얻은 구간들의 교집합을 취하면 더 정확한 추정치를 얻는다. 이것이 별까지의 거리 계산 예시(Ch7.1)의 핵심이다.

**3. 전제를 가진 값 (Ch7)**

```scheme
(tell! Vega-parallax interval 'FGWvonStruve1837)
```

값에 그 값을 지지하는 전제(premise/support)를 붙임으로써, 어떤 소스에서 파생된 정보인지를 함께 전달한다. 이를 통해 파생 값의 출처를 자동으로 추적할 수 있다.

### 부분 정보의 단조적 병합

부분 정보의 핵심 연산은 **병합(merge)**이다. 병합은 단조적(monotonic)이어야 한다:

- 기존 정보를 잃지 않는다
- 추가 정보는 기존 정보와 일관성이 있거나, 일관성이 없으면 모순으로 감지된다

구간의 경우 교집합이 병합이다. 구간이 비어 있으면 모순. 전제 집합의 경우 합집합이 병합이다.

이 단조성이 계산의 건전성(soundness)을 보장한다. 값이 결코 "잊혀지거나" "번복되지" 않으며, 오직 더 구체화될 뿐이다.

### 퇴화성과의 연결

Ch1에서 항법 시스템이 여러 독립적인 위치 추정값을 결합하는 예시는 부분 정보의 철학적 기반이다:

> "When multiple mechanisms provide partial information about the same question, the combination can be more accurate than any single source."

퇴화성(degeneracy)은 여러 독립적 메커니즘이 동일한 답을 목표로 삼는 구조다. 각 메커니즘은 부분 정보를 제공하고, 전파 시스템은 이를 병합하여 더 정확한 답을 만든다. Ch7의 전파 모델이 이 아이디어의 계산적 완성형이다.

### 의존성 추적과의 관계

부분 정보를 사용할 때, "이 정보가 어디서 왔는가?"를 추적하면 두 가지 이점이 있다:

1. **설명(explanation)**: 결론이 어떤 전제들에서 유래했는지 역추적
2. **지능적 백트래킹**: 모순 발생 시 원인이 된 전제들만 의심하여, 관련 없는 탐색 공간을 재탐색하지 않음

Ch6의 의존성 레이어와 Ch7의 의존성 지향 백트래킹이 이 추적의 구현이다.

## SDF에서의 등장

- [[SDF-ch1-flexibility]]: 철학적 동기. 항법 시스템, 퇴화성, "부분 정보들의 결합이 개별 결과보다 더 정확하다"
- [[SDF-ch4-pattern-matching]]: 패턴 변수와 단일화. "패턴은 부분적으로 알려진 정보를 표현하며, 단일화로 더 구체적인 정보를 생성한다"
- [[SDF-ch6-layering]]: 의존성·출처 레이어가 부분 정보의 메타데이터. 파생 값의 지지 집합이 자동으로 전파됨
- [[SDF-ch7-propagation]]: 부분 정보의 완전한 구현. 구간 산술, 전제를 가진 값, 의존성 지향 백트래킹

## 실천 시 주의점

**모순 처리 정책**: 정보가 모순될 때 시스템이 어떻게 반응할지 미리 설계해야 한다. 오류를 던지는가, 아니면 백트래킹하는가, 아니면 모순을 명시적으로 표현하는가? 정책이 불명확하면 잘못된 결과를 조용히 내놓는다.

**성능 고려**: 구간 전파와 의존성 추적은 순수 값 계산에 비해 상당한 오버헤드를 수반한다. 모든 값에 적용할 필요는 없다.

**결코 정보를 잃지 말 것**: 병합이 단조적이지 않으면(즉, 이전 정보를 버리면) 시스템의 건전성이 깨진다. "나중에 온 정보가 이전 정보를 덮어쓴다"는 설계는 부분 정보 패러다임과 충돌한다.

**"더 정확함"의 방향성**: 구간이 좁아지는 것이 "더 많이 알게 되는 것"이다. 구간이 넓어지는 것은 정보 손실을 의미한다. 병합 연산이 항상 좁히는(narrowing) 방향이어야 함을 확인해야 한다.

## 관련 개념

- [[degeneracy]] — 여러 독립 소스에서 부분 정보를 병합하는 구조적 원칙
- [[propagation]] — 부분 정보의 단조적 축적과 전파의 계산 모델
- [[layered-data]] — 값에 의존성·출처 정보를 첨부하는 메타데이터 레이어
- [[additive-programming]] — 새 정보 소스를 추가하는 것이 가산적 확장
- [[generic-procedures]] — 추상 술어를 통한 타입 태깅이 부분 정보와 연결
