diff -r b505be6f029a -r 686fa0a0696e src/HOL/IMP/Procs_Stat_Vars_Dyn.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/IMP/Procs_Stat_Vars_Dyn.thy Mon Jun 06 16:29:38 2011 +0200 @@ -0,0 +1,43 @@ +theory Procs_Stat_Vars_Dyn imports Util Procs +begin + +subsubsection "Static Scoping of Procedures, Dynamic of Variables" + +type_synonym penv = "(name \ com) list" + +inductive + big_step :: "penv \ com \ state \ state \ bool" ("_ \ _ \ _" [60,0,60] 55) +where +Skip: "pe \ (SKIP,s) \ s" | +Assign: "pe \ (x ::= a,s) \ s(x := aval a s)" | +Semi: "\ pe \ (c\<^isub>1,s\<^isub>1) \ s\<^isub>2; pe \ (c\<^isub>2,s\<^isub>2) \ s\<^isub>3 \ \ + pe \ (c\<^isub>1;c\<^isub>2, s\<^isub>1) \ s\<^isub>3" | + +IfTrue: "\ bval b s; pe \ (c\<^isub>1,s) \ t \ \ + pe \ (IF b THEN c\<^isub>1 ELSE c\<^isub>2, s) \ t" | +IfFalse: "\ \bval b s; pe \ (c\<^isub>2,s) \ t \ \ + pe \ (IF b THEN c\<^isub>1 ELSE c\<^isub>2, s) \ t" | + +WhileFalse: "\bval b s \ pe \ (WHILE b DO c,s) \ s" | +WhileTrue: + "\ bval b s\<^isub>1; pe \ (c,s\<^isub>1) \ s\<^isub>2; pe \ (WHILE b DO c, s\<^isub>2) \ s\<^isub>3 \ \ + pe \ (WHILE b DO c, s\<^isub>1) \ s\<^isub>3" | + +Var: "pe \ (c,s) \ t \ pe \ ({VAR x;; c}, s) \ t(x := s x)" | + +Call1: "(p,c)#pe \ (c, s) \ t \ (p,c)#pe \ (CALL p, s) \ t" | +Call2: "\ p' \ p; pe \ (CALL p, s) \ t \ \ + (p',c)#pe \ (CALL p, s) \ t" | + +Proc: "(p,cp)#pe \ (c,s) \ t \ pe \ ({PROC p = cp;; c}, s) \ t" + +code_pred big_step . + + +(* FIXME: example state syntax *) +values "{map t [''x'', ''y'', ''z''] |t. + [] \ (CALL ''p'', (%_. 0)(''x'' := 42, ''y'' := 43)) \ t}" + +values "{map t [''x'', ''y'', ''z''] |t. [] \ (test_com, (%_. 0) ) \ t}" + +end