읽을 순서 · 15문답과 세 실험
사회자 · 독자의 질문
왜 기계 명령이 아니라 수학적 대상으로 프로그램을 해석하나요?
원전 기반 재구성 답변
컴파일 결과만 보면 변수·반복·함수 같은 언어의 생각이 비트 조작 속에 묻힙니다. Scott와 Strachey는 구현 기계와 독립적으로 프로그램 구문에 수학적 대상을 대응시키려 했습니다. 같은 의미를 가진 두 구현을 비교하고 번역의 올바름을 말하려면 이 분리가 필요합니다.
사회자 기호가 다르면 값도 달라지나요?
답변 도서관 장부에 “3”, 다른 장부에 “11₂”, 또 다른 장부에 “1+2”라고 적어 봅시다. 표기법을 정하고 해석하면 세 표현은 같은 정수 3을 가리킵니다. 하지만 문자열 길이는 각각 다릅니다. 숫자를 관찰하는 일과 인쇄된 글자 수를 관찰하는 일은 다른 질문입니다. 프로그램도 먼저 무엇을 뜻으로 볼지 정해야 합니다. 여기서는 실행 시간이나 메모리 주소가 아니라 정수 입력과 종료 결과를 비교합니다. 기계가 다르다는 이유만으로 결과 의미가 달라지는 것도 아니고, 화면 결과 하나가 같다는 이유만으로 모든 입력에서 같아지는 것도 아닙니다.
출처·범위: §0 인쇄면1–6: 표기와 의미의 구분
직접 확인: 2+3과 10−5의 문자열이 다르면, 정수 의미도 다른가요?
정수 값만 해석하면 둘 다 5입니다. 문자열 자체나 계산 단계 수를 관찰한다면 차이가 있습니다. 같은지 묻기 전에 관찰 대상을 정해야 합니다.
사회자 · 독자의 질문
의미함수는 무엇을 하나요?
원전 기반 재구성 답변
구문 조각을 적절한 의미 영역의 값으로 보냅니다. 식은 값 계산으로, 명령은 상태 변환으로 읽을 수 있습니다. 중요한 점은 문장 전체의 의미가 구성요소의 의미로부터 조립된다는 합성성입니다.
사회자 문장을 조립하듯 뜻도 조립해 볼까요?
답변 I(x)=x+1, D(x)=2x를 두겠습니다. “증가한 뒤 두 배”라는 문장 I;D의 뜻은 D(I(x))=2x+2입니다. “두 배 한 뒤 증가”인 D;I는 I(D(x))=2x+1입니다. 두 문장은 같은 부품을 쓰지만 결합 순서가 다릅니다. x=4를 넣으면 첫 문장은 10, 둘째 문장은 9입니다. 합성성은 부품을 아무렇게나 섞어도 된다는 뜻이 아닙니다. 구문이 지정한 구조에 맞춰 이미 정한 부품의 뜻을 조립한다는 조건입니다. 실험 1에서 두 명령의 중간 값까지 읽으면 이 차이를 확인할 수 있습니다.
출처·범위: §1 인쇄면7–14: 명령과 순차 합성
직접 확인: x=2에서 증가→두 배의 중간 값과 마지막 값은 무엇인가요?
2→3→6입니다. 두 배→증가는 2→4→5입니다. 마지막 숫자만 맞히지 말고 중간 상태가 다음 명령의 입력이 되는지 확인합니다.
사회자 · 독자의 질문
상태(store)는 왜 필요한가요?
원전 기반 재구성 답변
대입 전후에 변수 값이 바뀌기 때문입니다. 이 작은 예에서는 환경을 고정하고 상태를 변수에서 값으로 가는 대응으로 단순화합니다. 그러면 x:=x+1의 의미는 한 상태를 받아 x만 1 늘린 새 상태를 내놓는 함수가 됩니다.
사회자 한 칸을 고치면 다른 칸도 바뀌나요?
답변 상태를 (x,y)=(2,9)라고 적고 x:=x+1을 실행합시다. 이 명령의 규칙은 x만 바꾸므로 결과는 (3,9)입니다. y를 보존한다는 조건도 의미의 일부입니다. x만 적힌 출력 화면에 3이 보였다고 해서 y가 보존됐다는 사실까지 확인한 것은 아닙니다. 전체 상태를 비교하려면 y도 읽어야 합니다. 이 글의 화면 실험은 정수 x 한 개만 다룹니다. 두 변수 예는 상태의 범위를 설명하기 위한 별도 손계산입니다. 실제 대출 권수에 음수가 없더라도 실험에서는 함수 비교를 위해 음의 정수도 허용합니다.
출처·범위: §1 인쇄면7–8; 정수 대입은 편집부 예
직접 확인: (x,y)=(5,8)에서 x:=2*x 뒤에 y:=y+1을 실행하면?
첫 명령 뒤 (10,8), 둘째 뒤 (10,9)입니다. 첫 명령은 y를 읽거나 바꾸지 않고, 둘째는 x를 읽거나 바꾸지 않습니다.
사회자 · 독자의 질문
환경(environment)과 상태는 같은가요?
원전 기반 재구성 답변
환경은 식별자에 뜻을 연결하는 대응입니다. 원전 §4의 작은 언어에서는 명령 식별자를 상태변환에 연결합니다. 예를 들어 bump라는 이름에 “정수를 1 늘리는 함수”를 연결할 수 있습니다. 변수 이름→저장 위치→현재 값이라는 익숙한 설명은 별도의 교육용 확장입니다. 원전 §5는 위치를 값의 한 종류로 도입하지만 대입의 전체 의미론은 자세히 전개하지 않습니다. 두 설명을 같은 정의처럼 섞지 않겠습니다.
사회자 이름의 뜻을 바꾸는 것과 저장된 값을 바꾸는 것은 어떻게 다른가요?
답변 첫 패널에서는 ρ(bump)=I로 두고 bump를 실행합니다. I(x)=x+1이므로 x=3이 4가 됩니다. 같은 이름을 ρ′(bump)=D로 다시 연결하면 같은 입력 3에서 6을 얻습니다. 이것은 이름이 가리키는 명령의 뜻을 바꾼 경우입니다. 둘째 패널은 다른 교육용 모형입니다. 이름 x가 위치 L7을 가리키고 저장소의 L7 값이 3이라면, L7의 값을 4로 고쳐도 이름이 가리키는 위치는 그대로입니다. 두 패널은 서로 다른 대응 관계를 보여 줍니다. 원전의 명령 환경을 곧바로 메모리 주소표라고 부르면 안 되는 이유입니다.
출처·범위: §4 인쇄면26–27; 위치의 언급은 §5 인쇄면31
직접 확인: ρ(bump)=I와 ρ′(bump)=D에서 입력 2의 결과를 비교해 보세요.
I(2)=3, D(2)=4입니다. 같은 식별자라도 환경이 달라지면 그 식별자의 의미가 달라질 수 있습니다.
사회자 · 독자의 질문
순차 실행의 의미는 어떻게 합치나요?
원전 기반 재구성 답변
먼저 C1의 상태변환을 적용하고 그 결과에 C2를 적용하므로 함수 합성으로 나타냅니다. 실행 순서를 거꾸로 합성하면 결과가 달라질 수 있어 표기 순서와 적용 순서를 직접 확인해야 합니다.
사회자 다른 칸을 바꾸는 명령이면 순서를 바꿔도 괜찮나요?
답변 서로 다른 칸에 쓴다는 사실만으로는 부족합니다. (x,y)=(1,2)에서 x:=y 뒤에 y:=x를 실행하면 먼저 (2,2)가 되고 끝까지 (2,2)입니다. 순서를 바꾸면 첫 명령 y:=x 뒤에 (1,1)이 되고 마지막도 (1,1)입니다. 두 명령은 상대가 바꾼 칸을 읽기 때문에 결과가 달라집니다. 반면 x:=x+1과 y:=y+1은 서로의 칸을 읽지 않으므로 이 정수 모형에서 순서를 바꿔도 (2,3)입니다. 부작용·오류·공유 위치가 없는 지금의 조건을 벗어나면 다시 따져야 합니다.
출처·범위: §1 인쇄면10–14; 두 변수 반례는 편집부 예
직접 확인: I;D의 의미를 I∘D라고 쓰면 어떤 실수가 생기나요?
통상적인 함수 합성에서 I∘D는 D를 먼저 적용합니다. I;D를 나타내려면 D∘I라고 써야 합니다. x=1에서 잘못 쓴 식은 3, 올바른 식은 4입니다.
사회자 · 독자의 질문
조건문은 어떻게 수학식이 되나요?
원전 기반 재구성 답변
조건이 참이면 첫 명령을, 거짓이면 둘째 명령을 고릅니다. 이 글의 예에서는 조건을 검사해도 상태가 바뀌지 않는다고 정합니다. 원전 §1은 조건 평가가 상태도 바꿀 수 있는 더 넓은 틀을 다룹니다. 화면의 세 실험은 순차 실행·유한 입력 대조·반복 근사이며, 일반 조건문 실행기를 별도로 제공하는 것은 아닙니다.
사회자 조건이 거짓일 때도 두 분기를 모두 실행하나요?
답변 “x<3이면 x에 1을 더하고, 아니면 그대로 둔다”고 정합시다. x=2에서는 조건이 참이므로 3, x=4에서는 거짓이므로 4입니다. 고르지 않은 분기는 실행하지 않습니다. 이 예의 조건은 x를 읽기만 합니다. 만약 조건 검사 자체가 방문 횟수를 늘린다면 조건 평가 뒤의 상태를 선택한 분기에 전달해야 합니다. 같은 참·거짓 값이 나왔다고 상태까지 같다고 할 수 없습니다. 여기서는 그런 부작용 조건을 구현하지 않았으므로 실제 언어의 조건 평가 전체를 실험 결과로 보증하지 않습니다.
출처·범위: §1 인쇄면11–14; 화면은 부작용 없는 조건만 사용
직접 확인: x=3에서 “x<3이면 증가, 아니면 두 배”의 결과는?
3<3은 거짓이므로 두 배 분기를 골라 6이 됩니다. “이하”와 “미만”을 혼동하면 틀립니다.
사회자 · 독자의 질문
반복문은 왜 고정점이 필요한가요?
원전 기반 재구성 답변
반복의 의미를 정의하려면 그 반복 자체의 의미를 다시 참조하게 됩니다. 유한 횟수 근사들을 아래에서 쌓고, 이를 보존하는 연속적 함수의 최소 고정점으로 반복의 의미를 잡습니다.
사회자 반복 전체를 한 번 더 펼치면 무엇이 보이나요?
답변 W를 while x<3 do x:=x+1의 뜻이라고 합시다. 입력 x가 3 이상이면 W(x)=x입니다. 입력 x가 3보다 작으면 한 번 증가한 x+1에서 나머지 반복을 수행하므로 W(x)=W(x+1)입니다. x=1을 넣으면 W(1)=W(2)=W(3)=3이 됩니다. 이 식은 원하는 관계를 쓰지만, 모든 재귀식에서 그것만으로 유일한 답을 정하는 것은 아닙니다. 항상 참인 조건에 skip을 반복하면 식은 W(x)=W(x)가 되어 아무 결과나 허용하는 듯 보입니다. 그래서 종료 정보를 근거 없이 더하지 않는 최소 해를 고르는 기준이 필요합니다.
출처·범위: §2 인쇄면15–19: 재귀 명령의 방정식
직접 확인: 항상 참인 조건에서 skip을 반복하는 식 W(x)=W(x)만으로 종료 결과를 정할 수 있나요?
정할 수 없습니다. 임의의 상수 함수도 식을 만족합니다. 최소 부분함수 의미는 어떤 입력에도 종료 결과를 주지 않는 ⊥ 함수입니다.
사회자 · 독자의 질문
왜 ⊥에서 시작하나요?
원전 기반 재구성 답변
⊥는 아직 결과 정보가 없는 계산을 나타냅니다. w₀는 모든 입력에 대해 결과 미정인 함수입니다. “본문을 0번 실행해 입력을 그대로 반환한다”는 뜻이 아닙니다. wₙ₊₁(s)는 조건이 거짓이면 s이고, 참이면 wₙ(본문(s))입니다. 근사 번호를 늘리며 더 많은 종료 입력의 결과를 알게 됩니다. 유한한 관측에서 결과가 아직 없다는 사실만으로 비종료를 증명하지는 않습니다. 오류와 ⊥를 자동으로 같게 두지는 않습니다.
사회자 w₀부터 직접 표를 채워 볼까요?
답변 w₀는 모든 입력에서 ⊥입니다. w₁은 조건이 이미 거짓인 입력만 반환합니다. 그래서 w₁(3)=3이지만 w₁(2)는 w₀(3)=⊥입니다. 다음 w₂(2)=w₁(3)=3, w₃(1)=w₂(2)=3, w₄(0)=w₃(1)=3이 됩니다. 입력 0에서는 본문을 세 번 실행하지만 결과를 알게 되는 근사 번호는 4입니다. 종료 조건을 확인하는 한 층이 필요하기 때문입니다. 반대로 입력 4는 본문을 한 번도 실행하지 않지만 w₀(4)는 여전히 ⊥이고 w₁(4)=4입니다. 근사 번호를 실행 횟수라고 읽지 마세요.
출처·범위: §3 인쇄면20–25; 구체 while 표는 편집부 예
직접 확인: 입력 x=−1이면 처음 결과가 나타나는 근사는 몇 번째인가요?
본문을 네 번 실행해 3에 도달한 뒤 조건이 거짓임을 확인하므로 w₅(−1)=3입니다. 화면이 w₄까지만 보여 준다면 끝까지 ⊥가 남아도 비종료라고 결론낼 수 없습니다.
사회자 · 독자의 질문
재귀식도 같은 방법으로 다룰 수 있나요?
원전 기반 재구성 답변
재귀 정의가 만드는 함수 F를 세우고 F를 반복 적용해 최소 고정점을 구합니다. 교육용 유한 표는 원리를 보여 줄 뿐, 무한 영역에서의 존재 정리는 완비성과 연속성 같은 조건을 따로 요구합니다.
사회자 팩토리얼도 밑에서부터 계산할 수 있나요?
답변 자연수 입력에 대해 f₀(k)=⊥, fₙ₊₁(0)=1, fₙ₊₁(k)=k·fₙ(k−1)(k>0)로 정합시다. ⊥에 수를 곱한 결과는 ⊥로 둡니다. f₁은 0의 결과 1만 알고, f₂는 1의 결과 1까지, f₃는 2의 결과 2까지, f₄는 3의 결과 6까지 압니다. 이 계산에서 음수 입력은 정의하지 않았습니다. 팩토리얼 표는 반복 근사와 같은 발상을 보여 주는 별도 예이며 화면의 while 실험에 숨겨진 기능은 아닙니다. 유한 표 몇 칸이 모든 재귀 함수의 수렴을 증명하지도 않습니다.
출처·범위: §3 인쇄면20–25; 자연수 팩토리얼 표는 편집부 예
직접 확인: f₂(2)와 f₃(2)는 각각 얼마인가요?
f₂(2)=2·f₁(1)=⊥입니다. f₃(2)=2·f₂(1)=2입니다. 0에서 시작한 정보를 한 번에 한 층씩 확장합니다.
사회자 · 독자의 질문
의미가 구현과 독립적이면 실행 비용은 사라지나요?
원전 기반 재구성 답변
이 논문의 목표 의미론에서는 우선 무엇을 계산하는지를 정합니다. 얼마나 빠른지, 메모리를 얼마나 쓰는지는 별도 비용 의미론이나 구현 분석이 필요합니다. 같은 결과 의미라도 효율은 다를 수 있습니다.
사회자 답이 같아도 느린 프로그램이 있을 수 있나요?
답변 P를 x:=x+2, Q를 x:=x+1; x:=x+1로 둡시다. 무한 정수 모형에서 모든 입력에 대해 둘 다 x+2를 냅니다. 단순히 명령문 한 개를 비용 1로 세면 P는 비용 1, Q는 비용 2입니다. 이 비용은 편집부가 정한 문장 수이며 실제 CPU 시간의 측정값이 아닙니다. 컴파일러가 두 프로그램을 같은 기계 명령으로 바꿀 수도 있습니다. 따라서 결과 의미가 같다는 증명과 어느 쪽이 빠른지의 측정은 다른 검증입니다. 같은 결과를 낸다는 이유만으로 더 싸거나 안전하다고 결론내리지 않습니다.
출처·범위: §0의 구현 독립성과 구별되는 편집부 비용 예
직접 확인: P와 Q가 같은 결과를 내면 메모리 사용량도 같다고 할 수 있나요?
아닙니다. 지금 의미 모형에는 메모리 사용량이 관찰 항목으로 들어 있지 않습니다. 그것을 비교하려면 비용 모형이나 실제 측정 조건을 추가해야 합니다.
사회자 · 독자의 질문
함수 호출은 어떻게 해석하나요?
원전 기반 재구성 답변
함수 호출의 뜻을 정하려면 인수를 언제 평가하고 어떤 환경에서 몸체를 해석하는지 밝혀야 합니다. 아래 계산은 부작용 없는 값 전달 방식을 택한 편집부의 작은 예입니다. 원전 §5의 프로시저는 인수와 상태를 받아 결과 값과 바뀐 상태를 내놓을 수 있습니다. 이 범위를 단순한 정수 함수 하나와 같다고 주장하지 않습니다.
사회자 작은 호출 하나를 처음부터 끝까지 읽어 주세요.
답변 부작용 없는 값 전달 예로 f(a)=a+1, 호출 f(2+2)를 고릅시다. 먼저 인수 2+2를 계산해 4를 얻고, 매개변수 a에 값 4를 연결한 환경에서 몸체 a+1을 계산해 5를 얻습니다. 밖에 같은 이름 a=100이 있어도 이 예에서는 함수 안의 매개변수 a가 4를 가리킵니다. 반환 뒤 바깥 a는 100으로 남습니다. 이는 이름의 범위를 설명하려고 고른 단순한 규칙입니다. 실제 언어의 참조 전달·이름 전달·부작용·클로저 전체가 이 예 하나로 결정되지 않으며, PRG-6의 프로시저 공간 전체를 재현한 것도 아닙니다.
출처·범위: §5 인쇄면30–31: 값과 상태를 받는 프로시저; 값 전달 예는 별도 단순화
직접 확인: 바깥 a=10일 때 같은 예의 f(3)은 얼마이며 바깥 a는 어떻게 되나요?
반환 값은 4, 바깥 a는 10입니다. 이 예는 매개변수의 지역 바인딩을 사용하고 바깥 저장소를 바꾸는 부작용을 두지 않았습니다.
사회자 · 독자의 질문
의미식이 프로그램 실행기인가요?
원전 기반 재구성 답변
의미식은 구현 절차를 지시하는 코드라기보다 프로그램이 뜻하는 수학적 대상을 규정합니다. 식을 계산 가능하게 만들 수는 있지만, 논문의 주된 구분은 의미와 구현을 섞지 않는 데 있습니다.
사회자 정수 뜻과 실제 기계의 실행을 어떻게 비교하나요?
답변 뜻을 I(n)=n+1로 정해도 컴퓨터가 무한한 정수를 한 번에 저장할 수 있다는 결론은 나오지 않습니다. 예를 들어 0부터 255까지만 담는 8비트 부호 없는 저장소를 택하고 넘치면 0으로 돌아간다고 정합시다. 입력 4에서는 수학식과 기계 모두 5를 냅니다. 입력 255에서는 수학식이 256을 내지만 이 기계 규칙은 0을 냅니다. 그러므로 입력 범위를 0..254로 제한하거나, 더 큰 정수 표현을 쓰거나, 넘침을 뜻에 포함해야 합니다. 어떤 선택을 했는지 없이 구현이 올바르다고 말할 수 없습니다. 그림은 비교해야 할 관계를 보여 주며 두 구현의 일치를 증명한 그림은 아닙니다.
출처·범위: §0 구현과 의미의 구분; §5의 위치 언급과 구별되는 편집부 8비트 예
직접 확인: 8비트 순환 규칙에서 255에 1을 더한 결과와 정수 의미를 비교해 보세요.
순환하는 기계 결과는 0, 무한 정수 의미는 256입니다. 허용 입력을 제한하지 않았다면 이 구현은 I(n)=n+1의 모든 정수 입력을 그대로 구현한 것이 아닙니다.
사회자 · 독자의 질문
두 프로그램의 의미가 같다는 말은 무엇인가요?
원전 기반 재구성 답변
이 글의 결정적·단일 스레드 모형에서는 입력 상태마다 종료 여부와 최종 상태가 같은지 비교합니다. 출력값이나 상태의 일부만 관찰한다면 그것은 더 약한 관찰 동등성입니다. 어떤 기계와 자료형을 정했는지도 중요합니다. 원전 §4의 모델 안에서의 동치와, 편집부가 정한 관찰 범위를 구별하겠습니다.
사회자 화면에 x만 보여 주면 무엇을 놓치나요?
답변 P가 (x,y)를 (1,0)으로, Q가 (1,9)로 만드는 두 프로그램이라고 합시다. 화면에 x만 보여 주면 둘 다 1이므로 구별되지 않습니다. x와 y를 함께 관찰하면 곧바로 구별됩니다. 처음부터 최종 상태 전체가 같다고 정의했다면 P와 Q는 동치가 아닙니다. 제한된 화면에서 같아 보인다는 사실은 더 약한 명제입니다. 실험 2는 x만 가진 정수 상태와 다섯 입력이라는 두 가지 제한을 모두 사용합니다. 화면에서 “같다”고 읽을 때는 바로 옆에 적힌 그 범위를 함께 읽어야 합니다.
출처·범위: §4 인쇄면28–29의 모형 상대적 동치; 관찰 투영 예는 편집부 구성
직접 확인: y가 보이지 않는 화면에서 같았다는 관찰로 전체 상태 동치를 증명할 수 있나요?
없습니다. 관찰하지 않은 성분이 다를 수 있습니다. 반례의 P와 Q는 x 관찰에서는 같고 전체 (x,y) 관찰에서는 다릅니다.
사회자 · 독자의 질문
작은 상태표로 일반 정리를 증명할 수 있나요?
원전 기반 재구성 답변
아닙니다. 화면 실험의 상태는 정수 x 한 개이며, 동치 대조 입력은 −2, −1, 0, 1, 2의 다섯 값입니다. 이 표는 반례를 찾고 합성 규칙을 이해하는 교육용 모형입니다. 모든 프로그램에 대한 정당성은 원문의 영역·함수 조건과 수학적 증명을 따로 요구합니다.
사회자 다섯 입력을 모두 통과해도 반례가 남을 수 있나요?
답변 P(x)=x, Q(x)=x가 3이면 4를 반환하고 그 밖에는 x를 반환한다고 정합시다. 시험 입력 −2,−1,0,1,2에서는 두 프로그램의 결과가 모두 같습니다. 그러나 입력 3에서는 P(3)=3, Q(3)=4입니다. 표의 모든 칸을 확인했다는 사실은 표 밖의 입력을 확인했다는 뜻이 아닙니다. 실험 2가 다섯 입력의 성공을 전체 정수 동치 증명이라고 부르지 않는 이유입니다. 반례 하나는 전칭 주장을 깨뜨릴 수 있지만, 성공한 사례를 많이 모았다는 것만으로 무한한 전칭 주장이 완성되지는 않습니다.
출처·범위: §4 인쇄면29의 동치와 유한 검사 범위의 구별
직접 확인: 시험 입력에 3을 추가하면 무엇이 달라지나요?
반례가 드러나 두 함수가 같다는 주장을 반박할 수 있습니다. 다만 새 표를 통과한 다른 함수들이 모든 정수에서 같다는 보장은 여전히 없습니다.
사회자 · 독자의 질문
이번 글의 결론은 어디까지인가요?
원전 기반 재구성 답변
구문을 상태·함수·고정점과 연결하면 프로그램의 의미를 구현 기계와 분리해 구성적으로 설명할 수 있습니다. 다만 실제 언어의 예외, 동시성, 입출력 전체를 이 작은 모형이 포괄한다고 주장하지 않습니다.
사회자 마지막으로 무엇을 실제로 확인한 셈인가요?
답변 정수 명령의 순서, 다섯 입력에서의 결과 비교, while 근사의 처음 다섯 층을 실제 계산했습니다. 각 결과는 명령의 규칙과 초기값에서 다시 계산할 수 있습니다. 별도 손계산에서는 환경의 종류, 교차 읽기, 팩토리얼 근사, 비용과 관찰 범위를 구별했습니다. 이 글을 읽고 확인할 질문은 “같다”라는 말 뒤에 어떤 입력·상태·종료·관찰 조건이 붙어 있는가입니다. 이 조건을 빠뜨린 채 실제 은행·시험·대출 시스템의 정확성을 보증해서는 안 됩니다. 작은 모형의 검산과 운영 시스템 검증은 각각 필요한 증거가 다릅니다.
출처·범위: §6 인쇄면39–41; 이 글의 적용 범위 정리
직접 확인: 실험 3에서 x=−10의 w₄가 ⊥이면 프로그램이 영원히 끝나지 않는다는 뜻인가요?
아닙니다. 이 반복은 3까지 열세 번 증가하고 w₁₄에서 결과 3이 나타납니다. 지금 화면이 보여 주는 근사 범위 밖일 뿐입니다.
직접 실험 · 순서, 유한 입력, 반복 근사
정수 연산은 BigInt로 계산합니다. 음의 정수도 허용하며 실제 대출 권수나 기계 정수 오버플로를 재현하는 모형은 아닙니다. 입력은 20자리 이하의 정수입니다.
1. 명령 순서를 바꾸면?
2. 유한 입력에서 비교하기
현재 고른 두 명령과 반대 순서를 x=-2,-1,0,1,2에서 대조합니다. 다른 결과를 찾으면 첫 반례를 보여 줍니다.
3. w₀와 ‘0번 실행’은 다릅니다
w₀(x)=⊥입니다. wₙ₊₁(x)는 조건이 거짓이면 x이고, 참이면 wₙ(본문(x))입니다.
본문은 x:=x+1입니다. 유한 표의 ⊥는 아직 종료 결과를 얻지 못했다는 뜻이며, 이것만으로 비종료를 증명하지 않습니다.
출처와 적용 범위
- Dana Scott · Christopher Strachey (1971)
Toward a Mathematical Semantics for Computer Languages, Oxford Technical Monograph PRG-6, August 1971. Oxford 공식 PDF는 표지 등을 포함한 49페이지이며 본문의 인쇄면은 1–43입니다. 인쇄면 1은 PDF 뷰어의 7번째 페이지입니다. DOI를 추정해 넣지 않았습니다.
- 직접 대조한 중심 범위
§0 표기와 의미, §1 상태·명령·합성, §2 재귀 방정식, §3 격자·최소 고정점, §4 명령 식별자 환경과 모형 상대적 동치, §5의 프로시저 도입 부분을 대조했습니다. 고차 재귀 영역의 전체 구성·모든 증명·실제 프로그래밍 언어를 독립 검증했다고 주장하지 않습니다.
- 원전의 영역과 편집부 모형
원전은 §3에서 아래·위 원소를 덧붙인 완비 격자와 연속 함수 공간을 설명합니다. 여기의 정수·⊥ 반복 표는 부분함수 근사를 보여 주는 단순화이며 원전의 모든 영역 구성과 동일하지 않습니다. 명령 이름의 환경과 변수 이름·저장 위치 표도 서로 다른 설명입니다. 8비트 순환·팩토리얼·비용·관찰 투영 예는 별도의 손계산입니다.
- 이번 실험이 하지 않는 일
실제 기계의 실행 시간·입출력·동시성·예외·권한·컴파일러 정확성을 검사하지 않습니다. 유한 입력에서 성공한 결과를 모든 정수 또는 모든 프로그램의 동치 증명으로 확대하지 않습니다.
읽기를 마치며
명령의 뜻을 정하고, 그 뜻을 순서대로 조합하고, 반복에서 아직 모르는 결과와 이미 확인한 결과를 나눠 보았습니다. “같다”라는 결론에는 입력과 관찰 범위가 따라붙습니다. 그 범위를 정확히 적는 일도 검증의 일부입니다.
처음으로