equal
deleted
inserted
replaced
|
1 |
|
2 open washing; |
|
3 |
|
4 (* "activate" definitions for use in proof *) |
|
5 |
|
6 val changeI = [context1] RL ([change] RLN (2,[cut])); |
|
7 val load1I = [context1] RL ([load1] RLN (2,[cut])); |
|
8 val washI = [context1] RL ([wash] RLN (2,[cut])); |
|
9 val dryI = [context1] RL ([dry] RLN (2,[cut])); |
|
10 |
|
11 |
|
12 |
|
13 (* a load of dirty clothes and two dollars gives you clean clothes *) |
|
14 |
|
15 Goal "dollar , dollar , dirty |- clean"; |
|
16 |
|
17 by (best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1); |
|
18 |
|
19 |
|
20 (* order of premises doesn't matter *) |
|
21 |
|
22 prove_goal thy "dollar , dirty , dollar |- clean" |
|
23 (fn _ => [best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1]); |
|
24 |
|
25 |
|
26 (* alternative formulation *) |
|
27 |
|
28 prove_goal thy "dollar , dollar |- dirty -o clean" |
|
29 (fn _ => [best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1]); |
|
30 |
|
31 |
|
32 |
|
33 |