---
title: 전파 모델
tags: [concept, SDF]
sources: [SDF-ch1-flexibility, SDF-ch5-evaluation, SDF-ch6-layering, SDF-ch7-propagation]
updated: 2026-04-30
---

# 전파 모델

## 한 줄 정의

공유 셀로 연결된 자율적 전파기들이 부분 정보를 단조적으로 축적·전파하는 다방향 계산 모델로, 의존성 추적과 결합하면 지능적 백트래킹이 가능한 비결정적 탐색 엔진이 된다.

## 핵심 내용

### 폰 노이만 모델에서의 이탈

전통적 프로그래밍은 폰 노이만 모델을 따른다: 변수는 값 하나를 담고, 표현식은 트리 구조를 타고 올라가며 평가되며, 제어 흐름은 순차적·방향성을 가진다.

이 모델의 근본적 한계: **단방향성**. `v = a * b`는 `v`를 계산하지만, `a`나 `b`를 역으로 구하려면 별도의 수식이 필요하다. 물리 법칙 `F = G*m1*m2/r²`는 6개의 역방향 관계를 함께 담고 있지만, 코드로는 하나의 방향만 표현된다.

전파 모델은 이 단방향성을 깬다:

> "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."

### 셀과 전파기: 두 기본 요소

**셀(cell)**: 정보를 축적하는 공유 저장소.
- 하나의 값 대신 *현재까지 알려진 최선의 정보*를 담는다
- 새 정보가 도착하면 기존 정보와 **병합(merge)**: 단조적, 정보를 잃지 않음
- 모순이 감지되면 신호를 보냄

**전파기(propagator)**: 셀들을 연결하는 자율 기계.
- 입력 셀들의 값을 읽어 계산하고 출력 셀에 정보를 추가
- 입력이 변하면 자동으로 재실행
- 독립적: 다른 전파기의 존재를 모른다

```scheme
;; 곱셈 제약: a * b = c (세 방향 모두)
(define-c:prop (c:* a b c)
  (p:* a b c)    ; c = a * b
  (p:/ c a b)    ; b = c / a (a가 알려지면)
  (p:/ c b a))   ; a = c / b (b가 알려지면)
```

### 배선도 언어

전파 네트워크는 **배선도(wiring diagram)**로 표현된다. 표현식 트리가 아니라 셀(와이어)과 전파기(게이트)로 이루어진 회로도다. 이 비유는 매우 자연스럽다:
- 회로의 와이어는 셀
- 회로의 게이트는 전파기
- 회로 구성 = 전파 네트워크 구성

배선도의 특성:
- **다방향**: 와이어는 양방향. 신호가 어느 방향으로도 흐를 수 있음
- **병렬적**: 여러 게이트가 독립적으로 활성화
- **부분 결과 즉시 사용**: 전체 완료를 기다릴 필요 없음
- **확장 가능**: 새 게이트를 연결하면 기능 추가

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

셀은 숫자 하나 대신 구간을 값으로 가질 수 있다:

```scheme
(make-interval 2.5 3.1)  ; "2.5 이상 3.1 이하"
```

두 측정이 같은 셀에 정보를 제공할 때 교집합을 취한다:
```
구간 [2.5, 3.1] ∩ [2.8, 3.5] = [2.8, 3.1]  ; 더 정확해짐
구간 [2.5, 3.1] ∩ [4.0, 5.0] = ∅           ; 모순!
```

퇴화성 원칙의 구현: 여러 독립 소스가 동일한 셀에 구간 정보를 제공하고, 시스템이 자동으로 병합하여 더 정확한 답을 낸다.

### 의존성 추적과 전제

레이어링(Ch6)의 의존성 레이어를 전파 모델에 통합하면, 각 셀의 값이 어떤 전제(premise)에서 유래했는지를 추적한다:

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

파생된 값의 전제 집합 = 모든 기여 전제들의 합집합. 전파되는 값에 의존성 정보가 자동으로 따라간다.

