Program Equivalence From Trace Equivalence
Tim Wood1 Sophia Drossopoulou1
1Imperial College London Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 1 / 30
Program Equivalence From Trace Equivalence Tim Wood 1 Sophia - - PowerPoint PPT Presentation
Program Equivalence From Trace Equivalence Tim Wood 1 Sophia Drossopoulou 1 1 Imperial College London Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 1 / 30 Context Program maintenance is a common and important
1Imperial College London Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 1 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 2 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 2 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 3 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 4 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 5 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 6 / 30
1
2
3
4
5
6
7
8 9 class
10
11
12
13
14
15 16 class
17
18 19
20
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 7 / 30
1
2
3
4
5
6
7
8 9 class
10
11
12
13
14
15 16 class
17
18
19
20
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 8 / 30
1
2
3
4
5
6
7
8 9 class
10
11
12
13
14
15 16 class
17
18
19
20
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 8 / 30
Modified Objects ⊆ Allegedly Affected
1
2
3
4
5
6
7
8 9 class
10
11
12
13
14
15 16 class
17
18
19
20
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 8 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 9 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 10 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 11 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 11 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 12 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 13 / 30 V1 . . . V2 . . . We want to establish that the unaffected objects correspond at each execution step
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 13 / 30 V1 . . . V2 . . . Only need to consider states which are method calls or returns between affected and unaffected objects
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 13 / 30 V1 . . . V2 . . . Only need to consider the topmost stack frame
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 14 / 30 V1 V2 Intuition: the method calls and returns (and method parameters), between the affected and unaffected objects are enough information to uniquely deter- mine the unaffected objects
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 15 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 15 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 15 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 16 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 17 / 30
1 datatype
2 3 function
4
5
6
7
8
9
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 18 / 30
1 datatype
2 3 function
4
5
6
7
8
9
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 18 / 30
1 datatype
2 3 function
4
5
6
7
8
9
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 18 / 30
1 datatype
2 3 function
4
5
6
7
8
9
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 18 / 30
1 datatype
2 3 function
4
5
6
7
8
9
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 18 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
1 lemma
2
3
4
5
6 { 7 //
8 ... 9 if(ls1 = []) { /*
10 else { 11 ... 12 /* call
13 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 14 ... 15 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 19 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 20 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 21 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 22 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 23 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 24 / 30
1 class
2
3
4
5
6
7
8
9 10 class
11
12
13
14
15
16
17
18
1 class
2
3
4
5
6
7
8
9 10 class
11
12
13
14
15
16
17 18 Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 25 / 30
1 class
2
3
4
5
6
7
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 26 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 27 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
1 datatype
2 datatype
3 function
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 28 / 30
Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 29 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30
1 lemma
2
3
4
5
6 { 7 ls2 ,s4 :| Steps(s2 ,ls2 ,s4) ∧ StepsComp(s1 ,ls1 ,s3 , s2 ,ls2 ,s4); 8 var al :| StateComp(s1 ,s2 ,al) ∧ TraceComp(ls1 ,ls2 ,al); 9 10 if(ls1 = []) { } else { 11 var l1 ,l2 ,ls5 ,ls6 := ls1 [0], ls2 [0], ls1 [1..] , ls2 [1..]; 12 ... 13 assert [l1]+ ls5 = ls1; assert [l2]+ ls6 = ls2; 14 15 var s5 :| Step(s1 ,l1 ,s5) ∧ Steps(s5 ,ls5 ,s3); 16 var s6 :| Step(s2 ,l2 ,s6) ∧ Steps(s6 ,ls6 ,s4); 17 18 var al ’ := StepPreservesTraceComp (s1 ,l1 ,s5 ,ls5 , s2 ,l2 ,s6 ,ls6 , al); 19 20 StepPreservesTraceEquiv (s1 ,l1 ,s5 ,ls5 ,s3 , s2 ,l2 ,s6 ,ls6 ,s4); 21 22 var ls6 ’,s4 ’ := TraceEquivStepsPreservesComp (s5 ,ls5 ,s3 ,s6); 23 DeterminismSeq (s6 ,ls6 ,s4 ,ls6 ’,s4 ’); 24 }} Wood, Drossopoulou (Imperial College London) Program Equivalence October 2014 30 / 30