프로그래밍에서 재귀 또는 반복의 모든 형태는 실제로 고정 된 지점입니다. 예를 들어, while
루프는 방정식으로 특징 지어집니다
while b do c done ≡ if b then (c ; while b do c done)
이는 말하자면 while b do c done
용액 인 W
식의
W ≡ Φ(W)
어디서 Φ(x) ≡ if b then (c ; x)
? 그러나 경우에 Φ
한 많은 포인트를 고정? 어느 것이 while
루프에 해당 합니까? 프로그래밍 의미론의 기본 통찰력 중 하나는 그것이 가장 고정 된 점 이라는 것입니다 .
이번에는 재귀라는 간단한 예를 들어 보겠습니다. 하스켈을 사용하겠습니다. 에 f
의해 정의 된 재귀 함수
f :: a -> a
f x = f x
그것은 영원히 실행되기 때문에 어디에나 정의되지 않은 함수입니다. 우리는이 정의를보다 특이한 방식으로 다시 작성할 수 있습니다 (그러나 여전히 Haskell에서 작동합니다).
f :: a -> a
f = f
그래서 f
신원 기능의 고정 된 지점입니다 :
f ≡ id f
그러나 모든 기능은 고정 된 지점입니다 id
. 일반적인 도메인 이론 순서에서 "정의되지 않음"이 가장 적은 요소입니다. 실제로 우리의 함수 f
는 어디에나 정의되지 않은 함수입니다.
요청에 추가 : 의견에 OP는 의미 while
루프 의 부분 순서에 대해 물었습니다 (격자라고 가정했지만 반드시 그럴 필요는 없습니다). 보다 일반적인 질문은 변수를 조작 할 수 있고 기본 제어 구조 (조건 및 루프)를 갖는 절차 언어의 도메인 이론 해석이 무엇인지에 대한 것입니다. 이 캡처 할 정확하게에 따라,이 일을 여러 가지 방법이 있지만, 이제 우리는 고정 된 수 있다고 가정하자 것들을 간단하게 유지하기 위해 전역 변수를x 1 , … , x n V V n → V n ∪ { ⊥ } ( v 1 , … , v n ) ∈ V n ⊥ V n V n → V n ∪ { ⊥ }nx1,…,xn프로그램이 읽고 업데이트 할 수 있으며 다른 것은 없습니다 (I / O 또는 예외 또는 새 변수 할당 없음). 이 경우 프로그램은 변수의 초기 상태를 최종 상태로 변환하거나 프로그램이 순환하는 경우 정의되지 않은 값으로 변환 된 것으로 볼 수 있습니다. 따라서 각 변수에 세트 의 요소가 있으면 프로그램은 모든 초기 구성 대해 매핑에 해당합니다. 변수의 에서 프로그램은 분기하고 생성 하거나 의 요소 인 최종 상태를 종료하고 생성합니다 . 모든지도 는 도메인입니다.VVn→Vn∪{⊥}(v1,…,vn)∈Vn⊥VnVn→Vn∪{⊥}
- 우리의 평면 정렬을 사용 이있는 하단에와의 모든 요소 다음 위의 "플랫"을, 그리고 은 포인트 단위로 주문됩니다.⊥ V n V n → V n ∪ { ⊥ }Vn∪{⊥}⊥VnVn→Vn∪{⊥}
- 가장 작은 요소는 항상 프로그램 (및 다른 많은 것)에 해당하는 매핑되는 함수입니다 .⊥
while true do skip done
- 증가하는 모든 시퀀스에는 최고가 있습니다.
이것이 어떻게 작동하는지, 프로그램의 의미론에 대한 아이디어를 제공하기 위해
x_1 := e
입력으로서 취하는 함수 것 값을 산출 식의 상태 및 반환 .v e ( v 1 , … , v n ) ( v e , v 2 , … , v n )(v1,…,vn)∈Vnvee
(v1,…,vn)(ve,v2,…,vn)