author | ballarin |
Thu, 03 Aug 2006 14:57:26 +0200 | |
changeset 20318 | 0e0ea63fe768 |
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:
8334
diff
changeset
|
20 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
21 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
22 |
(* Corollary from Sectiom 3.6.4 *) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
23 |
|
13812
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
changeset
|
24 |
lemma Always_at_FP: |
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
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:
8334
diff
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:
8334
diff
changeset
|
30 |
apply auto |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
changeset
|
32 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
33 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
34 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
changeset
|
37 |
apply (unfold Detects_def Int_def) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
38 |
apply (simp (no_asm)) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
39 |
apply safe |
13812
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
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:
8334
diff
changeset
|
42 |
apply (blast intro: Always_weaken) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
43 |
apply (simp add: Always_Int_distrib) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
44 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
changeset
|
47 |
apply (unfold Detects_def) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
changeset
|
49 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
13805
diff
changeset
|
52 |
by (unfold Equality_def, blast) |
13785
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
53 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
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:
8334
diff
changeset
|
57 |
apply (unfold Detects_def Equality_def) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
58 |
apply (simp add: Always_Int_I Un_commute) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
59 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
60 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
61 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
62 |
(* Theorem from Section 3.8 *) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
63 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
64 |
lemma Detects_Always: |
13812
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
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:
8334
diff
changeset
|
66 |
apply (unfold Detects_def Equality_def) |
13812
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
changeset
|
67 |
apply (simp add: Un_Int_distrib Always_Int_distrib) |
13785
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
68 |
apply (blast dest: Always_at_FP intro: Always_weaken) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
69 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
70 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
71 |
(* Theorem from exercise 11.1 Section 11.3.1 *) |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
72 |
|
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
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:
8334
diff
changeset
|
75 |
apply (unfold Detects_def Equality_def) |
13812
91713a1915ee
converting HOL/UNITY to use unconditional fairness
paulson
parents:
13805
diff
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:
8334
diff
changeset
|
79 |
done |
e2fcd88be55d
Partial conversion of UNITY to Isar new-style theories
paulson
parents:
8334
diff
changeset
|
80 |
|
8334 | 81 |
|
82 |
end |
|
83 |