- 최소한의 문법으로 계산을 구성하려는 체계로, 하나의 연산자 △ 와 적용만으로 최소성·튜링 완전성·반영성·모듈성을 모두 다룸
- 문법은
E::= △ | E E이며, △ 가 세 값에 작용할 때 계산되고 값은 잎·줄기·갈래 노드로 이루어진 자연 이진 트리임 - 조합 논리의 K와 S를 Tree Calculus 안에서 표현할 수 있어 튜링 완전성을 갖고, λ-calculus와 달리 재귀 함수를 정규형으로 표현할 수 있음
- 프로그램도 값으로 다뤄지므로 자기 적용을 통한 인트로스펙션과 반영이 가능하며,
size size가 168로 평가되는 예가 있음 - 하위 항이 하위 트리로 드러나 공통 기능 부트스트랩, 직렬화, 프로그램 분석·최적화, 정적·동적 타이핑 같은 데모로 이어짐
한 연산자로 만드는 자연 이진 트리
- Tree Calculus는 Barry Jay가 발견했으며, 사이트에는 그의 책과 블로그, Johannes Bader가 개발한 데모가 연결되어 있음
- 핵심 특성은 minimal, Turing-complete, reflective, modular 네 가지로 정리됨
-
최소성
- Tree Calculus에는 하나의 연산자 △ 만 있음
- 문법은
E ::= △ | E E형태임 - 시각적으로 △ 는 트리 노드이고,
E1을E2에 적용하면E2가E1의 루트 오른쪽에 붙음 - 값은 자연 이진 트리이며, 노드는 leaf, stem, fork로 불림
- 실용 데모
- portability: 여러 플랫폼에서 단순하고 안전한 인터프리터를 만들 수 있음
- emit-json: 크로스 플랫폼 설정 생성에 적합한 예를 보여줌
튜링 완전성과 반영
-
튜링 완전성
- 조합 논리의 K와 S 연산자를 Tree Calculus로 표현할 수 있음
K = △ △S x = △ (△ x)- 조합 논리의 K/S 기반이 완전하므로 Tree Calculus도 튜링 완전함
- λ-calculus와 달리, orange/brown 같은 고정점 구성으로 재귀 함수를 정규형으로 표현할 수 있음
-
반영성
triage {l, s, f} = △ (△ l s) f는 leaf, stem, fork에 대한 경우 분석을 수행함- 자연수
n은△^n △로 표현할 수 있음 - 0 테스트는
triage {true, K false, K² false}로 구성됨 - 프로그램도 값이므로 intensional 프로그램은 자기 적용으로 인트로스펙션과 반영을 수행할 수 있음
- 예시 프로그램
size는 인자의 노드 수를 계산하며,size size는 168로 평가됨 - 실용 데모
- serialize-anything: 프로그램 직렬화 가능성을 다룸
- halting-problem: 정지 문제를 더 단순하게 공식화함
- fusion: 프로그램 분석·최적화를 함수로 표현함
- gradual-typing: 정적 타이핑과 동적 타이핑을 함수 호출로 다루는 예를 제공함
모듈성과 데모
- 하위 항은 하위 트리로 표현됨
- 페이지 상단의
size프로그램은triage를 사용해 노드를 재귀적으로 셈 - 실용 데모
- bootstrap-basics: 공통 기능을 쉽게 부트스트랩할 수 있음
- size-of-meaningful-programs: 강력한 프로그램이 반드시 큰 트리일 필요는 없음을 보여줌