Symbolic Execution and Proof of Properties

Learning Objectives

1. Symbolic Execution

: program behavior(execution) 과 logic(predicate) 사이의 다리 역할

https://www.lazenca.net/pages/viewpage.action?pageId=6324534

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f32ad4f6-6eeb-4890-9df9-f60c75911a35/Untitled.png

2) Summary information

정보를 덜 가지고 있지만 correctness를 추론하는 데에는 충분하다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d742f4af-3e7e-4ff7-b807-2528da006105/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e8c79988-cf61-40ee-b6db-cd0a86dcd12b/Untitled.png

3) Weaker Precondition

4) Loops and Assertions

5) Precondition and Postcondition

: 사람이 제공한다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/60b96d1d-feea-4292-ba9f-cfcd344123ca/Untitled.png

2. Verification of Program Correctness (#109-#111)

: precondition이 주어지고, invariant한 loop를 다 실행한 후 postCondition을 만족한다면

⇒ pre&post condition에 대해 correct하다고 할 수 있다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c17edb78-9eca-4ce5-8134-b49d9ffaaa26/Untitled.png

1) Hoare triple : inference

: precondition을 만족하고 block에 들어가서 postCondition을 만족하는 상태로 간다.

https://ropas.snu.ac.kr/~dreameye/PL/slide/PL10.pdf

Top을 증명한다면, 아래를 추론할 수 있다.

Top을 증명한다면, 아래를 추론할 수 있다.

새로운 프로그래밍 언어를 만들었을 때 정상 동작을 증명하기 위해 위를 밝히면 아래를 추론할 수 있다.

새로운 프로그래밍 언어를 만들었을 때 정상 동작을 증명하기 위해 위를 밝히면 아래를 추론할 수 있다.

2) Reasoning Style

: contract = precondition + postcondition을 만들어 놓고 필요한 곳에서 불러서 씀

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1566829f-b4b4-4392-babb-1e3a0416c24a/Untitled.png

Summary