diff -r b505be6f029a -r 686fa0a0696e src/HOL/IMP/Procs_Dyn_Vars_Dyn.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/IMP/Procs_Dyn_Vars_Dyn.thy Mon Jun 06 16:29:38 2011 +0200 @@ -0,0 +1,40 @@ +theory Procs_Dyn_Vars_Dyn imports Util Procs +begin + +subsubsection "Dynamic Scoping of Procedures and Variables" + +type_synonym penv = "name \ com" + +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)" | + +Call: "pe \ (pe p, s) \ t \ pe \ (CALL p, s) \ t" | + +Proc: "pe(p := cp) \ (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. + (\p. SKIP) \ (CALL ''p'', (%_. 0)(''x'' := 42, ''y'' := 43)) \ t}" + +values "{map t [''x'',''y'',''z''] |t. (\p. SKIP) \ (test_com, (%_. 0)) \ t}" + +end