new rule single_LeadsTo_I; stronger PSP rule; PSP_stable2->PSP_Stable2
authorpaulson
Mon, 24 May 1999 15:49:24 +0200
changeset 6710 4d438b714571
parent 6709 1ca01fc3cca1
child 6711 d45359e7dcbf
new rule single_LeadsTo_I; stronger PSP rule; PSP_stable2->PSP_Stable2
src/HOL/UNITY/SubstAx.ML
--- a/src/HOL/UNITY/SubstAx.ML	Mon May 24 15:48:27 1999 +0200
+++ b/src/HOL/UNITY/SubstAx.ML	Mon May 24 15:49:24 1999 +0200
@@ -84,6 +84,13 @@
 by (blast_tac (claset() addIs [LeadsTo_Union]) 1);
 qed "LeadsTo_Un";
 
+(*Lets us look at the starting state*)
+val prems = 
+Goal "(!!s. s : A ==> F : {s} LeadsTo B) ==> F : A LeadsTo B";
+by (stac (UN_singleton RS sym) 1 THEN rtac LeadsTo_UN 1);
+by (blast_tac (claset() addIs prems) 1);
+qed "single_LeadsTo_I";
+
 Goal "A <= B ==> F : A LeadsTo B";
 by (simp_tac (simpset() addsimps [LeadsTo_def]) 1);
 by (blast_tac (claset() addIs [subset_imp_leadsTo]) 1);
@@ -257,22 +264,22 @@
 by (dtac psp_stable 1);
 by (assume_tac 1);
 by (asm_full_simp_tac (simpset() addsimps Int_ac) 1);
-qed "PSP_stable";
+qed "PSP_Stable";
 
 Goal "[| F : A LeadsTo A'; F : Stable B |] \
 \     ==> F : (B Int A) LeadsTo (B Int A')";
-by (asm_simp_tac (simpset() addsimps PSP_stable::Int_ac) 1);
-qed "PSP_stable2";
+by (asm_simp_tac (simpset() addsimps PSP_Stable::Int_ac) 1);
+qed "PSP_Stable2";
 
 Goal "[| F : A LeadsTo A'; F : B Co B' |] \
-\     ==> F : (A Int B) LeadsTo ((A' Int B) Un (B' - B))";
+\     ==> F : (A Int B') LeadsTo ((A' Int B) Un (B' - B))";
 by (full_simp_tac
     (simpset() addsimps [LeadsTo_def, Constrains_eq_constrains]) 1);
 by (blast_tac (claset() addDs [psp] addIs [leadsTo_weaken]) 1);
 qed "PSP";
 
 Goal "[| F : A LeadsTo A'; F : B Co B' |] \
-\     ==> F : (B Int A) LeadsTo ((B Int A') Un (B' - B))";
+\     ==> F : (B' Int A) LeadsTo ((B Int A') Un (B' - B))";
 by (asm_simp_tac (simpset() addsimps PSP::Int_ac) 1);
 qed "PSP2";
 
@@ -290,7 +297,7 @@
 \        F : Always (-A Un B Un C) |] ==> F : A LeadsTo B";
 by (etac Always_LeadsTo_weaken 1);
 by (rtac LeadsTo_Diff 1);
-by (etac (transient_imp_leadsTo RS leadsTo_imp_LeadsTo RS PSP_stable2) 2);
+by (etac (transient_imp_leadsTo RS leadsTo_imp_LeadsTo RS PSP_Stable2) 2);
 by (ALLGOALS (blast_tac (claset() addIs [subset_imp_LeadsTo])));
 qed "Stable_transient_Always_LeadsTo";