| author | haftmann | 
| Fri, 03 Nov 2006 14:22:40 +0100 | |
| changeset 21154 | c8cc6b68759f | 
| parent 16417 | 9bc16273c2d4 | 
| child 37936 | 1e4c5015a72e | 
| permissions | -rw-r--r-- | 
| 8334 | 1 | (* Title: HOL/UNITY/Detects | 
| 2 | ID: $Id$ | |
| 3 | Author: Tanja Vos, Cambridge University Computer Laboratory | |
| 4 | Copyright 2000 University of Cambridge | |
| 5 | ||
| 6 | Detects definition (Section 3.8 of Chandy & Misra) using LeadsTo | |
| 7 | *) | |
| 8 | ||
| 13798 | 9 | header{*The Detects Relation*}
 | 
| 10 | ||
| 16417 | 11 | theory Detects imports FP SubstAx begin | 
| 8334 | 12 | |
| 13 | consts | |
| 14 | op_Detects :: "['a set, 'a set] => 'a program set" (infixl "Detects" 60) | |
| 15 | op_Equality :: "['a set, 'a set] => 'a set" (infixl "<==>" 60) | |
| 16 | ||
| 17 | defs | |
| 13805 | 18 | Detects_def: "A Detects B == (Always (-A \<union> B)) \<inter> (B LeadsTo A)" | 
| 19 | Equality_def: "A <==> B == (-A \<union> B) \<inter> (A \<union> -B)" | |
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 20 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 21 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 22 | (* Corollary from Sectiom 3.6.4 *) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 23 | |
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 24 | lemma Always_at_FP: | 
| 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 25 | "[|F \<in> A LeadsTo B; all_total F|] ==> F \<in> Always (-((FP F) \<inter> A \<inter> -B))" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 26 | apply (rule LeadsTo_empty) | 
| 13805 | 27 | apply (subgoal_tac "F \<in> (FP F \<inter> A \<inter> - B) LeadsTo (B \<inter> (FP F \<inter> -B))") | 
| 28 | apply (subgoal_tac [2] " (FP F \<inter> A \<inter> - B) = (A \<inter> (FP F \<inter> -B))") | |
| 29 | apply (subgoal_tac "(B \<inter> (FP F \<inter> -B)) = {}")
 | |
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 30 | apply auto | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 31 | apply (blast intro: PSP_Stable stable_imp_Stable stable_FP_Int) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 32 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 33 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 34 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 35 | lemma Detects_Trans: | 
| 13805 | 36 | "[| F \<in> A Detects B; F \<in> B Detects C |] ==> F \<in> A Detects C" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 37 | apply (unfold Detects_def Int_def) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 38 | apply (simp (no_asm)) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 39 | apply safe | 
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 40 | apply (rule_tac [2] LeadsTo_Trans, auto) | 
| 13805 | 41 | apply (subgoal_tac "F \<in> Always ((-A \<union> B) \<inter> (-B \<union> C))") | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 42 | apply (blast intro: Always_weaken) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 43 | apply (simp add: Always_Int_distrib) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 44 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 45 | |
| 13805 | 46 | lemma Detects_refl: "F \<in> A Detects A" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 47 | apply (unfold Detects_def) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 48 | apply (simp (no_asm) add: Un_commute Compl_partition subset_imp_LeadsTo) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 49 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 50 | |
| 13805 | 51 | lemma Detects_eq_Un: "(A<==>B) = (A \<inter> B) \<union> (-A \<inter> -B)" | 
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 52 | by (unfold Equality_def, blast) | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 53 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 54 | (*Not quite antisymmetry: sets A and B agree in all reachable states *) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 55 | lemma Detects_antisym: | 
| 13805 | 56 | "[| F \<in> A Detects B; F \<in> B Detects A|] ==> F \<in> Always (A <==> B)" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 57 | apply (unfold Detects_def Equality_def) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 58 | apply (simp add: Always_Int_I Un_commute) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 59 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 60 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 61 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 62 | (* Theorem from Section 3.8 *) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 63 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 64 | lemma Detects_Always: | 
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 65 | "[|F \<in> A Detects B; all_total F|] ==> F \<in> Always (-(FP F) \<union> (A <==> B))" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 66 | apply (unfold Detects_def Equality_def) | 
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 67 | apply (simp add: Un_Int_distrib Always_Int_distrib) | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 68 | apply (blast dest: Always_at_FP intro: Always_weaken) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 69 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 70 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 71 | (* Theorem from exercise 11.1 Section 11.3.1 *) | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 72 | |
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 73 | lemma Detects_Imp_LeadstoEQ: | 
| 13805 | 74 | "F \<in> A Detects B ==> F \<in> UNIV LeadsTo (A <==> B)" | 
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 75 | apply (unfold Detects_def Equality_def) | 
| 13812 
91713a1915ee
converting HOL/UNITY to use unconditional fairness
 paulson parents: 
13805diff
changeset | 76 | apply (rule_tac B = B in LeadsTo_Diff) | 
| 13805 | 77 | apply (blast intro: Always_LeadsToI subset_imp_LeadsTo) | 
| 78 | apply (blast intro: Always_LeadsTo_weaken) | |
| 13785 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 79 | done | 
| 
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
 paulson parents: 
8334diff
changeset | 80 | |
| 8334 | 81 | |
| 82 | end | |
| 83 |