doc-src/TutorialI/CTL/PDL.thy
author nipkow
Mon, 02 Oct 2000 14:25:10 +0200
changeset 10122 194c7349b6c0
parent 9958 67f2920862c7
child 10133 e187dacd248f
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10122
194c7349b6c0 *** empty log message ***
nipkow
parents: 9958
diff changeset
     1
(*<*)theory PDL = Base:(*>*)
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     2
10122
194c7349b6c0 *** empty log message ***
nipkow
parents: 9958
diff changeset
     3
subsection{*Propositional dynmic logic---PDL*}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     4
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     5
datatype ctl_form = Atom atom
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     6
                  | NOT ctl_form
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     7
                  | And ctl_form ctl_form
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     8
                  | AX ctl_form
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     9
                  | EF ctl_form;
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    10
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    11
consts valid :: "state \<Rightarrow> ctl_form \<Rightarrow> bool" ("(_ \<Turnstile> _)" [80,80] 80)
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    12
       M :: "(state \<times> state)set";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    13
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    14
primrec
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    15
"s \<Turnstile> Atom a  = (a\<in>s)"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    16
"s \<Turnstile> NOT f   = (\<not>(s \<Turnstile> f))"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    17
"s \<Turnstile> And f g = (s \<Turnstile> f \<and> s \<Turnstile> g)"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    18
"s \<Turnstile> AX f    = (\<forall>t. (s,t) \<in> M \<longrightarrow> t \<Turnstile> f)"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    19
"s \<Turnstile> EF f    = (\<exists>t. (s,t) \<in> M^* \<and> t \<Turnstile> f)";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    20
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    21
consts mc :: "ctl_form \<Rightarrow> state set";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    22
primrec
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    23
"mc(Atom a)  = {s. a\<in>s}"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    24
"mc(NOT f)   = -mc f"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    25
"mc(And f g) = mc f Int mc g"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    26
"mc(AX f)    = {s. \<forall>t. (s,t) \<in> M  \<longrightarrow> t \<in> mc f}"
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    27
"mc(EF f)    = lfp(\<lambda>T. mc f \<union> {s. \<exists>t. (s,t)\<in>M \<and> t\<in>T})";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    28
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    29
lemma mono_lemma: "mono(\<lambda>T. A \<union> {s. \<exists>t. (s,t)\<in>M \<and> t\<in>T})";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    30
apply(rule monoI);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    31
by(blast);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    32
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    33
lemma lfp_conv_EF:
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    34
"lfp(\<lambda>T. A \<union> {s. \<exists>t. (s,t)\<in>M \<and> t\<in>T}) = {s. \<exists>t. (s,t) \<in> M^* \<and> t \<in> A}";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    35
apply(rule equalityI);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    36
 apply(rule subsetI);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    37
 apply(simp);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    38
 apply(erule Lfp.induct);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    39
  apply(rule mono_lemma);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    40
 apply(simp);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    41
 apply(blast intro: r_into_rtrancl rtrancl_trans);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    42
apply(rule subsetI);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    43
apply(simp);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    44
apply(erule exE);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    45
apply(erule conjE);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    46
apply(erule_tac P = "t\<in>A" in rev_mp);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    47
apply(erule converse_rtrancl_induct);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    48
 apply(rule ssubst[OF lfp_Tarski[OF mono_lemma]]);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    49
 apply(blast);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    50
apply(rule ssubst[OF lfp_Tarski[OF mono_lemma]]);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    51
by(blast);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    52
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    53
theorem "mc f = {s. s \<Turnstile> f}";
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    54
apply(induct_tac f);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    55
by(auto simp add:lfp_conv_EF);
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    56
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    57
end;