| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Mon, 20 Oct 2025 22:18:21 +0200 | |
| changeset 1013 | 1a23d87d1700 | 
| parent 565 | 2be8c4c77418 | 
| permissions | -rw-r--r-- | 
| 422 | 1 | def simp(r: Rexp) : Rexp = r match {
 | 
| 262 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 2 |   case ALT(r1, r2) => {
 | 
| 343 
539b2e88f5b9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
262diff
changeset | 3 |     (simp(r1), simp(r2)) match {
 | 
| 399 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 4 | case (ZERO, r2s) => r2s | 
| 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 5 | case (r1s, ZERO) => r1s | 
| 412 | 6 | case (r1s, r2s) => | 
| 7 | if (r1s == r2s) r1s else ALT(r1s, r2s) | |
| 262 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 8 | } | 
| 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 9 | } | 
| 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 10 |   case SEQ(r1, r2) => {
 | 
| 343 
539b2e88f5b9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
262diff
changeset | 11 |     (simp(r1), simp(r2)) match {
 | 
| 399 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 12 | case (ZERO, _) => ZERO | 
| 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 13 | case (_, ZERO) => ZERO | 
| 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 14 | case (ONE, r2s) => r2s | 
| 
5c1fbb39c93e
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
343diff
changeset | 15 | case (r1s, ONE) => r1s | 
| 343 
539b2e88f5b9
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
262diff
changeset | 16 | case (r1s, r2s) => SEQ(r1s, r2s) | 
| 262 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 17 | } | 
| 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 18 | } | 
| 
ee4304bc6350
updated handouts
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
117diff
changeset | 19 | case r => r | 
| 7 | 20 | } | 
| 21 | ||
| 412 | 22 | def ders(s: List[Char], r: Rexp) : Rexp = s match {
 | 
| 117 
25999de692b2
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 23 | case Nil => r | 
| 435 
e08431a78f66
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
422diff
changeset | 24 |   case c::s => ders(s, simp(der(c, r)))             /*@\label{simpline}@*/ 
 | 
| 117 
25999de692b2
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 25 | } | 
| 
25999de692b2
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 26 |