proving equivalence of imperative programs via...

197
Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs Birkbeck, University of London joint work with Cynthia Kop (U Copenhagen) and Naoki Nishida (U Nagoya) Workshop on Program Equivalence, London, UK 11 April 2016

Upload: others

Post on 20-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Proving Equivalence ofImperative Programs via

Constrained Rewriting Induction

Carsten Fuhs

Birkbeck, University of London

joint work with

Cynthia Kop (U Copenhagen) and Naoki Nishida (U Nagoya)

Workshop on Program Equivalence, London, UK11 April 2016

Page 2: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 2 / 48

Page 3: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 3 / 48

Page 4: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Marking Student Programs

C Programming Course in Nagoya

• ±70 students every year (of whom 60 active)

• 3 programming exercises every week

• =⇒ 180+ exercises to grade every week for a full semester

• student programs can be horrible

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 4 / 48

Page 5: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Marking Student Programs

C Programming Course in Nagoya

• ±70 students every year (of whom 60 active)

• 3 programming exercises every week

• =⇒ 180+ exercises to grade every week for a full semester

• student programs can be horrible

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 4 / 48

Page 6: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Example Assignment

Exercise: write a function that calculates Σnk=1k.

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 5 / 48

Page 7: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Example Homework Solutions

int sum(int x) {int i = 0, z = 0;

for (i = 0; i <= x; i++)

z += i;

return z;

}

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 6 / 48

Page 8: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Example Homework Solutions

int sum( int n ){if(n < 0){return 0;

}int cnt;

int data = 0;

for(cnt = 0;cnt <= n;cnt++){data = data + cnt;

}return data;

}

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 7 / 48

Page 9: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Example Homework Solutions

int sum(int n)

{if ( n<=0 ) {return 0;

} else {return (n*(n+1)/2);

}}

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 8 / 48

Page 10: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Example Homework Solutions

int sum(int x) {int i, j, z;

z = 0;

for (i = 0; i <= x; i++)

for (j = 0; j < i; j++)

z++;

return z;

}

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 9 / 48

Page 11: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Solutions

• hire some teaching assistants!

• automate the marking

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 10 / 48

Page 12: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Solutions

• hire some teaching assistants!

• automate the marking

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 10 / 48

Page 13: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Solutions

• hire some teaching assistants!

• automate the marking

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 10 / 48

Page 14: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Solutions

• hire some teaching assistants!

• automate the marking

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 10 / 48

Page 15: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 16: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 17: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!

• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 18: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!

• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 19: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!• we love to play with term rewriting

• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 20: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!

• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 21: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Solving the Problem

Automated Program Testing

• run automatic tests

• prove that programs are correct!• we love to play with term rewriting• ⇒ convert C programs to term rewriting systems!• ⇒ reason about those TRSs instead!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 11 / 48

Page 22: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 12 / 48

Page 23: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Term Rewriting?

Syntactic approach for reasoning in equational first-order logic

Core functional programming language without many restrictions(and features) of “real” FP:

• first-order (usually)

• no fixed evaluation strategy

• no fixed order of rules to apply (Haskell: top to bottom)

• untyped

• no pre-defined data structures (integers, arrays, . . .)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 13 / 48

Page 24: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Term Rewriting?

Syntactic approach for reasoning in equational first-order logic

Core functional programming language without many restrictions(and features) of “real” FP:

• first-order (usually)

• no fixed evaluation strategy

• no fixed order of rules to apply (Haskell: top to bottom)

• untyped

• no pre-defined data structures (integers, arrays, . . .)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 13 / 48

Page 25: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Term Rewriting?

Syntactic approach for reasoning in equational first-order logic

Core functional programming language without many restrictions(and features) of “real” FP:

• first-order (usually)

• no fixed evaluation strategy

• no fixed order of rules to apply (Haskell: top to bottom)

• untyped

• no pre-defined data structures (integers, arrays, . . .)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 13 / 48

Page 26: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Term Rewriting?

Syntactic approach for reasoning in equational first-order logic

Core functional programming language without many restrictions(and features) of “real” FP:

• first-order (usually)

• no fixed evaluation strategy

• no fixed order of rules to apply (Haskell: top to bottom)

• untyped

• no pre-defined data structures (integers, arrays, . . .)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 13 / 48

Page 27: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summing up Natural Numbers

Numbers: 0, s(0), s(s(0)), . . .

Rules:sum(0) → 0

sum(s(x)) → plus(s(x), sum(x))plus(0, y) → y

plus(s(x), y) → s(plus(x, y))

Then e.g. we can compute 1 + 1 = 2 as

plus(s(0), s(0))→R s(plus(0, s(0)))→R s(s(0))

Integer arithmetic possible with more complex recursive rules.

But: Want to do program analysis. Really throw away domainknowledge about built-in data structures?!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 14 / 48

Page 28: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summing up Natural Numbers

Numbers: 0, s(0), s(s(0)), . . .

Rules:sum(0) → 0

sum(s(x)) → plus(s(x), sum(x))plus(0, y) → y

plus(s(x), y) → s(plus(x, y))

Then e.g. we can compute 1 + 1 = 2 as

plus(s(0), s(0))→R s(plus(0, s(0)))→R s(s(0))

Integer arithmetic possible with more complex recursive rules.

But: Want to do program analysis. Really throw away domainknowledge about built-in data structures?!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 14 / 48

Page 29: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summing up Natural Numbers

