while 루프의 작은 단계 작동 의미론에서 상태가 변경되지 않은 이유는 무엇입니까?


9

일반적으로 while 루프의 구조적 작동 의미 론적 표현에서 프로그램 상태는 변경되지 않습니다.

(whileBdoS,σ)(ifBthenS;(whileBdoS)elseSKIP,σ)

나에게 이것은 상태가 변하지 않으면 (즉, 메모리 상태가 동일하게 유지되는 경우) 직관적이지 않습니다. B 계속 유지되고 프로그램은 종료되지 않습니다.

이 규칙에서 왜 국가가 바뀌지 않는지 설명해 주시겠습니까?


우리가 가정 할 수있는 경우에만 이것이 정확하다는 점에 유의하십시오. B부작용이 없습니다. 대부분의 프로그래밍 언어에서는 그렇지 않습니다.
Raphael

답변:


10

프로그래밍 언어 의미론에서 프로그램 상태의 개념은 모호한 철학적 개념이 아니라 매우 정확한 수학적 개념입니다. 상태 s 이 작은 단계의 동작 의미론에서 부분 함수는

s:VarZ

변수의 값을 기록합니다. 그래서 만약sx=v그런 다음 변수 x 가치가있다 v. 상태는 실제로 발생하는 변수의 값을 기록하는 것만 의미가 있기 때문에 반드시 부분 함수입니다.

펼쳐지는 공리

whilebdoS,sifbthenS;whilebdoSelse skip,s

while 루프를 조건문으로 펼치면 분기 중 하나에 루프가 포함되어 있음을 알려줍니다. 이로 인해 변수가 값을 변경하지 않으므로 이러한 이유로 상태가 변경되지 않습니다.


10

다음 축소 단계에서 상태가 변경 될 수 있습니다.

while B do S,σif B then (S; while B do S) else skip,σ

그만큼 while-루프는 S. 의 계산S 상태를 변경하여 상태를 변경할 수 있습니다 B 평가할 수있다 false.


그렇다면 이것은 상태 변화가 구체적인 프로그램에서 잠재적으로 감소 될 수있는 다른 규칙으로 표현되어야한다는 것을 의미합니까?
El Marce

@ElMarce 예. 나는 간단한 예를 들도록 제안한다.x:=2; while x>0 do x:=x1어떻게 작동하는지 봅니다.
Martin Berger

9

상태 σ 우리가 고려할 때 변하지 않습니다 B루프의 반복을 한 번 수행할지 여부를 결정하지만 나중에 본문을 실행할 때 변경 될 수 있습니다.S. 그리고 다음에 고려할 때B, 변경 될 수 있습니다 σ.


이 설명은 본질적으로 정확하지만 상태가 무엇인지 (즉, 우리에게 varialbes의 값을 알려주는 함수)와 상태 변경이 의미하는 것 (즉, 하나 이상의 변수 값이 변함)을 언급하지 않습니다.
Hans Hüttel

실제로, 내 대답의 목적을 위해 상태가 무엇인지 또는 어떻게 구현되는지는 관련이 없습니다. 설명은 관계없이 유지됩니다. 게다가, "상태는 실제로 함수이다"라고 말하는 것은 실제로는 문제가 있습니다. 다른 가능한 모델이 있습니다. 그리고 수학적 모델을 하드웨어 작동 방식과 혼동하지 마십시오.
Andrej Bauer

그러나 문제는 국가의 개념이 잘 정의 된 특정 작은 단계의 동작 의미론과 관련이 있습니다.
Hans Hüttel

나는 그것이 아니라고 결코 말하지 않았다. 내 설명은 상태가 어떻게 모델링되는지에 대한 명시적인 언급없이 유지되기 때문에 나는 당신의 말이 불필요하다고 말하고 있습니다. 아마도 OP는 상태가 변수에서 값으로의 맵이라는 것을 알지 못했을 것입니다. 당신에게 좋은, 당신은 당신의 대답을 받아 들였지만 나는하지 않았습니다. 축하합니다. 당신이 지금 나에게 당신의 응답 방식을 강요하는 이유는 제 이해력을 넘어서는 것입니다. 왜 내 대답을 당신의 것으로 만들 필요가 있다고 생각합니까? 내 대답은 당신이 필요하다고 생각하는 말없이 의미가 있습니다. 아마도 누군가 언젠가 내 대답을 찾게 될 것입니다.
Andrej Bauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.