6252
|
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 |
|