이를 통해 두 가지 능력이 생긴다:
1. **설명(explanation)**: "이 결론이 어떤 데이터에서 유래했는가?"
2. **지능적 백트래킹**: 모순의 원인을 파악하여 관련 없는 선택지를 재탐색하지 않음

### 의존성 지향 백트래킹

Ch5의 amb는 실패하면 직전 선택지로 돌아가는 연대기적(chronological) 백트래킹을 사용한다. 이는 이미 검증된 부분을 불필요하게 재탐색하는 비효율이 있다.

의존성 지향 백트래킹(dependency-directed backtracking):

1. 각 결정(hypothesis)이 전제 레이블을 가짐
2. 모순 발생 → 모순을 일으킨 전제들의 집합(nogood set) 파악
3. 이 전제들 중 하나를 번복하는 선택지로 직접 점프
4. 관련 없는 선택지들은 건너뜀

예: 100개의 선택지 중 1번과 50번이 모순을 일으킨다면, 2~49번은 탐색하지 않고 바로 1번 또는 50번을 번복하는 선택지를 찾는다.

### 가산적 확장의 완성형

전파 네트워크는 가산적 프로그래밍의 이상에 가장 가깝다:

> "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."

새 추정 방법은 새 전파기 추가. 새 제약은 새 제약 전파기 추가. 기존 네트워크는 전혀 수정하지 않는다.

## SDF에서의 등장

- [[SDF-ch1-flexibility]]: 탐색적 행동, 퇴화성, 생성-검증 메커니즘으로 동기 부여. 전파 모델의 철학적 선구자
- [[SDF-ch5-evaluation]]: amb가 연대기적 백트래킹을 구현. 전파 모델이 이를 의존성 지향으로 업그레이드한다는 관계
- [[SDF-ch6-layering]]: 의존성 레이어가 전파 시스템의 핵심 재료. 없으면 의존성 지향 백트래킹 불가
- [[SDF-ch7-propagation]]: 핵심 챕터. 셀/전파기 구조, 구간 산술, 전제를 가진 값, 의존성 지향 백트래킹, 배선도 언어

## 실천 시 주의점

**수렴 보장**: 전파기 네트워크가 무한 루프 없이 고정점(fixed point)에 수렴한다는 보장이 필요하다. 단조적 병합이 이를 보장하는 핵심 조건이다. 비단조적 업데이트(값을 번복하거나 구간을 넓히는 것)가 있으면 수렴이 보장되지 않는다.

**디버깅의 어려움**: 다방향 전파는 "이 값이 어디서 왔는가?"를 추적하기 어렵게 만들 수 있다. 의존성 추적이 이 문제를 부분적으로 해결하지만, 복잡한 네트워크에서는 여전히 어렵다.

**순환 의존성**: 셀 A의 값이 전파기를 통해 셀 B에 영향을 주고, 셀 B가 다시 셀 A에 영향을 줄 때 순환이 발생한다. 이것이 의미 있는 제약(예: `x + y = z, x - y = w`)인지 아니면 실수인지 구분이 필요하다.

**확장의 위험**: "새 전파기를 추가만 하면 된다"는 가산성이 실제로는 기존 네트워크의 동작을 변경할 수 있다. 새 전파기가 기존 셀에 더 좁은 구간을 강요하면 이전에 유효했던 값이 모순이 될 수 있다.

## 관련 개념

- [[additive-programming]] — 배선도에 전파기 추가가 가장 순수한 형태의 가산적 확장
- [[partial-information]] — 셀은 부분 정보를 단조적으로 축적하는 저장소
- [[degeneracy]] — 여러 전파기가 동일 셀에 독립적 추정값을 제공하는 퇴화적 구조
- [[layered-data]] — 의존성 레이어가 전파 시스템의 지능적 백트래킹을 가능하게 함
- [[domain-specific-language]] — 배선도 언어 자체가 제약 기반 DSL