Numbers: 0, s(0), s(s(0)), . . .

Rules:sum(0) → 0

sum(s(x)) → plus(s(x), sum(x))plus(0, y) → y

plus(s(x), y) → s(plus(x, y))

Then e.g. we can compute 1 + 1 = 2 as

plus(s(0), s(0))→R s(plus(0, s(0)))→R s(s(0))

Integer arithmetic possible with more complex recursive rules.

But: Want to do program analysis. Really throw away domainknowledge about built-in data structures?!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 14 / 48

Page 30: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summing up Natural Numbers

Numbers: 0, s(0), s(s(0)), . . .

Rules:sum(0) → 0

sum(s(x)) → plus(s(x), sum(x))plus(0, y) → y

plus(s(x), y) → s(plus(x, y))

Then e.g. we can compute 1 + 1 = 2 as

plus(s(0), s(0))→R s(plus(0, s(0)))→R s(s(0))

Integer arithmetic possible with more complex recursive rules.

But: Want to do program analysis. Really throw away domainknowledge about built-in data structures?!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 14 / 48

Page 31: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summing up Natural Numbers

Numbers: 0, s(0), s(s(0)), . . .

Rules:sum(0) → 0

sum(s(x)) → plus(s(x), sum(x))plus(0, y) → y

plus(s(x), y) → s(plus(x, y))

Then e.g. we can compute 1 + 1 = 2 as

plus(s(0), s(0))→R s(plus(0, s(0)))→R s(s(0))

Integer arithmetic possible with more complex recursive rules.

But: Want to do program analysis. Really throw away domainknowledge about built-in data structures?!

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 14 / 48

Page 32: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Constrained Term Rewriting?

Term rewriting “with batteries included”

• first-order

• no fixed evaluation strategy

• no fixed order of rules to apply

• typed

• with pre-defined data structures (integers, arrays, bitvectors, ...),usually from SMT-LIB theories (SMT: SAT Modulo Theories)

• rewrite rules with SMT constraints

⇒ Term rewriting + SMT solving for automated reasoning

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 15 / 48

Page 33: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Constrained Term Rewriting?

Term rewriting “with batteries included”

• first-order

• no fixed evaluation strategy

• no fixed order of rules to apply

• typed

• with pre-defined data structures (integers, arrays, bitvectors, ...),usually from SMT-LIB theories (SMT: SAT Modulo Theories)

• rewrite rules with SMT constraints

⇒ Term rewriting + SMT solving for automated reasoning

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 15 / 48

Page 34: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Constrained Term Rewriting?

Term rewriting “with batteries included”

• first-order

• no fixed evaluation strategy

• no fixed order of rules to apply

• typed

• with pre-defined data structures (integers, arrays, bitvectors, ...),usually from SMT-LIB theories (SMT: SAT Modulo Theories)

• rewrite rules with SMT constraints

⇒ Term rewriting + SMT solving for automated reasoning

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 15 / 48

Page 35: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Constrained Term Rewriting?

Term rewriting “with batteries included”

• first-order

• no fixed evaluation strategy

• no fixed order of rules to apply

• typed

• with pre-defined data structures (integers, arrays, bitvectors, ...),usually from SMT-LIB theories (SMT: SAT Modulo Theories)

• rewrite rules with SMT constraints

⇒ Term rewriting + SMT solving for automated reasoning

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 15 / 48

Page 36: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What’s Constrained Term Rewriting?

Term rewriting “with batteries included”

• first-order

• no fixed evaluation strategy

• no fixed order of rules to apply

• typed

• with pre-defined data structures (integers, arrays, bitvectors, ...),usually from SMT-LIB theories (SMT: SAT Modulo Theories)

• rewrite rules with SMT constraints

⇒ Term rewriting + SMT solving for automated reasoning

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 15 / 48

Page 37: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)

→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 38: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)

→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 39: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)

→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 40: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)

→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 41: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))

→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 42: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))

→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 43: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)

→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 44: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1

→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 45: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

sum(2)→ 2 + sum(2− 1)→ 2 + sum(1)→ 2 + (1 + sum(1− 1))→ 2 + (1 + sum(0))→ 2 + (1 + 0)→ 2 + 1→ 3

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 16 / 48

Page 46: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Integer Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

• Fterms = {sum} ∪ {n | n ∈ Z}• Ftheory =

{+,−,≥, >,∧, true, false} ∪ {n | n ∈ Z}• Values: true, false, 0, 1, 2, 3, . . . ,−1,−2, . . .

• Interpretation: addition, minus, etc.

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 17 / 48

Page 47: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Bitvector Summation

sum(x) → 0 [x ≤ 0]sum(x) → x+ sum(x− 1) [x > 0]

• Fterms = {sum} ∪ {n | n ∈ Z ∧ 0 ≤ n < 256}• Ftheory =

{+,−,≥, >,∧, true, false}∪ {n | n ∈ Z∧ 0 ≤ n < 256}• Values: true, false, 0, 1, 2, 3, . . . , 255

• Interpretation: addition, minus, etc. modulo 256

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 18 / 48

Page 48: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Examples

Array Summation

sum(a, x) → 0 [x < 0]sum(a, x) → select(a, x) + sum(a, x− 1) [x ≥ 0]

• Fterms = {sum} ∪ {n : int | n ∈ Z} ∪ {a : iarr | n ∈ Z∗}• Ftheory =

