# HG changeset patch # User Christian Urban # Date 1489236601 0 # Node ID 18d19d039ac91815abcc2363ea461116f84d61d3 # Parent 654b542ce8db721afcfa91270dd2bf3d29efd046 updated diff -r 654b542ce8db -r 18d19d039ac9 Literature/automata-explosion-gpu.pdf Binary file Literature/automata-explosion-gpu.pdf has changed diff -r 654b542ce8db -r 18d19d039ac9 Literature/automata-explosion2.pdf Binary file Literature/automata-explosion2.pdf has changed diff -r 654b542ce8db -r 18d19d039ac9 Literature/regex-low-lewel-code-verify.pdf Binary file Literature/regex-low-lewel-code-verify.pdf has changed diff -r 654b542ce8db -r 18d19d039ac9 progs/scala/re-ext.scala --- a/progs/scala/re-ext.scala Wed Mar 08 10:32:51 2017 +0000 +++ b/progs/scala/re-ext.scala Sat Mar 11 12:50:01 2017 +0000 @@ -157,7 +157,8 @@ case c::cs => inj(r, c, lex(der(c, r), cs)) } -def lexing(r: Rexp, s: String) : Val = lex(r, s.toList) +import scala.util._ +def lexing(r: Rexp, s: String) : Try[Val] = Try(lex(r, s.toList)) // some "rectification" functions for simplification @@ -243,6 +244,18 @@ println(lexing_simp((("" | "a") ~ ("c" | "ab")), "ab")) +// Some more Tests +//================= +val ALL = CHARS((c) => true) +val reg = ALL.% ~ "a" ~ NTIMES(ALL, 3) ~ "bc" + +println(lexing(reg, "axaybzbc")) // true +println(lexing(reg, "aaaaxaybzbc")) // true +println(nullable(ders("axaybzbd".toList, reg))) // false +println(lexing(reg, "axaybzbd")) // false + + + // Two Simple Tests for the While Language //======================================== diff -r 654b542ce8db -r 18d19d039ac9 thys/LexerExt.thy --- a/thys/LexerExt.thy Wed Mar 08 10:32:51 2017 +0000 +++ b/thys/LexerExt.thy Sat Mar 11 12:50:01 2017 +0000 @@ -781,11 +781,11 @@ \(\s\<^sub>3 s\<^sub>4. s\<^sub>3 \ [] \ s\<^sub>3 @ s\<^sub>4 = s2 \ (s1 @ s\<^sub>3) \ L r \ s\<^sub>4 \ L (NTIMES r n))\ \ (s1 @ s2) \ NTIMES r (Suc n) \ Stars (v # vs)" | Posix_NTIMES2: "[] \ NTIMES r 0 \ Stars []" -| Posix_FROMNTIMES1: "\s1 \ r \ v; s2 \ FROMNTIMES r n \ Stars vs; +| Posix_FROMNTIMES1: "\s1 \ r \ v; s2 \ FROMNTIMES r n \ Stars vs; \(\s\<^sub>3 s\<^sub>4. s\<^sub>3 \ [] \ s\<^sub>3 @ s\<^sub>4 = s2 \ (s1 @ s\<^sub>3) \ L r \ s\<^sub>4 \ L (FROMNTIMES r n))\ \ (s1 @ s2) \ FROMNTIMES r (Suc n) \ Stars (v # vs)" | Posix_FROMNTIMES2: "s \ STAR r \ Stars vs \ s \ FROMNTIMES r 0 \ Stars vs" -| Posix_NMTIMES1: "\s1 \ r \ v; s2 \ NMTIMES r n m \ Stars vs; +| Posix_NMTIMES1: "\s1 \ r \ v; s2 \ NMTIMES r n m \ Stars vs; flat v = [] \ flat (Stars vs) = []; \(\s\<^sub>3 s\<^sub>4. s\<^sub>3 \ [] \ s\<^sub>3 @ s\<^sub>4 = s2 \ (s1 @ s\<^sub>3) \ L r \ s\<^sub>4 \ L (NMTIMES r n m))\ \ (s1 @ s2) \ NMTIMES r (Suc n) (Suc m) \ Stars (v # vs)" | Posix_NMTIMES2: "s \ UPNTIMES r m \ Stars vs \ s \ NMTIMES r 0 m \ Stars vs" @@ -1164,7 +1164,7 @@ then obtain v' vs' where "v2 = Stars (v' # vs')" "s1 \ r \ v'" "s2 \ (NMTIMES r n m) \ (Stars vs')" apply(cases) apply (auto simp add: append_eq_append_conv2) using Posix1(1) apply fastforce - by (metis Posix1(1) Posix_NMTIMES1.hyps(5) append_Nil append_Nil2) + by (m etis Posix1(1) Posix_NMTIMES1.hyps(5) append_Nil append_Nil2) moreover have IHs: "\v2. s1 \ r \ v2 \ v = v2" "\v2. s2 \ NMTIMES r n m \ v2 \ Stars vs = v2" by fact+