src/HOL/IMPP/Com.thy
author wenzelm
Sun, 15 Oct 2000 19:50:35 +0200
changeset 10220 2a726de6e124
parent 8177 e59e93ad85eb
child 12338 de0f4a63baa5
permissions -rw-r--r--
proper symbol markup with \isamath, \isatext; support sub/super scripts:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8177
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     1
(*  Title:    HOL/IMPP/Com.thy
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     2
    ID:       $Id$
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     3
    Author:   David von Oheimb (based on a theory by Tobias Nipkow et al), TUM
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     4
    Copyright 1999 TUM
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     5
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     6
Semantics of arithmetic and boolean expressions, Syntax of commands
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     7
*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     8
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     9
Com = Main +
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    10
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    11
types	 val = nat   (* for the meta theory, this may be anything, but with
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    12
                        current Isabelle, types cannot be refined later *)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    13
types	 glb
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    14
         loc
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    15
arities	 (*val,*)glb,loc :: term
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    16
consts   Arg, Res :: loc
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    17
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    18
datatype vname  = Glb glb | Loc loc
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    19
types	 globs  = glb => val
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    20
	 locals = loc => val
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    21
datatype state  = st globs locals
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    22
(* for the meta theory, the following would be sufficient:
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    23
types    state
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    24
arities  state::term
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    25
consts   st:: [globs , locals] => state
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    26
*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    27
types	 aexp   = state => val
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    28
	 bexp   = state => bool
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    29
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    30
types	pname
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    31
arities	pname  :: term
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    32
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    33
datatype com
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    34
      = SKIP
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    35
      | Ass   vname aexp	("_:==_"	        [65, 65    ] 60)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    36
      | Local loc aexp com	("LOCAL _:=_ IN _"	[65,  0, 61] 60)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    37
      | Semi  com  com		("_;; _"	        [59, 60    ] 59)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    38
      | Cond  bexp com com	("IF _ THEN _ ELSE _"	[65, 60, 61] 60)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    39
      | While bexp com		("WHILE _ DO _"		[65,     61] 60)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    40
      | BODY  pname
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    41
      | Call  vname pname aexp	("_:=CALL _'(_')"	[65, 65,  0] 60)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    42
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    43
consts bodies :: "(pname  *  com) list"(* finitely many procedure definitions *)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    44
       body   :: " pname ~=> com"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    45
defs   body_def  "body == map_of bodies"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    46
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    47
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    48
(* Well-typedness: all procedures called must exist *)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    49
consts WTs :: com set
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    50
syntax WT  :: com => bool
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    51
translations "WT c" == "c : WTs"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    52
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    53
inductive WTs intrs
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    54
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    55
    Skip    "WT SKIP"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    56
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    57
    Assign  "WT (X :== a)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    58
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    59
    Local   "WT c ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    60
             WT (LOCAL Y := a IN c)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    61
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    62
    Semi    "[| WT c0; WT c1 |] ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    63
             WT (c0;; c1)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    64
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    65
    If      "[| WT c0; WT c1 |] ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    66
             WT (IF b THEN c0 ELSE c1)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    67
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    68
    While   "WT c ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    69
             WT (WHILE b DO c)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    70
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    71
    Body    "body pn ~= None ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    72
             WT (BODY pn)"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    73
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    74
    Call    "WT (BODY pn) ==>
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    75
             WT (X:=CALL pn(a))"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    76
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    77
constdefs
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    78
  WT_bodies :: bool
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    79
 "WT_bodies == !(pn,b):set bodies. WT b"
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    80
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    81
end