# HG changeset patch # User paulson # Date 912005611 -3600 # Node ID 44ff61e1fe8205be4247a8bcd33a06e951bd0168 # Parent e4fe567d10e562957c9e93dbafd1545c9fc5c9fa new thms for invariant diff -r e4fe567d10e5 -r 44ff61e1fe82 src/HOL/UNITY/Union.ML --- a/src/HOL/UNITY/Union.ML Wed Nov 25 15:53:04 1998 +0100 +++ b/src/HOL/UNITY/Union.ML Wed Nov 25 15:53:31 1998 +0100 @@ -89,12 +89,36 @@ Addsimps [Join_absorb]; +Goal "i : I ==> (JN i:I. A i Join B) = ((JN i:I. A i) Join B)"; +by (auto_tac (claset() addSIs [program_equalityI], + simpset() addsimps [Acts_JN, Acts_Join])); +qed "JN_Join_miniscope"; + +Goal "k:I ==> A k Join (JN i:I. A i) = (JN i:I. A i)"; +by (auto_tac (claset() addSIs [program_equalityI], + simpset() addsimps [Acts_JN, Acts_Join])); +qed "JN_absorb"; + +Goal "(JN i: I Un J. A i) = ((JN i: I. A i) Join (JN i:J. A i))"; +by (auto_tac (claset() addSIs [program_equalityI], + simpset() addsimps [Acts_JN, Acts_Join])); +qed "JN_Join"; + +Goal "i: I ==> (JN i:I. c) = c"; +by (auto_tac (claset() addSIs [program_equalityI], + simpset() addsimps [Acts_JN])); +qed "JN_constant"; + +Goal "(JN i:I. A i Join B i) = (JN i:I. A i) Join (JN i:I. B i)"; +by (auto_tac (claset() addSIs [program_equalityI], + simpset() addsimps [Acts_JN, Acts_Join])); +qed "JN_Join_distrib"; (*** Safety: constrains, stable, FP ***) Goalw [constrains_def, JOIN_def] - "I ~= {} ==> \ + "i : I ==> \ \ (JN i:I. F i) : constrains A B = (ALL i:I. F i : constrains A B)"; by (Simp_tac 1); by (Blast_tac 1); @@ -130,24 +154,36 @@ by (blast_tac (claset() addIs [constrains_weaken]) 1); qed "constrains_Join_weaken"; -Goal "I ~= {} ==> \ +Goal "i : I ==> \ \ (JN i:I. F i) : stable A = (ALL i:I. F i : stable A)"; by (asm_simp_tac (simpset() addsimps [stable_def, constrains_JN]) 1); qed "stable_JN"; +Goal "[| ALL i:I. F i : invariant A; i : I |] \ +\ ==> (JN i:I. F i) : invariant A"; +by (asm_full_simp_tac (simpset() addsimps [invariant_def, stable_JN]) 1); +by (Blast_tac 1); +bind_thm ("invariant_JN_I", ballI RS result()); + Goal "F Join G : stable A = \ \ (F : stable A & G : stable A)"; by (simp_tac (simpset() addsimps [stable_def, constrains_Join]) 1); qed "stable_Join"; -Goal "I ~= {} ==> FP (JN i:I. F i) = (INT i:I. FP (F i))"; +Goal "[| F : invariant A; G : invariant A |] \ +\ ==> F Join G : invariant A"; +by (full_simp_tac (simpset() addsimps [invariant_def, stable_Join]) 1); +by (Blast_tac 1); +qed "invariant_JoinI"; + +Goal "i : I ==> FP (JN i:I. F i) = (INT i:I. FP (F i))"; by (asm_simp_tac (simpset() addsimps [FP_def, stable_JN, INTER_def]) 1); qed "FP_JN"; (*** Progress: transient, ensures ***) -Goal "I ~= {} ==> \ +Goal "i : I ==> \ \ (JN i:I. F i) : transient A = (EX i:I. F i : transient A)"; by (auto_tac (claset(), simpset() addsimps [transient_def, JOIN_def])); @@ -160,7 +196,7 @@ Join_def])); qed "transient_Join"; -Goal "I ~= {} ==> \ +Goal "i : I ==> \ \ (JN i:I. F i) : ensures A B = \ \ ((ALL i:I. F i : constrains (A-B) (A Un B)) & \ \ (EX i:I. F i : ensures A B))";