# File washing.ML

    (* $Id: washing.ML,v 1.3 2005/09/18 13:20:10 wenzelm Exp $ *)

    (* "activate" definitions for use in proof *)

    val changeI = [context1] RL ([change] RLN (2,[cut]));
    val load1I =  [context1] RL ([load1]  RLN (2,[cut]));
    val washI =   [context1] RL ([wash]   RLN (2,[cut]));
    val dryI =    [context1] RL ([dry]    RLN (2,[cut]));

    (* a load of dirty clothes and two dollars gives you clean clothes *)

    Goal "dollar , dollar , dirty |- clean";

    by (best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1);

    (* order of premises doesn't matter *)

    prove_goal (the_context ()) "dollar , dirty , dollar |- clean"
    (fn _ => [best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1]);

    (* alternative formulation *)

    prove_goal (the_context ()) "dollar , dollar |- dirty -o clean"
    (fn _ => [best_tac (lazy_cs add_safes (changeI @ load1I @ washI @ dryI)) 1]);