Theory Washing

Up to index of Isabelle/Sequents

theory Washing
imports ILL
begin

(* $Id: Washing.thy,v 1.1 2006/11/20 22:47:11 wenzelm Exp $ *)

(* code by Sara Kalvala, based on Paulson's LK
                           and Moore's tisl.ML *)

theory Washing
imports ILL
begin

consts
  dollar :: o
  quarter :: o
  loaded :: o
  dirty :: o
  wet :: o
  clean :: o

axioms
  change:
  "dollar |- (quarter >< quarter >< quarter >< quarter)"

  load1:
  "quarter , quarter , quarter , quarter , quarter |- loaded"

  load2:
  "dollar , quarter |- loaded"

  wash:
  "loaded , dirty |- wet"

  dry:
  "wet, quarter , quarter , quarter |- clean"


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

ML_setup {* bind_thms ("changeI", [thm "context1"] RL ([thm "change"] RLN (2,[thm "cut"]))) *}
ML_setup {* bind_thms ("load1I", [thm "context1"] RL ([thm "load1"] RLN (2,[thm "cut"]))) *}
ML_setup {* bind_thms ("washI", [thm "context1"] RL ([thm "wash"] RLN (2,[thm "cut"]))) *}
ML_setup {* bind_thms ("dryI", [thm "context1"] RL ([thm "dry"] RLN (2,[thm "cut"]))) *}

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

lemma "dollar , dollar , dirty |- clean"
  apply (tactic {* best_tac (lazy_cs add_safes (thms "changeI" @ thms "load1I" @ thms "washI" @ thms "dryI")) 1 *})
  done

(* order of premises doesn't matter *)

lemma "dollar , dirty , dollar |- clean"
  apply (tactic {* best_tac (lazy_cs add_safes (thms "changeI" @ thms "load1I" @ thms "washI" @ thms "dryI")) 1 *})
  done

(* alternative formulation *)

lemma "dollar , dollar |- dirty -o clean"
  apply (tactic {* best_tac (lazy_cs add_safes (thms "changeI" @ thms "load1I" @ thms "washI" @ thms "dryI")) 1 *})
  done

end

theorem changeI:

  $J1.0, $J2.0, quarter >< quarter >< quarter >< quarter, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, $J4.0, dollar |- B
  $J1.0, $J2.0, quarter >< quarter >< quarter >< quarter, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, dollar, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, quarter >< quarter >< quarter >< quarter, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, dollar, $J4.0 |- B
  $J1.0, $J2.0, quarter >< quarter >< quarter >< quarter, $J3.0, $J4.0 |- B
  ==> $J1.0, dollar, $J2.0, $J3.0, $J4.0 |- B

theorem load1I:

  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, $J4.0, quarter, quarter, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, $J4.0, quarter, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, quarter, $J4.0, quarter, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, quarter, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, quarter, quarter, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, quarter, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, quarter, quarter, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, quarter, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, quarter, quarter, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, quarter, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, quarter, quarter, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, $J3.0, $J4.0, quarter, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, $J3.0, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, $J3.0, quarter, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, $J3.0, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, $J3.0, quarter, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, $J3.0, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, quarter, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, $J3.0, quarter, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, quarter, $J3.0, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, $J2.0, $J3.0, quarter, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, $J3.0, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, $J3.0, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, $J3.0, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, quarter, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, $J2.0, $J3.0, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, $J2.0, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, quarter, $J2.0, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, quarter, $J2.0, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, quarter, $J2.0, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, loaded, $J3.0, $J4.0 |- B
  ==> $J1.0, quarter, quarter, quarter, quarter, quarter, $J2.0, $J3.0, $J4.0 |- B

theorem washI:

  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, $J4.0, loaded, dirty |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, loaded, $J3.0, $J4.0, dirty |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, loaded, dirty, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, loaded, $J4.0, dirty |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, dirty, $J3.0, loaded, $J4.0 |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, loaded, dirty, $J4.0 |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, loaded, $J2.0, $J3.0, $J4.0, dirty |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, loaded, $J2.0, dirty, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, loaded, $J2.0, $J3.0, dirty, $J4.0 |- B
  $J1.0, $J2.0, wet, $J3.0, $J4.0 |- B
  ==> $J1.0, loaded, dirty, $J2.0, $J3.0, $J4.0 |- B

theorem dryI:

  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, $J4.0, wet, quarter, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, wet, $J3.0, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, wet, quarter, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, wet, quarter, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, wet, quarter, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, wet, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, wet, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, wet, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, quarter, $J3.0, wet, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, wet, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, wet, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, quarter, $J3.0, wet, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, wet, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, quarter, $J3.0, wet, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, $J2.0, $J3.0, wet, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, $J3.0, $J4.0, quarter, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, $J3.0, quarter, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, $J3.0, quarter, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, quarter, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, $J2.0, $J3.0, quarter, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, $J3.0, $J4.0, quarter, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, quarter, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, quarter, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, $J3.0, quarter, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, quarter, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, $J2.0, $J3.0, quarter, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, quarter, $J2.0, $J3.0, $J4.0, quarter |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, quarter, $J2.0, quarter, $J3.0, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, quarter, $J2.0, $J3.0, quarter, $J4.0 |- B
  $J1.0, $J2.0, clean, $J3.0, $J4.0 |- B
  ==> $J1.0, wet, quarter, quarter, quarter, $J2.0, $J3.0, $J4.0 |- B

lemma

  dollar, dollar, dirty |- clean

lemma

  dollar, dirty, dollar |- clean

lemma

  dollar, dollar |- dirty -o clean