diff -r 71f4ecc08849 -r 702ed601349b thys/Sulzmann.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thys/Sulzmann.thy Sun Mar 13 01:07:34 2016 +0000 @@ -0,0 +1,50 @@ + +theory Sulzmann + imports "ReStar" +begin + + +section {* Sulzmann's "Ordering" of Values *} + + +inductive ValOrd :: "val \ rexp \ val \ bool" ("_ >_ _" [100, 100, 100] 100) +where + C2: "v1 >r1 v1' \ (Seq v1 v2) >(SEQ r1 r2) (Seq v1' v2')" +| C1: "v2 >r2 v2' \ (Seq v1 v2) >(SEQ r1 r2) (Seq v1 v2')" +| A1: "length (flat v2) > length (flat v1) \ (Right v2) >(ALT r1 r2) (Left v1)" +| A2: "length (flat v1) \ length (flat v2) \ (Left v1) >(ALT r1 r2) (Right v2)" +| A3: "v2 >r2 v2' \ (Right v2) >(ALT r1 r2) (Right v2')" +| A4: "v1 >r1 v1' \ (Left v1) >(ALT r1 r2) (Left v1')" +| K1: "flat (Stars (v # vs)) = [] \ (Stars []) >(STAR r) (Stars (v # vs))" +| K2: "flat (Stars (v # vs)) \ [] \ (Stars (v # vs)) >(STAR r) (Stars [])" +| K3: "v1 >r v2 \ (Stars (v1 # vs1)) >(STAR r) (Stars (v2 # vs2))" +| K4: "(Stars vs1) >(STAR r) (Stars vs2) \ (Stars (v # vs1)) >(STAR r) (Stars (v # vs2))" + +definition ValOrdEq :: "val \ rexp \ val \ bool" ("_ \_ _" [100, 100, 100] 100) +where + "v\<^sub>1 \r v\<^sub>2 \ v\<^sub>1 = v\<^sub>2 \ (v\<^sub>1 >r v\<^sub>2 \ flat v\<^sub>1 = flat v\<^sub>2)" + +(* + + +inductive ValOrd :: "val \ rexp \ val \ bool" ("_ \_ _" [100, 100, 100] 100) +where + "v2 \r2 v2' \ (Seq v1 v2) \(SEQ r1 r2) (Seq v1 v2')" +| "\v1 \r1 v1'; v1 \ v1'\ \ (Seq v1 v2) \(SEQ r1 r2) (Seq v1' v2')" +| "length (flat v1) \ length (flat v2) \ (Left v1) \(ALT r1 r2) (Right v2)" +| "length (flat v2) > length (flat v1) \ (Right v2) \(ALT r1 r2) (Left v1)" +| "v2 \r2 v2' \ (Right v2) \(ALT r1 r2) (Right v2')" +| "v1 \r1 v1' \ (Left v1) \(ALT r1 r2) (Left v1')" +| "Void \EMPTY Void" +| "(Char c) \(CHAR c) (Char c)" +| "flat (Stars (v # vs)) = [] \ (Stars []) \(STAR r) (Stars (v # vs))" +| "flat (Stars (v # vs)) \ [] \ (Stars (v # vs)) \(STAR r) (Stars [])" +| "\v1 \r v2; v1 \ v2\ \ (Stars (v1 # vs1)) \(STAR r) (Stars (v2 # vs2))" +| "(Stars vs1) \(STAR r) (Stars vs2) \ (Stars (v # vs1)) \(STAR r) (Stars (v # vs2))" +| "(Stars []) \(STAR r) (Stars [])" +*) + + + + +end \ No newline at end of file