Hoare Logic { sample proofs September 25, 2006 Swap Program

Swap Program
Hoare Logic { sample proofs
September 25, 2006
Hoare Logic { sample proofs
Swap Program
Hoare Triple
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = b s y = a
1.
P1.
^
pre
code
goal
Hoare Logic { sample proofs
Swap Program
Semi
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
P2. (x := s :s x + s y )
3. s x = a + b s y = b
4. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
5. s x = b s y = a
6. s x = b s y = a
1.
P1.
^
^
^
^
^
Mid:
s x =a+b
pre
code
pre
code
goal
mid
code
goal
semi P1 (2, 4) (5, 6)
^ s y = b.
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
3. (s :s x = a + b s y = b )(s [x
P2. (x := s :s x + s y )
4. s x = a + b s y = b
5. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
6. s x = b s y = a
7. s x = b s y = a
1.
P1.
^
^
^
^
^
^
pre
code
pre
7! s x + s y ]) goal
code
assg 3
mid
code
goal
semi P1 (2, 4) (5, 6)
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
3. (s :s x = a + b s y = b )(s [x
P2. (x := s :s x + s y )
4. s x = a + b s y = b
5. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
6. s x = b s y = a
7. s x = b s y = a
1.
P1.
^
^
^
^
^
^
pre
code
7! s x + s y ])
pre
simp 2
code
assg P2 3
mid
code
goal
semi P1 (2, 4) (5, 6)
Hoare Logic { sample proofs
Swap Program
Semi
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
3. (s :s x = a + b s y = b )(s [x
P2. (x := s :s x + s y )
4. s x = a + b s y = b
5. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
6. s x = a + b s y = b
pre
P4. (y := s :s x
s y)
code
7. s x = a + b s y = a goal
8. s x = a + b s y = a mid
P5. (x := s :s x
s y)
code
9. s x = b s y = a
goal
10. s x = b s y = a
11. s x = b s y = a
1.
P1.
^
^
^
^
pre
code
7! s x + s y ])
pre
simp 2
code
assg P2 3
mid
code
^
^
^
^
^
^
Mid:
s x =a+b
semi P3 (6, 7) (8,9)
semi P1 (2, 4) (5, 10)
^ s y = a.
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
3. (s :s x = a + b s y = b )(s [x
P2. (x := s :s x + s y )
4. s x = a + b s y = b
5. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
6. s x = a + b s y = b
7. (s :s x = a + b s y = a)(s [y
P4. (y := s :s x
s y)
8. s x = a + b s y = a
9. s x = a + b s y = a
P5. (x := s :s x
s y)
10. s x = b s y = a
11. s x = b s y = a
12. s x = b s y = a
1.
P1.
^
^
pre
code
pre
7! s x + s y ])
simp 2
code
^
^
^
^
^
^
^
^
^
assg P2 3
mid
code
7! s x
s y ])
pre
goal
code
assg P4 7
mid
code
goal
semi P3 (6, 8) (9,10)
semi P1 (2, 4) (5, 11)
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
((x := s :s x + s y );
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
3. (s :s x = a + b s y = b )(s [x
P2. (x := s :s x + s y )
4. s x = a + b s y = b
5. s x = a + b s y = b
P3. ((y := s :s x
s y );
(x := s :s x
s y ))
6. s x = a + b s y = b
7. (s :s x = a + b s y = a)(s [y
P4. (y := s :s x
s y)
8. s x = a + b s y = a
9. s x = a + b s y = a
P5. (x := s :s x
s y)
10. s x = b s y = a
11. s x = b s y = a
12. s x = b s y = a
1.
P1.
^
^
pre
code
pre
7! s x + s y ])
simp 2
code
^
^
^
^
^
^
^
^
^
assg P2 3
mid
code
7! s x
s y ])
pre
simp 6
code
assg P4 7
mid
code
goal
semi P3 (6, 8) (9,10)
semi P1 (2, 4) (5, 11)
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
pre
((x := s :s x + s y );
code
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
pre
3. (s :s x = a + b s y = b )(s [x
s x + s y ])
simp 2
P2. (x := s :s x + s y )
code
4. s x = a + b s y = b
assg P2 3
5. s x = a + b s y = b
mid
P3. ((y := s :s x
s y );
code
(x := s :s x
s y ))
6. s x = a + b s y = b
pre
7. (s :s x = a + b s y = a)(s [y
s x s y ])
simp 6
P4. (y := s :s x
s y)
code
8. s x = a + b s y = a
assg P4 7
9. s x = a + b s y = a
mid
10. (s :s x = b s y = a)(s [x
s x s y ])
goal
P5. (x := s :s x
s y)
code
11. s x = b s y = a
assg P5 10
12. s x = b s y = a
semi P3 (6, 8) (9,11)
13. s x = b s y = a
semi P1 (2, 4) (5, 12)
1.
P1.
^
^
7!
^
^
^
^
^
^
^
7!
7!
^
^
^
Hoare Logic { sample proofs
Swap Program
Assign
^
s x =a s y =b
pre
((x := s :s x + s y );
code
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
pre
3. (s :s x = a + b s y = b )(s [x
s x + s y ])
simp 2
P2. (x := s :s x + s y )
code
4. s x = a + b s y = b
assg P2 3
5. s x = a + b s y = b
mid
P3. ((y := s :s x
s y );
code
(x := s :s x
s y ))
6. s x = a + b s y = b
pre
7. (s :s x = a + b s y = a)(s [y
s x s y ])
simp 6
P4. (y := s :s x
s y)
code
8. s x = a + b s y = a
assg P4 7
9. s x = a + b s y = a
mid
10. (s :s x = b s y = a)(s [x
s x s y ])
simp 9
P5. (x := s :s x
s y)
code
11. s x = b s y = a
assg P5 10
12. s x = b s y = a
semi P3 (6, 8) (9,11)
13. s x = b s y = a
semi P1 (2, 4) (5, 12)
1.
P1.
^
^
7!
^
^
^
^
^
^
^
7!
7!
^
^
^
Hoare Logic { sample proofs
Swap Program
The Proof.
^
s x =a s y =b
pre
((x := s :s x + s y );
code
((y := s :s x
s y );
(x := s :s x
s y )))
2. s x = a s y = b
pre
3. (s :s x = a + b s y = b )(s [x
s x + s y ])
simp 2
P2. (x := s :s x + s y )
code
4. s x = a + b s y = b
assg P2 3
5. s x = a + b s y = b
mid
P3. ((y := s :s x
s y );
code
(x := s :s x
s y ))
6. s x = a + b s y = b
pre
7. (s :s x = a + b s y = a)(s [y
s x s y ])
simp 6
P4. (y := s :s x
s y)
code
8. s x = a + b s y = a
assg P4 7
9. s x = a + b s y = a
mid
10. (s :s x = b s y = a)(s [x
s x s y ])
simp 9
P5. (x := s :s x
s y)
code
11. s x = b s y = a
assg P5 10
12. s x = b s y = a
semi P3 (6, 8) (9, 11)
13. s x = b s y = a
semi P1 (2, 4) (5, 12)
1.
P1.
^
^
7!
^
^
^
^
^
^
^
7!
7!
^
^
^
Hoare Logic { sample proofs
Swap Program
Example of detailed Simp
1.
2.
6
^ 6
x =y y =x
s x =a+b s y =b
no alias
pre
^
s x =a+b
8. s y = b
9. a + b
b=a
10. a + b
s y =a
11. s x
s y =a
12. (s [y
s x s y ]) y = s x
13. (s [y
s x s y ]) y = a
7.
s x =a+b
x =y
5. (s [y
s x s y ]) x = s x
6. (s [y
s x s y ]) x = a + b
3.
4.
14. (s [y
6
7!
7!
7! s x
15. (s :s
andE 2
andE 1
fun upd other 4
subst (3, 5)
^
7!
7!
7!
s y
s y ]) x = a + b (s [y
s x s y ]) y = a
x = a + b s y = a)(s [y
s x s y ])
^
7!
Hoare Logic { sample proofs
andE 2
andE 2
add di cancel
subst 8, 9
subst 7, 10
fun upd same
subst (11, 12)
andI (6) (13)
red. 14