{+,−,≥, >,∧, select, true, false} ∪ {n | n ∈ Z} ∪{a : iarr | a ∈ Z∗}

• Values:true, false, 0, 1,−1, 2,−2, . . . , (), (0), (1), . . . , (0, 0), . . .

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 19 / 48

Page 49: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summary

Logically Constrained Term Rewriting Systems[Kop and Nishida, 2013]

• work much like normal term rewrite systems

• can handle integers, arrays, bitvectors, ...

• are flexible enough to faithfully model (many) real-worldprograms

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 20 / 48

Page 50: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summary

Logically Constrained Term Rewriting Systems[Kop and Nishida, 2013]

• work much like normal term rewrite systems

• can handle integers, arrays, bitvectors, ...

• are flexible enough to faithfully model (many) real-worldprograms

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 20 / 48

Page 51: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summary

Logically Constrained Term Rewriting Systems[Kop and Nishida, 2013]

• work much like normal term rewrite systems

• can handle integers, arrays, bitvectors, ...

• are flexible enough to faithfully model (many) real-worldprograms

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 20 / 48

Page 52: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Summary

Logically Constrained Term Rewriting Systems[Kop and Nishida, 2013]

• work much like normal term rewrite systems

• can handle integers, arrays, bitvectors, ...

• are flexible enough to faithfully model (many) real-worldprograms

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 20 / 48

Page 53: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 21 / 48

Page 54: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Simple Integer Functions

Factorial

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u1(x)u1(x) → u2(x, 1, 1)

u2(x, z, i) → u3(x, z, i) [i ≤ x]u2(x, z, i) → u4(x, z, i) [¬(i ≤ x)]u3(x, z, i) → u2(x, z ∗ i, i+ 1)u4(x, z, i) → z

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 22 / 48

Page 55: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Simple Integer Functions

Factorial

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u1(x)u1(x) → u2(x, 1, 1)

u2(x, z, i) → u3(x, z, i) [i ≤ x]u2(x, z, i) → u4(x, z, i) [¬(i ≤ x)]u3(x, z, i) → u2(x, z ∗ i, i+ 1)u4(x, z, i) → z

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 22 / 48

Page 56: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Simple Integer Functions

