diff -r 664322da08fe -r ee53acaf2420 thys2/PDerivs.thy --- a/thys2/PDerivs.thy Thu Nov 04 13:52:17 2021 +0000 +++ b/thys2/PDerivs.thy Tue Dec 14 16:06:42 2021 +0000 @@ -17,7 +17,7 @@ where "pder c ZERO = {}" | "pder c ONE = {}" -| "pder c (CHAR d) = (if c = d then {ONE} else {})" +| "pder c (CH d) = (if c = d then {ONE} else {})" | "pder c (ALT r1 r2) = (pder c r1) \ (pder c r2)" | "pder c (SEQ r1 r2) = (if nullable r1 then SEQs (pder c r1) r2 \ pder c r2 else SEQs (pder c r1) r2)" @@ -54,7 +54,7 @@ by (induct s) (simp_all) lemma pders_CHAR: - shows "pders s (CHAR c) \ {CHAR c, ONE}" + shows "pders s (CH c) \ {CH c, ONE}" by (induct s) (simp_all) subsection \Relating left-quotients and partial derivatives\ @@ -127,7 +127,7 @@ unfolding UNIV1_def pders_Set_def by (auto split: if_splits) lemma pders_Set_CHAR [simp]: - shows "pders_Set UNIV1 (CHAR c) = {ONE}" + shows "pders_Set UNIV1 (CH c) = {ONE}" unfolding UNIV1_def pders_Set_def apply(auto) apply(frule rev_subsetD) @@ -282,7 +282,7 @@ fun awidth :: "rexp \ nat" where "awidth ZERO = 0" | "awidth ONE = 0" | -"awidth (CHAR a) = 1" | +"awidth (CH a) = 1" | "awidth (ALT r1 r2) = awidth r1 + awidth r2" | "awidth (SEQ r1 r2) = awidth r1 + awidth r2" | "awidth (STAR r1) = awidth r1" @@ -364,7 +364,7 @@ fun subs :: "rexp \ rexp set" where "subs ZERO = {ZERO}" | "subs ONE = {ONE}" | -"subs (CHAR a) = {CHAR a, ONE}" | +"subs (CH a) = {CH a, ONE}" | "subs (ALT r1 r2) = (subs r1 \ subs r2 \ {ALT r1 r2})" | "subs (SEQ r1 r2) = (subs r1 \ subs r2 \ {SEQ r1 r2} \ SEQs (subs r1) r2)" | "subs (STAR r1) = (subs r1 \ {STAR r1} \ SEQs (subs r1) (STAR r1))" @@ -411,7 +411,7 @@ fun size2 :: "rexp \ nat" where "size2 ZERO = 1" | "size2 ONE = 1" | - "size2 (CHAR c) = 1" | + "size2 (CH c) = 1" | "size2 (ALT r1 r2) = Suc (size2 r1 + size2 r2)" | "size2 (SEQ r1 r2) = Suc (size2 r1 + size2 r2)" | "size2 (STAR r1) = Suc (size2 r1)" @@ -425,6 +425,7 @@ apply(simp_all) done +(* lemma subs_card: shows "card (subs r) \ Suc (size2 r + size2 r)" apply(induct r) @@ -433,6 +434,7 @@ apply(simp add: subs_finite) apply(simp add: subs_finite) oops +*) lemma subs_size2: shows "\r1 \ subs r. size2 r1 \ Suc (size2 r * size2 r)" @@ -532,7 +534,7 @@ fun height :: "rexp \ nat" where "height ZERO = 1" | "height ONE = 1" | - "height (CHAR c) = 1" | + "height (CH c) = 1" | "height (ALT r1 r2) = Suc (max (height r1) (height r2))" | "height (SEQ r1 r2) = Suc (max (height r1) (height r2))" | "height (STAR r1) = Suc (height r1)" @@ -555,7 +557,56 @@ apply(induct r) apply(auto)+ done - - + +fun lin_concat :: "(char \ rexp) \ rexp \ (char \ rexp)" (infixl "[.]" 91) + where +"(c, ZERO) [.] t = (c, ZERO)" +| "(c, ONE) [.] t = (c, t)" +| "(c, p) [.] t = (c, SEQ p t)" + + +fun circle_concat :: "(char \ rexp ) set \ rexp \ (char \ rexp) set" ( infixl "\" 90) + where +"l \ ZERO = {}" +| "l \ ONE = l" +| "l \ t = ( (\p. p [.] t) ` l ) " + + + +fun linear_form :: "rexp \( char \ rexp ) set" + where + "linear_form ZERO = {}" +| "linear_form ONE = {}" +| "linear_form (CH c) = {(c, ONE)}" +| "linear_form (ALT r1 r2) = (linear_form) r1 \ (linear_form r2)" +| "linear_form (SEQ r1 r2) = (if (nullable r1) then (linear_form r1) \ r2 \ linear_form r2 else (linear_form r1) \ r2) " +| "linear_form (STAR r ) = (linear_form r) \ (STAR r)" + + +value "linear_form (SEQ (STAR (CH x)) (STAR (ALT (SEQ (CH x) (CH x)) (CH y) )) )" + + +value "linear_form (STAR (ALT (SEQ (CH x) (CH x)) (CH y) )) " + +fun pdero :: "char \ rexp \ rexp set" + where +"pdero c t = \ ((\(d, p). if d = c then {p} else {}) ` (linear_form t) )" + +fun pderso :: "char list \ rexp \ rexp set" + where + "pderso [] r = {r}" +| "pderso (c # s) r = \ ( pderso s ` (pdero c r) )" + +lemma alternative_pder: + shows "pderso s r = pders s r" + sledgehammer + oops + + +export_code height pders subs pderso in Scala module_name Pders +export_code pdero pderso in Scala module_name Pderso +export_code pdero pderso in Scala module_name Pderso + + end \ No newline at end of file