---
title: "Ch7: Propagation"
tags: [source, SDF]
source: "Software Design for Flexibility, Hanson & Sussman (2021)"
chapter: 7
updated: 2026-04-30
---

# Ch7: Propagation

## 핵심 아이디어

**전파 모델(propagator model)**은 폰 노이만 순차적·방향성 계산 패러다임에서 벗어나, 공유 셀(cells)로 연결된 자율적 전파기(propagators)들이 부분 정보를 축적하고 전파하는 다방향 계산 모델이다. 레이어링을 통한 의존성 추적과 결합하면 **의존성 지향 백트래킹(dependency-directed backtracking)**이 가능해져 대규모·복잡한 시스템의 탐색 공간을 크게 줄인다.

## 주요 개념

### 전파 모델의 핵심 구조

- **셀(cell)**: 정보를 축적하는 공유 저장소. 새 정보가 추가되면 기존 정보와 병합.
- **전파기(propagator)**: 셀에서 정보를 읽고, 계산하여, 다른 셀에 정보를 추가하는 자율 기계.
- 전파기들은 **독립적**이며, 연결된 셀에 정보가 변경될 때마다 활성화.

기존 언어: 값이 표현식 트리를 통해 위쪽으로 스며오름(percolating up).  
전파 모델: 값이 **배선도(wiring diagram)**를 통해 다방향으로 전파.

### 7.1 응용 예시: 별까지의 거리

시차(parallax)와 거리 간의 쌍방향 제약:

```scheme
(define-c:prop (c:parallax<->distance parallax distance)
  (let-cells (t (AU AU-in-parsecs))
    (c:tan parallax t)
    (c:* t distance AU)))
```

`c:*`은 세 셀 사이의 곱셈 제약을 강제하는 양방향 전파기를 구성한다:
- `p:*`: product = factor1 * factor2
- `p:/`: factor1 = product / factor2 (역방향)

```scheme
;; 별까지의 거리 계산
(define-cell Vega-parallax-distance)
(define-cell Vega-parallax)
(c:parallax<->distance Vega-parallax Vega-parallax-distance)

;; 두 가지 독립적 측정값 제공
(tell! Vega-parallax     (+->interval ...) 'FGWvonStruve1837)
(tell! Vega-parallax-distance (+->interval ...) 'HipparcosSatellite)

;; 시스템이 두 값을 결합하여 더 정확한 추정치 계산
```

### 부분 정보와 구간 산술

셀은 구간(interval)을 값으로 가질 수 있으며, 새 정보가 추가될 때 구간의 교집합을 취함:

```scheme
(make-interval lower upper)
```

- 두 독립적 추정값의 구간을 교집합 취함 → 더 좁은 구간 (더 정확한 추정)
- 구간이 비어 있으면 모순 감지

### 의존성 추적과 전제 (Premises)

레이어링의 의존성 레이어를 전파 모델에 통합. 각 값은 그것을 지지하는 **전제(premises)**의 집합을 동반:

```scheme
(tell! Vega-parallax interval 'FGWvonStruve1837)
;; 'FGWvonStruve1837 이 전제(premise)
```

파생된 값은 그것의 전제들의 합집합을 전제 집합으로 가짐. 이를 통해:
- 어떤 소스가 특정 결론에 기여했는지 추적
- 모순(contradiction)이 발생하면 어떤 전제가 문제인지 특정

### 의존성 지향 백트래킹 (Dependency-Directed Backtracking)

**amb 기반 탐색의 문제**: 실패가 발생하면 무작정 직전 선택지로 돌아감 (연대기적 백트래킹). 이미 탐색한 공간을 다시 탐색하는 비효율.

**의존성 지향 백트래킹**:
1. 각 값이 의존하는 전제(가설)들을 추적
2. 모순 발생 시 모순의 원인이 된 전제들을 파악
3. 해당 전제들을 포함하는 선택지만 건너뜀 (다른 선택지는 재탐색 불필요)

이는 Chapter 5의 amb와 Chapter 6의 의존성 레이어링이 결합된 결과.

### 퇴화성과 다중 소스 (Degeneracy)

전파 모델은 **여러 독립적인 방법**으로 동일한 값을 추정하고 결합하는 것을 자연스럽게 지원한다 (Chapter 1의 퇴화성 원칙):

```scheme
;; Vega까지의 거리를 두 가지 방법으로 추정:
;; 1. 시차 측정 (Struve)
;; 2. Hipparcos 위성 데이터
;; 전파 시스템이 두 추정값을 자동으로 결합
```

새 추정 방법을 추가하는 것은 새 전파기를 배선도에 추가하는 것으로, 기존 구성 요소를 변경하지 않는 **가산적(additive)** 확장이다.

### 배선도 언어의 특성

- 표현식 트리 대신 **배선도**로 계산 구조를 표현
- 부분 결과가 즉시 사용 가능 (최종 결과를 기다릴 필요 없음)
- 본질적으로 **병렬적, 분산적, 확장 가능**
- 강한 격리(isolation)와 병렬 계산 내장

## 핵심 인용

> "The propagator model is built on the idea that the basic computational elements are propagators, autonomous independent machines interconnected by shared cells through which they communicate. Each propagator machine continuously examines the cells it is connected to, and adds information to some cells based on computations it can make from information it can get from others."

> "The structure is additive: new ways to contribute information can be included just by adding new parts to a network, whether simple propagators or entire subnetworks."

> "Using layering, we incorporate dependencies into the propagator infrastructure in a natural and efficient way... Dependency tracking also provides a substrate for debugging."

## 관련 개념

- [[SDF-ch1-flexibility]] — 퇴화성 원칙과 부분 정보 결합의 완성형
- [[SDF-ch5-evaluation]] — amb의 의존성 지향 업그레이드
- [[SDF-ch6-layering]] — 의존성 레이어가 전파 시스템의 핵심
- [[SDF-overview]]
