# HG changeset patch # User paulson # Date 904655231 -7200 # Node ID b48ab3281944d2f780fec6e092c599d2787add46 # Parent 3a744748dd21e02cc643ef154d264c39cd8f228d New approach, using a locale diff -r 3a744748dd21 -r b48ab3281944 src/HOL/UNITY/Token.ML --- a/src/HOL/UNITY/Token.ML Tue Sep 01 15:05:59 1998 +0200 +++ b/src/HOL/UNITY/Token.ML Tue Sep 01 15:07:11 1998 +0200 @@ -10,8 +10,6 @@ val Token_defs = [HasTok_def, H_def, E_def, T_def]; -AddIffs [N_positive, skip]; - Goalw [HasTok_def] "[| s: HasTok i; s: HasTok j |] ==> i=j"; by Auto_tac; qed "HasToK_partition"; @@ -22,7 +20,20 @@ by Auto_tac; qed "not_E_eq"; -(*This proof is in the "massaging" style and is much faster! *) +Open_locale "Token"; + +(*Strip meta-quantifiers: perhaps the locale should do this?*) +val TR2 = forall_elim_vars 0 (thm "TR2"); +val TR3 = forall_elim_vars 0 (thm "TR3"); +val TR4 = forall_elim_vars 0 (thm "TR4"); +val TR5 = forall_elim_vars 0 (thm "TR5"); +val TR6 = forall_elim_vars 0 (thm "TR6"); +val TR7 = forall_elim_vars 0 (thm "TR7"); +val nodeOrder_def = (thm "nodeOrder_def"); +val next_def = (thm "next_def"); + +AddIffs [thm "N_positive", thm"skip"]; + Goalw [stable_def] "stable acts (Compl(E i) Un (HasTok i))"; by (rtac constrains_weaken 1); by (rtac ([[TR2, TR4] MRS constrains_Un, TR5] MRS constrains_Un) 1); @@ -38,37 +49,19 @@ by (Blast_tac 1); qed"wf_nodeOrder"; -Goal "[| m Suc(m) < n"; - by (full_simp_tac (simpset() addsimps [nat_neq_iff]) 1); - by (blast_tac (claset() addEs [less_asym, less_SucE]) 1); - qed "Suc_lessI"; - Goalw [nodeOrder_def, next_def, inv_image_def] "[| i ((next i, i) : nodeOrder j) = (i ~= j)"; by (auto_tac (claset(), simpset() addsimps [Suc_lessI, mod_Suc, mod_less, mod_geq])); -by (dtac sym 1); -(*The next two lines...**) -by (REPEAT (eres_inst_tac [("P", "?a pstate -consts - N :: nat (*number of nodes in the ring*) constdefs - nodeOrder :: "nat => (nat*nat)set" - "nodeOrder j == (inv_image less_than (%i. ((j+N)-i) mod N)) Int - (lessThan N Times lessThan N)" - - next :: nat => nat - "next i == (Suc i) mod N" - HasTok :: nat => state set "HasTok i == {s. token s = i}" @@ -41,21 +32,37 @@ T :: nat => state set "T i == {s. proc s i = Thinking}" -rules - N_positive "0 (nat*nat)set" + next :: nat => nat - TR2 "constrains acts (T i) (T i Un H i)" + assumes + N_positive "0