new thms for invariant
authorpaulson
Wed, 25 Nov 1998 15:53:31 +0100
changeset 5970 44ff61e1fe82
parent 5969 e4fe567d10e5
child 5971 c5a7a7685826
new thms for invariant
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))";