src/HOL/IMP/Def_Ass_Big.thy
author huffman
Thu Aug 11 09:11:15 2011 -0700 (2011-08-11)
changeset 44165 d26a45f3c835
parent 43158 686fa0a0696e
child 47818 151d137f1095
permissions -rw-r--r--
remove lemma stupid_ext
kleing@43158
     1
(* Author: Tobias Nipkow *)
kleing@43158
     2
kleing@43158
     3
theory Def_Ass_Big imports Com Def_Ass_Exp
kleing@43158
     4
begin
kleing@43158
     5
kleing@43158
     6
subsection "Initialization-Sensitive Big Step Semantics"
kleing@43158
     7
kleing@43158
     8
inductive
kleing@43158
     9
  big_step :: "(com \<times> state option) \<Rightarrow> state option \<Rightarrow> bool" (infix "\<Rightarrow>" 55)
kleing@43158
    10
where
kleing@43158
    11
None: "(c,None) \<Rightarrow> None" |
kleing@43158
    12
Skip: "(SKIP,s) \<Rightarrow> s" |
kleing@43158
    13
AssignNone: "aval a s = None \<Longrightarrow> (x ::= a, Some s) \<Rightarrow> None" |
kleing@43158
    14
Assign: "aval a s = Some i \<Longrightarrow> (x ::= a, Some s) \<Rightarrow> Some(s(x := Some i))" |
kleing@43158
    15
Semi:   "(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" |
kleing@43158
    16
kleing@43158
    17
IfNone:  "bval b s = None \<Longrightarrow> (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> None" |
kleing@43158
    18
IfTrue:  "\<lbrakk> bval b s = Some True;  (c\<^isub>1,Some s) \<Rightarrow> s' \<rbrakk> \<Longrightarrow>
kleing@43158
    19
  (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> s'" |
kleing@43158
    20
IfFalse: "\<lbrakk> bval b s = Some False;  (c\<^isub>2,Some s) \<Rightarrow> s' \<rbrakk> \<Longrightarrow>
kleing@43158
    21
  (IF b THEN c\<^isub>1 ELSE c\<^isub>2,Some s) \<Rightarrow> s'" |
kleing@43158
    22
kleing@43158
    23
WhileNone: "bval b s = None \<Longrightarrow> (WHILE b DO c,Some s) \<Rightarrow> None" |
kleing@43158
    24
WhileFalse: "bval b s = Some False \<Longrightarrow> (WHILE b DO c,Some s) \<Rightarrow> Some s" |
kleing@43158
    25
WhileTrue:
kleing@43158
    26
  "\<lbrakk> bval b s = Some True;  (c,Some s) \<Rightarrow> s';  (WHILE b DO c,s') \<Rightarrow> s'' \<rbrakk> \<Longrightarrow>
kleing@43158
    27
  (WHILE b DO c,Some s) \<Rightarrow> s''"
kleing@43158
    28
kleing@43158
    29
lemmas big_step_induct = big_step.induct[split_format(complete)]
kleing@43158
    30
kleing@43158
    31
end