src/HOL/IMP/Def_Init_Big.thy
author nipkow
Fri, 17 May 2013 08:19:52 +0200
changeset 52046 bc01725d7918
parent 50161 4fc4237488ab
child 52726 ee0bd6bababd
permissions -rw-r--r--
replaced `;' by `;;' to disambiguate syntax; unexpected slight increase in build time
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43158
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     1
(* Author: Tobias Nipkow *)
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     2
50161
4fc4237488ab tuned names
nipkow
parents: 47818
diff changeset
     3
theory Def_Init_Big
4fc4237488ab tuned names
nipkow
parents: 47818
diff changeset
     4
imports Com Def_Init_Exp
43158
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     5
begin
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     6
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     7
subsection "Initialization-Sensitive Big Step Semantics"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     8
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
     9
inductive
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    10
  big_step :: "(com \<times> state option) \<Rightarrow> state option \<Rightarrow> bool" (infix "\<Rightarrow>" 55)
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    11
where
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    12
None: "(c,None) \<Rightarrow> None" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    13
Skip: "(SKIP,s) \<Rightarrow> s" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    14
AssignNone: "aval a s = None \<Longrightarrow> (x ::= a, Some s) \<Rightarrow> None" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    15
Assign: "aval a s = Some i \<Longrightarrow> (x ::= a, Some s) \<Rightarrow> Some(s(x := Some i))" |
52046
bc01725d7918 replaced `;' by `;;' to disambiguate syntax; unexpected slight increase in build time
nipkow
parents: 50161
diff changeset
    16
Seq:    "(c\<^isub>1,s\<^isub>1) \<Rightarrow> s\<^isub>2 \<Longrightarrow> (c\<^isub>2,s\<^isub>2) \<Rightarrow> s\<^isub>3 \<Longrightarrow> (c\<^isub>1;;c\<^isub>2,s\<^isub>1) \<Rightarrow> s\<^isub>3" |
43158
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    17
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    18
IfNone:  "bval b s = None \<Longrightarrow> (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> None" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    19
IfTrue:  "\<lbrakk> bval b s = Some True;  (c\<^isub>1,Some s) \<Rightarrow> s' \<rbrakk> \<Longrightarrow>
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    20
  (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> s'" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    21
IfFalse: "\<lbrakk> bval b s = Some False;  (c\<^isub>2,Some s) \<Rightarrow> s' \<rbrakk> \<Longrightarrow>
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    22
  (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> s'" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    23
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    24
WhileNone: "bval b s = None \<Longrightarrow> (WHILE b DO c,Some s) \<Rightarrow> None" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    25
WhileFalse: "bval b s = Some False \<Longrightarrow> (WHILE b DO c,Some s) \<Rightarrow> Some s" |
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    26
WhileTrue:
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    27
  "\<lbrakk> bval b s = Some True;  (c,Some s) \<Rightarrow> s';  (WHILE b DO c,s') \<Rightarrow> s'' \<rbrakk> \<Longrightarrow>
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    28
  (WHILE b DO c,Some s) \<Rightarrow> s''"
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    29
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    30
lemmas big_step_induct = big_step.induct[split_format(complete)]
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    31
686fa0a0696e imported rest of new IMP
kleing
parents:
diff changeset
    32
end