30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
# 04 Die Hard 3
|
|
|
|
- Getting started on a spec
|
|
- Write a single correct behavior, informally
|
|
- The next-state formula describes ALL permitted steps. It's usually written as `F1 \/ F2 \/ ... \/ Fn`
|
|
where each `Fi` allows a different kind of step.
|
|
- Die Hard jugs problem:
|
|
- you have a 3 gallon and a 5 gallon jug, and a faucet, and you need to obtain
|
|
exactly 4 gallons of water
|
|
- Start: `[small: 0, big: 0]`
|
|
- Fill small: `[small: 3, big: 0]`
|
|
- Pour small to big: `[small: 0, big: 3]`
|
|
- Fill small: `[small: 3, big: 3]`
|
|
- Pour small to big without overflowing: `[small: 1, big: 5]`
|
|
- Empty big: `[small: 1, big: 0]`
|
|
- Pour small to big: `[small: 0, big: 1]`
|
|
- Fill small: `[small: 3, big: 1]`
|
|
- Pour small to big: `[small: 0, big: 4]` : solved
|
|
- By doing this, we learned
|
|
- what the variables are
|
|
- what constitutes a step: in this example, the partially filled temporary situations
|
|
while filling or emptying are not being recorded as states, so there are no steps
|
|
to them
|
|
- The Die Hard behavior has 3 kinds of steps:
|
|
- Fill a jug
|
|
- Empty a jug
|
|
- Pour one jug into the other
|
|
- Adding an invariant for `big /= 4`
|
|
- Passes all cases where the desired state `big = 4` is NOT reached.
|
|
- Meaning a failing case happens for any behavior where `big = 4`, so it is a solution to the problem.
|