src/ZF/UNITY/WFair.thy
changeset 11479 697dcaaf478f
child 12195 ed2893765a08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ZF/UNITY/WFair.thy	Wed Aug 08 14:33:10 2001 +0200
@@ -0,0 +1,57 @@
+(*  Title:      HOL/UNITY/WFair.thy
+    ID:         $Id$
+    Author:     Sidi Ehmety, Computer Laboratory
+    Copyright   1998  University of Cambridge
+
+Weak Fairness versions of transient, ensures, leadsTo.
+
+From Misra, "A Logic for Concurrent Programming", 1994
+
+Theory ported from HOL.
+*)
+
+WFair = UNITY +
+constdefs
+  
+  (*This definition specifies weak fairness.  The rest of the theory
+    is generic to all forms of fairness.*) 
+ transient :: "i=>i"
+  "transient(A) =={F:program. (EX act: Acts(F). 
+			       A<= domain(act) & act``A <= state-A) & A:condition}"
+
+  ensures :: "[i,i] => i"       (infixl 60)
+  "A ensures B == ((A-B) co (A Un B)) Int transient(A-B)"
+  
+consts
+
+  (*LEADS-TO constant for the inductive definition*)
+  leads :: "i=>i"
+
+inductive (* All typing conidition `A:condition' will desapear
+             in the dervied rules *)
+  domains
+     "leads(F)" <= "condition*condition"
+  intrs 
+    Basis  "[| F:A ensures B; A:condition; B:condition |] ==> <A,B>:leads(F)"
+    Trans  "[| <A,B> : leads(F); <B,C> : leads(F) |] ==>  <A,C>:leads(F)"
+    Union   "[| S:Pow({A:S. <A, B>:leads(F)});
+		B:condition; S:Pow(condition) |] ==> 
+	      <Union(S),B>:leads(F)"
+
+  monos        Pow_mono
+  type_intrs  "[UnionI, Union_in_conditionI, PowI]"
+ 
+constdefs
+
+  (*visible version of the LEADS-TO relation*)
+  leadsTo :: "[i, i] => i"       (infixl 60)
+    "A leadsTo B == {F:program.  <A,B>:leads(F)}"
+  
+  (*wlt F B is the largest set that leads to B*)
+  wlt :: "[i, i] => i"
+    "wlt(F, B) == Union({A:condition. F: A leadsTo B})"
+
+syntax (xsymbols)
+  "op leadsTo" :: "[i, i] => i" (infixl "\\<longmapsto>" 60)
+
+end