Factorial

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u2(x, 1, 1)u2(x, z, i) → u2(x, z ∗ i, i+ 1) [i ≤ x]u2(x, z, i) → z [¬(i ≤ x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 22 / 48

Page 57: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Simple Integer Functions

Factorial

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u2(x, 1, 1)u2(x, z, i) → u2(x, z ∗ i, i+ 1) [i ≤ x]u2(x, z, i) → return(z) [¬(i ≤ x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 22 / 48

Page 58: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Division by Zero

boolean divides(int x, int y) {return x % y == 0;

}

divides(x, y) → return(x mod y = 0)

[y 6= 0]divides(x, y) → error [y = 0]

(defining x mod 0 = 0)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 23 / 48

Page 59: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Division by Zero

boolean divides(int x, int y) {return x % y == 0;

}

divides(x, y) → return(x mod y = 0)

[y 6= 0]divides(x, y) → error [y = 0]

(defining x mod 0 = 0)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 23 / 48

Page 60: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Division by Zero

boolean divides(int x, int y) {return x % y == 0;

}

divides(x, y) → return(x mod y = 0) [y 6= 0]divides(x, y) → error [y = 0]

(defining x mod 0 = 0)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 23 / 48

Page 61: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Division by Zero

boolean divides(int x, int y) {return x % y == 0;

}

divides(x, y) → return(x mod y = 0) [y 6= 0]divides(x, y) → error [y = 0]

(defining x mod 0 = 0)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 23 / 48

Page 62: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Integer Overflow

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u2(x, 1, 1)u2(x, z, i) → u2(x, z ∗ i, i+ 1)[i ≤ x]

∧ z ∗ i < 256 ∧ i+ 1 < 256

u2(x, z, i) → return(z) [¬(i ≤ x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 24 / 48

Page 63: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Error Checking

Integer Overflow

int fact(int x) {int z = 1;

for (int i = 1; i <= x; i++)

z *= i;

return z;

}

fact(x) → u2(x, 1, 1)u2(x, z, i) → u2(x, z ∗ i, i+ 1)[i ≤ x ∧ z ∗ i < 256 ∧ i+ 1 < 256]u2(x, z, i) → error [i ≤ x ∧ (z ∗ i ≥ 256 ∨ i+ 1 ≥ 256)]u2(x, z, i) → return(z) [¬(i ≤ x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 24 / 48

Page 64: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Further Extensions

Further Extensions

Can also handle

• Recursion

• Global variables

• Mutable arrays (with built-in size function)→ can represent memory safety violation

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 25 / 48

Page 65: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 26 / 48

Page 66: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

What is Equivalence for LCTRSs?

Teacher’s code:

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]

Student’s code:

sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Query: sum1(x)↔∗ sum2(x) for all x?

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 27 / 48

Page 67: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

What is Equivalence for LCTRSs?

Teacher’s code:

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]

Student’s code:

sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Query: sum1(x)↔∗ sum2(x) for all x?

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 27 / 48

Page 68: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

What is Equivalence for LCTRSs?

Teacher’s code:

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]

Student’s code:

sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Query: sum1(x)↔∗ sum2(x) for all x?

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 27 / 48

Page 69: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 70: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 71: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.

Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 72: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 73: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 74: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Goal

Rewriting Induction

Given:

• set E of equations s1 ≈ t1 [ϕ1], . . . , sn ≈ tn [ϕn]

• set of rewrite rules R

Want to prove:for all constructor ground substitutions γ1, . . . , γn compatible withϕ1, . . . , ϕn: each siγi ↔∗R tiγi.Requirements:

• termination of →R (to perform induction)

• sufficient completeness of →R: evaluation “cannot get stuck”(for case analysis over variables by constructor terms)

• if we want siγi ↔∗ tiγi for all results: confluence of →R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 28 / 48

Page 75: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Approach

Rewriting Induction

Three sets:

• E (equations, “the queries”)

• R (rules, “the program”)

• H (rules, “induction hypotheses”)

Initially: E given, R given, H empty

Proof steps: pairs (E ,H) ` (E ′,H′) by several inference rules for `Invariant: →R∪H terminating

Goal: find derivation (E , ∅) `∗ (∅,H)

Then also ↔∗E ⊆ ↔∗R∪H ⊆ ↔∗R on ground terms:

Equations E are inductive theorems for R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 29 / 48

Page 76: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Approach

Rewriting Induction

Three sets:

• E (equations, “the queries”)

• R (rules, “the program”)

• H (rules, “induction hypotheses”)

Initially: E given, R given, H empty

Proof steps: pairs (E ,H) ` (E ′,H′) by several inference rules for `Invariant: →R∪H terminating

Goal: find derivation (E , ∅) `∗ (∅,H)

Then also ↔∗E ⊆ ↔∗R∪H ⊆ ↔∗R on ground terms:

Equations E are inductive theorems for R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 29 / 48

Page 77: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Approach

Rewriting Induction

Three sets:

• E (equations, “the queries”)

• R (rules, “the program”)

• H (rules, “induction hypotheses”)

Initially: E given, R given, H empty

Proof steps: pairs (E ,H) ` (E ′,H′) by several inference rules for `

Invariant: →R∪H terminating

Goal: find derivation (E , ∅) `∗ (∅,H)

Then also ↔∗E ⊆ ↔∗R∪H ⊆ ↔∗R on ground terms:

Equations E are inductive theorems for R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 29 / 48

Page 78: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Approach

Rewriting Induction

Three sets:

• E (equations, “the queries”)

• R (rules, “the program”)

• H (rules, “induction hypotheses”)

Initially: E given, R given, H empty

Proof steps: pairs (E ,H) ` (E ′,H′) by several inference rules for `Invariant: →R∪H terminating

Goal: find derivation (E , ∅) `∗ (∅,H)

Then also ↔∗E ⊆ ↔∗R∪H ⊆ ↔∗R on ground terms:

Equations E are inductive theorems for R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 29 / 48

Page 79: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Approach

Rewriting Induction

Three sets:

• E (equations, “the queries”)

• R (rules, “the program”)

• H (rules, “induction hypotheses”)

Initially: E given, R given, H empty

Proof steps: pairs (E ,H) ` (E ′,H′) by several inference rules for `Invariant: →R∪H terminating

Goal: find derivation (E , ∅) `∗ (∅,H)

Then also ↔∗E ⊆ ↔∗R∪H ⊆ ↔∗R on ground terms:

Equations E are inductive theorems for R

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 29 / 48

Page 80: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: definition

(E ] {s ' t [ϕ]},H)(E ∪ {s′ ≈ t [ψ]},H)

if s ' t [ϕ] →R∪H s′ ≈ t [ψ]

Idea: Use the program or an induction hypothesis to simplify thequery.

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 30 / 48

Page 81: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y, z) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1]

},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 82: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y, z) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1]

},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 83: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y + 1, z + y) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 84: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y + 1, z + y) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 85: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y′, z + y) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 86: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y′, z + y) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 87: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Simplification: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y′, z′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1

∧ y′ = y + 1 ∧ z′ = z + y]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 31 / 48

Page 88: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: definition

(E ] {s ' t [ϕ]},H)(E ∪ Expd(s, t, ϕ, p),H ∪ {s→ t [ϕ]})

if for every γ compatible with ϕ, s|p reduces andR∪H ∪ {s→ t [ϕ]} is terminating

Expd(C[l′]p, t, ϕ, p) contains equations C[rγ]p ' tγ [ϕγ ∧ ψγ] forall l→ r [ψ] in R where l and l′ unify with most general unifier γ

Idea: Exhaustive case analysis, generate induction hypothesis.(Closely related: narrowing.)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 32 / 48

Page 89: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: definition

(E ] {s ' t [ϕ]},H)(E ∪ Expd(s, t, ϕ, p),H ∪ {s→ t [ϕ]})

if for every γ compatible with ϕ, s|p reduces andR∪H ∪ {s→ t [ϕ]} is terminating

Expd(C[l′]p, t, ϕ, p) contains equations C[rγ]p ' tγ [ϕγ ∧ ψγ] forall l→ r [ψ] in R where l and l′ unify with most general unifier γ

Idea: Exhaustive case analysis, generate induction hypothesis.(Closely related: narrowing.)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 32 / 48

Page 90: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: definition

(E ] {s ' t [ϕ]},H)(E ∪ Expd(s, t, ϕ, p),H ∪ {s→ t [ϕ]})

if for every γ compatible with ϕ, s|p reduces andR∪H ∪ {s→ t [ϕ]} is terminating

Expd(C[l′]p, t, ϕ, p) contains equations C[rγ]p ' tγ [ϕγ ∧ ψγ] forall l→ r [ψ] in R where l and l′ unify with most general unifier γ

Idea: Exhaustive case analysis, generate induction hypothesis.(Closely related: narrowing.)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 32 / 48

Page 91: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y′, z′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1

∧ y′ = y + 1 ∧ z′ = z + y]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 92: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ] {u(x, y′, z′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1

∧ y′ = y + 1 ∧ z′ = z + y]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 93: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 94: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 95: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 96: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 97: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 98: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′ + 1, z′ + y′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ y′ ≤ x]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 99: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 100: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 101: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 102: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 103: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 104: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 105: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}) [y := y′, y′ := y′′, z := z′, z′ := z′′]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 106: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}) [y := y′, y′ := y′′, z := z′, z′ := z′′]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 107: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}) [y := y′, y′ := y′′, z := z′, z′ := z′′]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 108: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}) [y := y′, y′ := y′′, z := z′, z′ := z′′]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 109: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {u(x, y′′, z′′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}) [y := y′, y′ := y′′, z := z′, z′ := z′′]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 110: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Expansion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {x+ u(x′, y′, z′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ =y + 1 ∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y ∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 33 / 48

Page 111: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Deletion: definition

(E ] {s ' t [ϕ]},H)(E ,H)

if s ≡ t or ϕ is unsatisfiable

Idea: Delete trivial inductive theorems.

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 34 / 48

Page 112: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {x+ u(x′, y′, z′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ =y + 1 ∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 35 / 48

Page 113: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {x+ u(x′, y′, z′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ =y + 1 ∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 35 / 48

Page 114: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪

{x+ u(x′, y′, z′) ≈ x+ u(x′, y′, z′) [x ≥ y ∧ x = x′ + 1 ∧ y′ =y + 1 ∧ z′ = z + y ∧ y′ ≤ x ∧ y′′ = y′ + 1 ∧ z′′ = z′ + y′]}

{z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 35 / 48

Page 115: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

EQ-Deletion: definition

(E ] {C[s1, . . . , sn] ≈ C[t1, . . . , tn] [ϕ]},H)(E ∪ {C[~s] ≈ C[~t] [ϕ ∧ ¬

∧ni=1(si = ti)]},H)

if s1, . . . , sn, t1, . . . , tn all logical terms

Idea: If all arguments to the same context become equal, we’re done.

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 36 / 48

Page 116: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

EQ-Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 37 / 48

Page 117: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

EQ-Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x) ∧ ¬(z′ = x+ z)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 37 / 48

Page 118: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

EQ-Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E ∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x) ∧ ¬(z′ = x+ z)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 37 / 48

Page 119: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

EQ-Deletion: example

R =

sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

(E

∪ {z′ ≈ x+ z [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1 ∧ z′ = z + y∧ ¬(y′ ≤ x) ∧ ¬(z′ = x+ z)]}

,H ∪ {u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1 ∧ y′ = y + 1∧ z′ = z + y]})

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 37 / 48

Page 120: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Postulate: definition

(E ,H)(E ] {s ' t [ϕ]},H)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 38 / 48

Page 121: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Postulate: example

R:sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Goal:

( {sum1(x) ≈ sum2(x) [>]}, ∅ )

u(x, y, z) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 39 / 48

Page 122: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Postulate: example

R:sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Goal:

( {sum1(x) ≈ sum2(x) [>],u(x, y, z) ≈ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]}, ∅ )

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 39 / 48

Page 123: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Induction Rules

Postulate: example

R:sum1(x) → 0 [x ≤ 0]sum1(x) → x+ sum1(x− 1) [x > 0]sum2(x) → u(x, 0, 0)u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]u(x, i, z) → z [¬(i ≤ x)]

Goal:

( {sum1(x) ≈ sum2(x) [>]},{u(x, y′, z′)→ x+ u(x′, y, z) [x ≥ y ∧ x = x′ + 1∧ y′ = y + 1 ∧ z′ = z + y]} )

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 39 / 48

Page 124: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 40 / 48

Page 125: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:sum1(x) ≈ sum2(x) [>]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 126: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:sum1(x) ≈ u(x, 0, 0) [>]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 127: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]

H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ sum1(x− 1) ≈ u(x, 0, 0) [x > 0]0 ≈ u(x, 0, 0) [x ≤ 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 128: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]

H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ sum1(x− 1) ≈ u(x, 0, 0) [x > 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 129: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]

H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ sum1(x− 1) ≈ u(x, 0 + 1, 0 + 0) [x > 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 130: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]

H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ sum1(x

′) ≈ u(x, 1, 0) [x > 0 ∧ x′ = x− 1]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 131: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]

H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ u(x′, 0, 0) ≈ u(x, 1, 0) [x > 0 ∧ x′ = x− 1]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 132: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ u(x′, 0, 0) ≈ u(x, 1 + 1, 0 + 1) [x > 0 ∧ x′ = x− 1 ∧ x′ > 0]x+ u(x′, 0, 0) ≈ 0 [x > 0 ∧ x′ = x− 1 ∧ x′ ≤ 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 133: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ u(x′, 0, 0) ≈ u(x, 1 + 1, 0 + 1) [x > 0 ∧ x′ = x− 1 ∧ x′ > 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 134: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+u(x′, 0+1, 0+0) ≈ u(x, 1+1, 0+1) [x > 0∧x′ = x−1∧x′ > 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 135: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]

Goals:x+ u(x′, 1, 0) ≈ u(x, 2, 1) [x > 0 ∧ x′ = x− 1 ∧ x′ > 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 41 / 48

Page 136: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]H3 u(x, 2, 1) → x+ u(x′, 1, 0) [x ≥ 1 ∧ x′ = x− 1]

H4 u(x, 3, 3) → x+ u(x′, 2, 1) [x ≥ 2 ∧ x′ = x− 1]H5 u(x, 4, 6) → x+ u(x′, 3, 3) [x ≥ 3 ∧ x′ = x− 1]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 42 / 48

Page 137: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]H3 u(x, 2, 1) → x+ u(x′, 1, 0) [x ≥ 1 ∧ x′ = x− 1]H4 u(x, 3, 3) → x+ u(x′, 2, 1) [x ≥ 2 ∧ x′ = x− 1]

H5 u(x, 4, 6) → x+ u(x′, 3, 3) [x ≥ 3 ∧ x′ = x− 1]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 42 / 48

Page 138: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Divergence

What Typically Happens

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, 0, 0) [>]H2 u(x, 1, 0) → x+ u(x′, 0, 0) [x > 0 ∧ x′ = x− 1]H3 u(x, 2, 1) → x+ u(x′, 1, 0) [x ≥ 1 ∧ x′ = x− 1]H4 u(x, 3, 3) → x+ u(x′, 2, 1) [x ≥ 2 ∧ x′ = x− 1]H5 u(x, 4, 6) → x+ u(x′, 3, 3) [x ≥ 3 ∧ x′ = x− 1]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 42 / 48

Page 139: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → 0 [x ≤ 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, 0, 0)4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 140: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 141: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:sum1(x) ≈ sum2(x) [>]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 142: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]

H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:sum1(x) ≈ u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 143: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ sum1(x− 1) ≈ u(x, c1, c2) [c1 = 0 ∧ c2 = 0 ∧ x > 0]c0 ≈ u(x, c1, c2) [c1 = 0 ∧ c2 = 0 ∧ x ≤ 0 ∧ c0 = 0]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 144: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ sum1(x− 1) ≈ u(x, c1, c2) [c1 = 0 ∧ c2 = 0 ∧ x > 0]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 145: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ sum1(x− 1) ≈ u(x, c1 + 1, c2 + c1) [c1 = 0 ∧ c2 = 0 ∧ x > 0]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 146: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ sum1(x

′) ≈ u(x, i, z) [c1 = 0 ∧ c2 = 0 ∧ x > 0 ∧ x′ =x− 1 ∧ i = c1 + 1 ∧ z = c1 + c2]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 147: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ u(x′, c1, c2) ≈ u(x, i, z) [c1 = 0 ∧ c2 = 0 ∧ x > 0 ∧ x′ =x− 1 ∧ i = c1 + 1 ∧ z = c1 + c2]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 148: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ u(x′, c1, c2) ≈ u(x, i, z) [c1 = 0 ∧ c2 = 0 ∧ x > 0 ∧ x′ =x− 1 ∧ i = c1 + 1 ∧ z = c1 + c2]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 149: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Generalisation Method

Use Different Notation!

1. sum1(x) → c0 [x ≤ 0 ∧ c0 = 0]2. sum1(x) → x+ sum1(x− 1) [x > 0]3. sum2(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]4. u(x, i, z) → u(x, i+ 1, z + i) [i ≤ x]5. u(x, i, z) → z [¬(i ≤ x)]H1 sum1(x) → u(x, c1, c2) [c1 = 0 ∧ c2 = 0]

Goals:x+ u(x′, c1, c2) ≈ u(x, i, z) [

c1 = 0 ∧ c2 = 0 ∧

x > 0 ∧ x′ =x− 1 ∧ i = c1 + 1 ∧ z = c1 + c2]

Generalisation: Drop initialisations

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 43 / 48

Page 150: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Overview

1 Motivation

2 Constrained Term Rewriting

3 Transforming C Programs

4 Rewriting Induction

5 Lemma Generation

6 Conclusions

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 44 / 48

Page 151: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 152: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting

(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 153: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 154: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990]

(But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 155: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 156: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting

(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 157: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

What was already there?

Shoulders of Giants

• various kinds of constrained rewriting(But: most were fundamentally limited to the integers)

• long history of unconstrained rewriting induction, e.g.[Reddy 1990](But: lemma generation methods do not obviously extend)

• rewriting induction for a form of constrained rewriting(But: only very complex and relatively weak lemmageneration)

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 45 / 48

Page 158: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Implementation and Experiments

• C2LCTRS: automatic tool to translate C programs to LCTRSshttp://www.trs.cm.is.nagoya-u.ac.jp/c2lctrs/

• Ctrl: automatic tool to prove equivalence of LCTRS functionshttp://cl-informatik.uibk.ac.at/software/ctrl/

function YES NO MAYBE timesum 9 0 4 2.4fib 4 6 3 6.6

sumfrom 3 1 2 1.9strlen 1 0 5 7.2strcpy 3 0 3 11.5arrsum 1 0 0 4.2fact 1 0 0 2.4

total 22 7 17 5.9

Experiments with student code

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 46 / 48

Page 159: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Implementation and Experiments

• C2LCTRS: automatic tool to translate C programs to LCTRSshttp://www.trs.cm.is.nagoya-u.ac.jp/c2lctrs/

• Ctrl: automatic tool to prove equivalence of LCTRS functionshttp://cl-informatik.uibk.ac.at/software/ctrl/

function YES NO MAYBE timesum 9 0 4 2.4fib 4 6 3 6.6

sumfrom 3 1 2 1.9strlen 1 0 5 7.2strcpy 3 0 3 11.5arrsum 1 0 0 4.2fact 1 0 0 2.4

total 22 7 17 5.9

Experiments with student code

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 46 / 48

Page 160: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Implementation and Experiments

• C2LCTRS: automatic tool to translate C programs to LCTRSshttp://www.trs.cm.is.nagoya-u.ac.jp/c2lctrs/

• Ctrl: automatic tool to prove equivalence of LCTRS functionshttp://cl-informatik.uibk.ac.at/software/ctrl/

function YES NO MAYBE timesum 9 0 4 2.4fib 4 6 3 6.6

sumfrom 3 1 2 1.9strlen 1 0 5 7.2strcpy 3 0 3 11.5arrsum 1 0 0 4.2fact 1 0 0 2.4

total 22 7 17 5.9

Experiments with student code

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 46 / 48

Page 161: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Implementation and Experiments

• C2LCTRS: automatic tool to translate C programs to LCTRSshttp://www.trs.cm.is.nagoya-u.ac.jp/c2lctrs/

• Ctrl: automatic tool to prove equivalence of LCTRS functionshttp://cl-informatik.uibk.ac.at/software/ctrl/

function YES NO MAYBE timesum 9 0 4 2.4fib 4 6 3 6.6

sumfrom 3 1 2 1.9strlen 1 0 5 7.2strcpy 3 0 3 11.5arrsum 1 0 0 4.2fact 1 0 0 2.4

total 22 7 17 5.9

Experiments with student code

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 46 / 48

Page 162: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Implementation and Experiments

• C2LCTRS: automatic tool to translate C programs to LCTRSshttp://www.trs.cm.is.nagoya-u.ac.jp/c2lctrs/

• Ctrl: automatic tool to prove equivalence of LCTRS functionshttp://cl-informatik.uibk.ac.at/software/ctrl/

function YES NO MAYBE timesum 9 0 4 2.2fib 10 1 2 5.9

sumfrom 3 0 3 2.3strlen 2 0 4 6.0strcpy 5 0 1 14.1arrsum 1 0 0 4.2fact 1 0 0 2.5

total 31 1 14 5.9

Experiments with student code and adapted teacher code

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 47 / 48

Page 163: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 164: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 165: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 166: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 167: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 168: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Contributions

Conclusion

• Logically Constrained Term Rewrite Systemsfor automated reasoning and program analysis

• Frontend from C fragment on integers, arrays, ... to LCTRSs

• Constrained rewriting induction to prove equivalence offunctions defined by LCTRSs

• Lemma generation technique suited to problems fromimperative programs

• Conference paper at APLAS 2014

• Full version: http://arxiv.org/abs/1409.0166

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 48 / 48

Page 169: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Bonus Slides

Bonus Slides

More on the step from C to constrained rewriting

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 49 / 48

Page 170: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → x ∗ fact(x− 1) [x > 0]fact(x) → 1 [¬(x > 0)]

helper(x, return(y)) → x ∗ y

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 50 / 48

Page 171: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → x ∗ fact(x− 1) [x > 0]fact(x) → 1 [¬(x > 0)]

helper(x, return(y)) → x ∗ y

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 50 / 48

Page 172: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → x ∗ fact(x− 1) [x > 0]fact(x) → return(1) [¬(x > 0)]

helper(x, return(y)) → x ∗ y

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 50 / 48

Page 173: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → helper(x, fact(x− 1)) [x > 0]fact(x) → return(1) [¬(x > 0)]

helper(x, return(y)) → x ∗ y

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 50 / 48

Page 174: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion with Errors

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → helper(x, fact(x− 1)) [x > 0]fact(x) → return(1) [¬(x > 0)]

helper(x, return(y)) → x ∗ y [x ∗ y < 256]helper(x, return(y)) → error [x ∗ y ≥ 256]

helper(x, error) → error

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 51 / 48

Page 175: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Function Calls

Recursion with Errors

int fact(int x) {if (x > 0) return x * fact(x-1);

else return 1;

}

fact(x) → helper(x, fact(x− 1)) [x > 0]fact(x) → return(1) [¬(x > 0)]

helper(x, return(y)) → x ∗ y [x ∗ y < 256]helper(x, return(y)) → error [x ∗ y ≥ 256]

helper(x, error) → error

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 51 / 48

Page 176: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Global Variablesint best;

int up(int x) {if (x > best) {best = x;

return 1;

}return 0;

}

up(b, x) → return(x, 1) [x > b]up(b, x) → return(b, 0) [¬(x > b)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 52 / 48

Page 177: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Global Variablesint best;

int up(int x) {if (x > best) {best = x;

return 1;

}return 0;

}

up(b, x) → return(x, 1) [x > b]up(b, x) → return(b, 0) [¬(x > b)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 52 / 48

Page 178: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Global Variables with Function Callsint best;

int up(int x) { void main() {if (x > best) { while(1) {best = x; int k = input();

return 1; up(k);

} if (!k) break;

return 0; }} }

up(b, x) → returnup(x, 1) [x > b]up(b, x) → returnup(b, 0) [¬(x > b)]main(b) → u1(b, inp)u1(b, k) → u2(k, up(b, k))

u2(k, returnup(b′, i)) → returnmain(b′) [¬(k 6= 0)]u2(k, returnup(b′, i)) → u1(b

′, inp) [k 6= 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 53 / 48

Page 179: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Global Variables with Function Callsint best;

int up(int x) { void main() {if (x > best) { while(1) {best = x; int k = input();

return 1; up(k);

} if (!k) break;

return 0; }} }

up(b, x) → returnup(x, 1) [x > b]up(b, x) → returnup(b, 0) [¬(x > b)]main(b) → u1(b, inp)u1(b, k) → u2(k, up(b, k))

u2(k, returnup(b′, i)) → returnmain(b′) [¬(k 6= 0)]u2(k, returnup(b′, i)) → u1(b

′, inp) [k 6= 0]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 53 / 48

Page 180: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Statically Allocated Arraysvoid strcpy(char goal[], char original[]) {

int i = 0;

for (; original[i]; i++) goal[i] = original[i];

goal[i] = 0;

}

strcpy(x, y) → v(x, y, 0)v(x, y, i) → w(x, y, i) [select(y, i) = 0]v(x, y, i) → v(store(x, i, select(y, i)), y, i+ 1)

select(y, i) 6= 0]w(x, y, i) → return(store(x, i, 0))

v(x, y, i) → error [i < 0 ∨ i ≥ size(y) ∨(select(y, i) 6= 0 ∧ i ≥ size(x))]

w(x, y, i) → error [i < 0 ∨ i ≥ size(x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 54 / 48

Page 181: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Statically Allocated Arraysvoid strcpy(char goal[], char original[]) {

int i = 0;

for (; original[i]; i++) goal[i] = original[i];

goal[i] = 0;

}

strcpy(x, y) → v(x, y, 0)v(x, y, i) → w(x, y, i) [select(y, i) = 0]v(x, y, i) → v(store(x, i, select(y, i)), y, i+ 1)

[select(y, i) 6= 0]w(x, y, i) → return(store(x, i, 0))

v(x, y, i) → error [i < 0 ∨ i ≥ size(y) ∨(select(y, i) 6= 0 ∧ i ≥ size(x))]

w(x, y, i) → error [i < 0 ∨ i ≥ size(x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 54 / 48

Page 182: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Statically Allocated Arraysvoid strcpy(char goal[], char original[]) {

int i = 0;

for (; original[i]; i++) goal[i] = original[i];

goal[i] = 0;

}

strcpy(x, y) → v(x, y, 0)v(x, y, i) → w(x, y, i) [0 ≤ i < size(y) ∧ select(y, i) = 0]v(x, y, i) → v(store(x, i, select(y, i)), y, i+ 1) [0 ≤ i <

size(x) ∧ i < size(y) ∧ select(y, i) 6= 0]w(x, y, i) → return(store(x, i, 0)) [0 ≤ i < size(x)]

v(x, y, i) → error [i < 0 ∨ i ≥ size(y) ∨(select(y, i) 6= 0 ∧ i ≥ size(x))]

w(x, y, i) → error [i < 0 ∨ i ≥ size(x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 54 / 48

Page 183: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Side Effects

Statically Allocated Arraysvoid strcpy(char goal[], char original[]) {

int i = 0;

for (; original[i]; i++) goal[i] = original[i];

goal[i] = 0;

}

strcpy(x, y) → v(x, y, 0)v(x, y, i) → w(x, y, i) [0 ≤ i < size(y) ∧ select(y, i) = 0]v(x, y, i) → v(store(x, i, select(y, i)), y, i+ 1) [0 ≤ i <

size(x) ∧ i < size(y) ∧ select(y, i) 6= 0]w(x, y, i) → return(store(x, i, 0)) [0 ≤ i < size(x)]v(x, y, i) → error [i < 0 ∨ i ≥ size(y) ∨

(select(y, i) 6= 0 ∧ i ≥ size(x))]w(x, y, i) → error [i < 0 ∨ i ≥ size(x)]

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 54 / 48

Page 184: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 185: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 186: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 187: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 188: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 189: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 190: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 191: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 192: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 193: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))

[0 ≤ y + 3 < size(select(mem, x))](Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 194: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 195: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 196: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48

Page 197: Proving Equivalence of Imperative Programs via …eecs.qmul.ac.uk/~nikost/wpe2016/slides/carsten.pdfusually from SMT-LIB theories (SMT: SAT Modulo Theories) rewrite rules with SMT

Motivation Constrained Term Rewriting Transforming C Programs Rewriting Induction Lemma Generation Conclusions

Dynamic Pointers

Dynamically Allocated Arrays

• model memory as a sequence of integer sequences

• a dynamic array is a pair (index, offset)

• int *a = new int[10];

⇒ u1(mem)→u2(add(mem, x), pair(size(mem), 0)) [size(x) = 10]

• int k = a[3];

⇒ u2(mem, pair(x, y))→u3(mem, pair(x, y), select(select(mem, x), y + 3))[0 ≤ y + 3 < size(select(mem, x))]

(Note: select(mem, a) returns () if a is out of bound.)

• int *b = a + 1;

⇒ u3(mem, pair(x, y), k)→u4(mem, pair(x, y), k, pair(x, y + 1))

Proving Equivalence of Imperative Programs via Constrained Rewriting Induction Carsten Fuhs 55 / 48