new theorem Always_INT_distrib; therefore renamed Always_Int
authorpaulson
Mon, 20 Sep 1999 10:42:09 +0200
changeset 7541 1a7a38d8f5bd
parent 7540 8af61a565a4a
child 7542 b6599e292011
new theorem Always_INT_distrib; therefore renamed Always_Int to Always_Int_I
src/HOL/UNITY/Constrains.ML
--- a/src/HOL/UNITY/Constrains.ML	Mon Sep 20 10:40:40 1999 +0200
+++ b/src/HOL/UNITY/Constrains.ML	Mon Sep 20 10:42:09 1999 +0200
@@ -319,21 +319,29 @@
 
 (** Conjoining Always properties **)
 
+Goal "Always (A Int B) = Always A Int Always B";
+by (auto_tac (claset(), simpset() addsimps [Always_eq_includes_reachable]));
+qed "Always_Int_distrib";
+
+Goal "Always (INTER I A) = (INT i:I. Always (A i))";
+by (auto_tac (claset(), simpset() addsimps [Always_eq_includes_reachable]));
+qed "Always_INT_distrib";
+
 Goal "[| F : Always A;  F : Always B |] ==> F : Always (A Int B)";
 by (auto_tac (claset(), simpset() addsimps [Always_eq_includes_reachable]));
-qed "Always_Int";
+qed "Always_Int_I";
 
 (*Delete the nearest invariance assumption (which will be the second one
-  used by Always_Int) *)
+  used by Always_Int_I) *)
 val Always_thin =
     read_instantiate_sg (sign_of thy)
                 [("V", "?F : Always ?A")] thin_rl;
 
 (*Combines two invariance ASSUMPTIONS into one.  USEFUL??*)
-val Always_Int_tac = dtac Always_Int THEN' assume_tac THEN' etac Always_thin;
+val Always_Int_tac = dtac Always_Int_I THEN' assume_tac THEN' etac Always_thin;
 
 (*Combines a list of invariance THEOREMS into one.*)
-val Always_Int_rule = foldr1 (fn (th1,th2) => [th1,th2] MRS Always_Int);
+val Always_Int_rule = foldr1 (fn (th1,th2) => [th1,th2] MRS Always_Int_I);
 
 
 (*To allow expansion of the program's definition when appropriate*)