src/HOL/TLA/Action.thy
changeset 60591 e0b77517f9a9
parent 60588 750c533459b1
child 60592 c9bd1d902f04
equal deleted inserted replaced
60590:479071e8778f 60591:e0b77517f9a9
    51   "_prime"           =>   "_after"
    51   "_prime"           =>   "_after"
    52   "_unchanged"       ==   "CONST unch"
    52   "_unchanged"       ==   "CONST unch"
    53   "_SqAct"           ==   "CONST SqAct"
    53   "_SqAct"           ==   "CONST SqAct"
    54   "_AnAct"           ==   "CONST AnAct"
    54   "_AnAct"           ==   "CONST AnAct"
    55   "_Enabled"         ==   "CONST enabled"
    55   "_Enabled"         ==   "CONST enabled"
    56   "w |= [A]_v"       <=   "_SqAct A v w"
    56   "w \<Turnstile> [A]_v"       <=   "_SqAct A v w"
    57   "w |= <A>_v"       <=   "_AnAct A v w"
    57   "w \<Turnstile> <A>_v"       <=   "_AnAct A v w"
    58   "s |= Enabled A"   <=   "_Enabled A s"
    58   "s \<Turnstile> Enabled A"   <=   "_Enabled A s"
    59   "w |= unchanged f" <=   "_unchanged f w"
    59   "w \<Turnstile> unchanged f" <=   "_unchanged f w"
    60 
    60 
    61 axiomatization where
    61 axiomatization where
    62   unl_before:    "(ACT $v) (s,t) \<equiv> v s" and
    62   unl_before:    "(ACT $v) (s,t) \<equiv> v s" and
    63   unl_after:     "(ACT v$) (s,t) \<equiv> v t" and
    63   unl_after:     "(ACT v$) (s,t) \<equiv> v t" and
    64 
    64 
   159   apply (erule conjE)
   159   apply (erule conjE)
   160   apply simp
   160   apply simp
   161   done
   161   done
   162 
   162 
   163 lemma square_simulation:
   163 lemma square_simulation:
   164    "\<And>f. \<lbrakk> \<turnstile> unchanged f & \<not>B \<longrightarrow> unchanged g;
   164    "\<And>f. \<lbrakk> \<turnstile> unchanged f \<and> \<not>B \<longrightarrow> unchanged g;
   165             \<turnstile> A & \<not>unchanged g \<longrightarrow> B
   165             \<turnstile> A \<and> \<not>unchanged g \<longrightarrow> B
   166          \<rbrakk> \<Longrightarrow> \<turnstile> [A]_f \<longrightarrow> [B]_g"
   166          \<rbrakk> \<Longrightarrow> \<turnstile> [A]_f \<longrightarrow> [B]_g"
   167   apply clarsimp
   167   apply clarsimp
   168   apply (erule squareE)
   168   apply (erule squareE)
   169   apply (auto simp add: square_def)
   169   apply (auto simp add: square_def)
   170   done
   170   done
   208   apply (rule min [THEN enabledE])
   208   apply (rule min [THEN enabledE])
   209   apply (rule enabledI [action_use])
   209   apply (rule enabledI [action_use])
   210   apply (erule maj)
   210   apply (erule maj)
   211   done
   211   done
   212 
   212 
   213 lemma enabled_disj1: "\<turnstile> Enabled F \<longrightarrow> Enabled (F | G)"
   213 lemma enabled_disj1: "\<turnstile> Enabled F \<longrightarrow> Enabled (F \<or> G)"
   214   by (auto elim!: enabled_mono)
   214   by (auto elim!: enabled_mono)
   215 
   215 
   216 lemma enabled_disj2: "\<turnstile> Enabled G \<longrightarrow> Enabled (F | G)"
   216 lemma enabled_disj2: "\<turnstile> Enabled G \<longrightarrow> Enabled (F \<or> G)"
   217   by (auto elim!: enabled_mono)
   217   by (auto elim!: enabled_mono)
   218 
   218 
   219 lemma enabled_conj1: "\<turnstile> Enabled (F & G) \<longrightarrow> Enabled F"
   219 lemma enabled_conj1: "\<turnstile> Enabled (F \<and> G) \<longrightarrow> Enabled F"
   220   by (auto elim!: enabled_mono)
   220   by (auto elim!: enabled_mono)
   221 
   221 
   222 lemma enabled_conj2: "\<turnstile> Enabled (F & G) \<longrightarrow> Enabled G"
   222 lemma enabled_conj2: "\<turnstile> Enabled (F \<and> G) \<longrightarrow> Enabled G"
   223   by (auto elim!: enabled_mono)
   223   by (auto elim!: enabled_mono)
   224 
   224 
   225 lemma enabled_conjE:
   225 lemma enabled_conjE:
   226     "\<lbrakk> s \<Turnstile> Enabled (F & G); \<lbrakk> s \<Turnstile> Enabled F; s \<Turnstile> Enabled G \<rbrakk> \<Longrightarrow> Q \<rbrakk> \<Longrightarrow> Q"
   226     "\<lbrakk> s \<Turnstile> Enabled (F \<and> G); \<lbrakk> s \<Turnstile> Enabled F; s \<Turnstile> Enabled G \<rbrakk> \<Longrightarrow> Q \<rbrakk> \<Longrightarrow> Q"
   227   apply (frule enabled_conj1 [action_use])
   227   apply (frule enabled_conj1 [action_use])
   228   apply (drule enabled_conj2 [action_use])
   228   apply (drule enabled_conj2 [action_use])
   229   apply simp
   229   apply simp
   230   done
   230   done
   231 
   231 
   232 lemma enabled_disjD: "\<turnstile> Enabled (F | G) \<longrightarrow> Enabled F | Enabled G"
   232 lemma enabled_disjD: "\<turnstile> Enabled (F \<or> G) \<longrightarrow> Enabled F \<or> Enabled G"
   233   by (auto simp add: enabled_def)
   233   by (auto simp add: enabled_def)
   234 
   234 
   235 lemma enabled_disj: "\<turnstile> Enabled (F | G) = (Enabled F | Enabled G)"
   235 lemma enabled_disj: "\<turnstile> Enabled (F \<or> G) = (Enabled F \<or> Enabled G)"
   236   apply clarsimp
   236   apply clarsimp
   237   apply (rule iffI)
   237   apply (rule iffI)
   238    apply (erule enabled_disjD [action_use])
   238    apply (erule enabled_disjD [action_use])
   239   apply (erule disjE enabled_disj1 [action_use] enabled_disj2 [action_use])+
   239   apply (erule disjE enabled_disj1 [action_use] enabled_disj2 [action_use])+
   240   done
   240   done
   292 
   292 
   293 (* Example *)
   293 (* Example *)
   294 
   294 
   295 lemma
   295 lemma
   296   assumes "basevars (x,y,z)"
   296   assumes "basevars (x,y,z)"
   297   shows "\<turnstile> x \<longrightarrow> Enabled ($x & (y$ = #False))"
   297   shows "\<turnstile> x \<longrightarrow> Enabled ($x \<and> (y$ = #False))"
   298   apply (enabled assms)
   298   apply (enabled assms)
   299   apply auto
   299   apply auto
   300   done
   300   done
   301 
   301 
   302 end
   302 end