1(* -*-sml-*- *) 2(*****************************************************************************) 3(* Sanity checking "ExecuteSemantics": a derived executable semantics *) 4(* Not for compiling. *) 5(*****************************************************************************) 6 7val _ = loadPath := "../official-semantics" :: 8 "../regexp" :: 9 !loadPath; 10 11val _ = app load ["bossLib","intLib","regexpLib","ExecuteTools"]; 12 13val _ = quietdec := true; 14open bossLib regexpLib; 15val _ = quietdec := false; 16 17fun pth t = let val () = print ("\n" ^ thm_to_string t ^ "\n\n") in t end; 18val EVAL = pth o bossLib.EVAL; 19val Define = pth o bossLib.Define; 20 21(****************************************************************************** 22* Set the trace level of the regular expression library: 23* 0: silent 24* 1: 1 character (either - or +) for each list element processed 25* 2: matches as they are discovered 26* 3: transitions as they are calculated 27* 4: internal state of the automata 28******************************************************************************) 29val _ = set_trace "regexpTools" 2; 30 31(****************************************************************************** 32* Set default parsing to natural numbers rather than integers 33******************************************************************************) 34val _ = intLib.deprecate_int(); 35 36(****************************************************************************** 37* Examples 38******************************************************************************) 39 40(****************************************************************************** 41* [{s0};{s1};{s2}] |= [f1 U f2] (f1, f2 arbitrary formulas) 42******************************************************************************) 43val _ = EVAL ``UF_SEM (FINITE[s0;s1;s2]) (F_UNTIL(f1,f2))``; 44 45(****************************************************************************** 46* [{s0};{s1};{s2}] |= [b1 U b2] (b1, b2 arbitrary boolean expressions ) 47******************************************************************************) 48val _ = EVAL ``UF_SEM (FINITE[s0;s1;s2]) (F_UNTIL(F_BOOL b1, F_BOOL b2))``; 49 50(****************************************************************************** 51* [{s0};{s1};{s2}] |= [p1 U p2] (p1, p2 arbitrary atomic propositions) 52******************************************************************************) 53val _ = 54EVAL 55 ``UF_SEM (FINITE[s0;s1;s2]) (F_UNTIL(F_BOOL(B_PROP p1), F_BOOL(B_PROP p2)))``; 56 57(****************************************************************************** 58* [{s0};{s1};{s2}] |= {1}(2) 59******************************************************************************) 60val _ = 61EVAL 62 ``UF_SEM (FINITE[s0;s1;s2]) (F_UNTIL(F_BOOL(B_PROP 1), F_BOOL(B_PROP 2)))``; 63 64(****************************************************************************** 65* [{1};{1};{2}] |= {1}(2) 66******************************************************************************) 67val _ = 68EVAL 69 ``UF_SEM (FINITE[{1};{1};{2}]) (F_UNTIL(F_BOOL(B_PROP 1), F_BOOL(B_PROP 2)))``; 70 71(****************************************************************************** 72* [{1};{3};{2}] |= {1}(2) 73******************************************************************************) 74val _ = 75EVAL 76 ``UF_SEM (FINITE[{1};{3};{2}]) (F_UNTIL(F_BOOL(B_PROP 1), F_BOOL(B_PROP 2)))``; 77 78(* Can't evaluate a variable regular expression using automata! 79EVAL ``UF_SEM (FINITE[s0;s1;s2]) (F_SUFFIX_IMP(r,f))``; 80EVAL ``UF_SEM (FINITE[{1};{3};{2}]) (F_SUFFIX_IMP(r,f))``; 81*) 82 83(****************************************************************************** 84* [{1};{2};{3}] |= {n}(f) 85******************************************************************************) 86val _ = 87EVAL 88``UF_SEM (FINITE[{1};{2};{3}]) 89 (F_SUFFIX_IMP (S_BOOL (B_PROP n), f))``; 90 91(****************************************************************************** 92* [{1};{2};{3}] |= {n}(p) 93******************************************************************************) 94val _ = 95EVAL 96``UF_SEM (FINITE[{1};{2};{3}]) 97 (F_SUFFIX_IMP (S_BOOL (B_PROP n), F_BOOL(B_PROP p)))``; 98 99(****************************************************************************** 100* [{1};{2};{3}] |= {[*]}(f) 101******************************************************************************) 102val _ = 103EVAL 104``UF_SEM (FINITE[{1};{2};{3}]) 105 (F_SUFFIX_IMP (S_REPEAT S_TRUE, f))``; 106 107(****************************************************************************** 108* [{1};{2};{3}] |= {[*]}(p) 109******************************************************************************) 110val _ = 111EVAL 112``UF_SEM (FINITE[{1};{2};{3}]) 113 (F_SUFFIX_IMP (S_REPEAT S_TRUE, F_BOOL(B_PROP p)))``; 114 115(****************************************************************************** 116* [{p};{p};{p}] |= {[*]}(p) 117******************************************************************************) 118val _ = 119EVAL 120``UF_SEM (FINITE[{p};{p};{p}]) 121 (F_SUFFIX_IMP (S_REPEAT S_TRUE, F_BOOL(B_PROP p)))``; 122 123(****************************************************************************** 124* [{p1};{p2};{p3}] |= {[*]}(p) 125******************************************************************************) 126val _ = 127EVAL 128``UF_SEM (FINITE[{p1};{p2};{p3}]) 129 (F_SUFFIX_IMP (S_REPEAT S_TRUE, F_BOOL(B_PROP p)))``; 130 131(****************************************************************************** 132* [{1};{2};{3};{4};{5};{6};{7};{8};{9}] |= {3}(f) 133******************************************************************************) 134val _ = 135EVAL 136``UF_SEM (FINITE[{1};{2};{3};{4};{5};{6};{7};{8};{9}]) 137 (F_SUFFIX_IMP(S_BOOL(B_PROP 3), f))``; 138 139(****************************************************************************** 140* [{1};{2};{3};{4};{5};{6};{7};{8};{9}] |= {[*];2;3}(f) 141******************************************************************************) 142val _ = 143EVAL 144``UF_SEM (FINITE[{1};{2};{3};{4};{5};{6};{7};{8};{9}]) 145 (F_SUFFIX_IMP 146 (S_CAT(S_REPEAT S_TRUE, S_CAT(S_BOOL (B_PROP 2),S_BOOL (B_PROP 3))), 147 f))``; 148 149(****************************************************************************** 150* [{1};{2};{3};{4};{5};{6};{7};{8};{9}] |= {[*];2:3}(f) 151******************************************************************************) 152val _ = 153EVAL 154``UF_SEM (FINITE[{1};{2};{3};{4};{5};{6};{7};{8};{9}]) 155 (F_SUFFIX_IMP 156 (S_CAT(S_REPEAT S_TRUE, S_FUSION(S_BOOL (B_PROP 2),S_BOOL (B_PROP 3))), 157 f))``; 158 159(****************************************************************************** 160* [{1};{2};{3};{4};{5};{6};{7};{8};{9}] |= {[*];2;3;[*]}(f) 161******************************************************************************) 162val _ = 163EVAL 164``UF_SEM (FINITE[{1};{2};{3};{4};{5};{6};{7};{8};{9}]) 165 (F_SUFFIX_IMP 166 (S_CAT(S_REPEAT S_TRUE, 167 S_CAT(S_CAT(S_BOOL (B_PROP 2),S_BOOL (B_PROP 3)), 168 S_REPEAT S_TRUE)), 169 f))``; 170 171(****************************************************************************** 172* [{1};{2};{3}] |= {[*];3} 173******************************************************************************) 174val _ = 175EVAL ``US_SEM [{1};{2};{3}] (S_CAT(S_REPEAT S_TRUE, S_BOOL(B_PROP 3)))``; 176 177(****************************************************************************** 178* [{1};{2};{3}] |= {[*];2} 179******************************************************************************) 180val _ = 181EVAL ``US_SEM [{1};{2};{3}] (S_CAT(S_REPEAT S_TRUE, S_BOOL(B_PROP 2)))``; 182 183(****************************************************************************** 184* [{1};{2};{3}] |= {[*];2;[*]} 185******************************************************************************) 186val _ = 187EVAL ``US_SEM 188 [{1};{2};{3};{4};{5}] 189 (S_CAT(S_REPEAT S_TRUE, S_CAT(S_BOOL(B_PROP 2), S_REPEAT S_TRUE)))``; 190 191(****************************************************************************** 192* [{1};{2};{3};{4};{5};{6};{7};{8};{9}] |= {1|3} |-> {[*];3}! 193******************************************************************************) 194val _ = 195EVAL 196``UF_SEM (FINITE[{1};{2};{3};{4};{5};{6};{7};{8};{9}]) 197 (F_STRONG_IMP ((S_OR (S_BOOL (B_PROP 1), S_BOOL (B_PROP 3))), 198 (S_CAT (S_REPEAT S_TRUE, S_BOOL (B_PROP 3)))))``; 199 200(****************************************************************************** 201* [{1};{1};{1};{1};{1};{1};{1};{1};{1}] |= always{1} 202******************************************************************************) 203val _ = 204EVAL 205``UF_SEM (FINITE[{1};{1};{1};{1};{1};{1};{1};{1};{1}]) 206 (F_SERE_ALWAYS(S_BOOL(B_PROP 1)))``; 207 208(****************************************************************************** 209* [{1};{1};{1};{1};{1};{1};{1};{1};{1}] |= always{1;1} 210******************************************************************************) 211val _ = 212EVAL 213``UF_SEM (FINITE[{1};{1};{1};{1};{1};{1};{1};{1};{1}]) 214 (F_SERE_ALWAYS(S_CAT(S_BOOL(B_PROP 1), S_BOOL(B_PROP 1))))``; 215 216(****************************************************************************** 217* [{1};{2};{3};{4};{4;5};{4;6};{4;7};{4;8};{4;9}] |= always{4;4} 218******************************************************************************) 219val _ = 220EVAL 221``UF_SEM (FINITE[{1};{2};{3};{4};{4;5};{4;6};{4;7};{4;8};{4;9}]) 222 (F_SERE_ALWAYS(S_CAT(S_BOOL(B_PROP 4), S_BOOL(B_PROP 4))))``; 223 224(****************************************************************************** 225* [{1};{2};{3};{4};{4};{6};{7};{8};{9}] |= never{4;3} 226******************************************************************************) 227val _ = 228EVAL 229``UF_SEM (FINITE[{1};{2};{3};{4};{4};{6};{7};{8};{9}]) 230 (F_SERE_NEVER(S_CAT(S_BOOL(B_PROP 4), S_BOOL(B_PROP 3))))``; 231 232(****************************************************************************** 233* [{1};{2};{3};{4};{4};{6};{7};{8};{9}] |= never{3;4} 234******************************************************************************) 235val _ = 236EVAL 237``UF_SEM (FINITE[{1};{2};{3};{4};{4};{6};{7};{8};{9}]) 238 (F_SERE_NEVER(S_CAT(S_BOOL(B_PROP 3), S_BOOL(B_PROP 4))))``; 239 240 241(****************************************************************************** 242quietdec:=true;; 243loadPath := "../official-semantics" :: "../regexp" :: !loadPath; 244app load ["res_quanTools","PropertiesTheory"]; 245open PSLPathTheory; 246val resq_SS = 247 simpLib.merge_ss 248 [res_quanTools.resq_SS, 249 rewrites 250 [num_to_def,xnum_to_def,IN_DEF,num_to_def,xnum_to_def,LENGTH_def]]; 251quietdec:=false; 252 253val UF_SEM_SUFFIX_IMP_FALSE = 254 store_thm 255 ("UF_SEM_SUFFIX_IMP_FALSE", 256 ``UF_SEM w (F_SUFFIX_IMP(r, F_BOOL B_FALSE)) = 257 !j::(0 to LENGTH w). ~(US_SEM (SEL w (0,j)) r)``, 258 RW_TAC (std_ss++resq_SS) [UF_SEM_def,B_SEM]); 259******************************************************************************) 260 261(****************************************************************************** 262* Generated this from a Verilog model of the BUF example in 263* Chapter 4 of FoCs User's Manual (see test.v) 264* (www.haifa.il.ibm.com/projects/verification/focs/) 265******************************************************************************) 266 267(****************************************************************************** 268* String version 269* val StoB_REQ = ``"StoB_REQ"``; 270* val BtoS_ACK = ``"BtoS_ACK"``; 271* val BtoR_REQ = ``"BtoR_REQ"``; 272* val RtoB_ACK = ``"RtoB_ACK"``; 273******************************************************************************) 274 275(****************************************************************************** 276* Num version 277******************************************************************************) 278val StoB_REQ_def = Define `StoB_REQ = 0`; 279val BtoS_ACK_def = Define `BtoS_ACK = 1`; 280val BtoR_REQ_def = Define `BtoR_REQ = 2`; 281val RtoB_ACK_def = Define `RtoB_ACK = 3`; 282 283quietdec := true; 284val SimRun_def = 285 Define 286 `SimRun = 287 [{}; 288 {StoB_REQ}; 289 {StoB_REQ; BtoS_ACK}; 290 {BtoS_ACK}; 291 {BtoS_ACK; BtoR_REQ}; 292 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 293 {BtoS_ACK; RtoB_ACK}; 294 {}; 295 {StoB_REQ}; 296 {StoB_REQ; BtoS_ACK}; 297 {BtoS_ACK}; 298 {BtoS_ACK; BtoR_REQ}; 299 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 300 {BtoS_ACK; RtoB_ACK}; 301 {}; 302 {StoB_REQ}; 303 {StoB_REQ; BtoS_ACK}; 304 {BtoS_ACK}; 305 {BtoS_ACK; BtoR_REQ}; 306 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 307 {BtoS_ACK; RtoB_ACK}; 308 {}; 309 {StoB_REQ}; 310 {StoB_REQ; BtoS_ACK}; 311 {BtoS_ACK}; 312 {BtoS_ACK; BtoR_REQ}; 313 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 314 {BtoS_ACK; RtoB_ACK}; 315 {}; 316 {StoB_REQ}; 317 {StoB_REQ; BtoS_ACK}; 318 {BtoS_ACK}; 319 {BtoS_ACK; BtoR_REQ}; 320 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 321 {BtoS_ACK; RtoB_ACK}; 322 {}; 323 {StoB_REQ}; 324 {StoB_REQ; BtoS_ACK}; 325 {BtoS_ACK}; 326 {BtoS_ACK; BtoR_REQ}; 327 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 328 {BtoS_ACK; RtoB_ACK}; 329 {}; 330 {StoB_REQ}; 331 {StoB_REQ; BtoS_ACK}; 332 {BtoS_ACK}; 333 {BtoS_ACK; BtoR_REQ}; 334 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 335 {BtoS_ACK; RtoB_ACK}; 336 {}; 337 {StoB_REQ}; 338 {StoB_REQ; BtoS_ACK}; 339 {BtoS_ACK}; 340 {BtoS_ACK; BtoR_REQ}; 341 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 342 {BtoS_ACK; RtoB_ACK}; 343 {}; 344 {StoB_REQ}; 345 {StoB_REQ; BtoS_ACK}; 346 {BtoS_ACK}; 347 {BtoS_ACK; BtoR_REQ}; 348 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 349 {BtoS_ACK; RtoB_ACK}; 350 {}; 351 {StoB_REQ}; 352 {StoB_REQ; BtoS_ACK}; 353 {BtoS_ACK}; 354 {BtoS_ACK; BtoR_REQ}; 355 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 356 {BtoS_ACK; RtoB_ACK}; 357 {}; 358 {StoB_REQ}; 359 {StoB_REQ; BtoS_ACK}; 360 {BtoS_ACK}; 361 {BtoS_ACK; BtoR_REQ}; 362 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 363 {BtoS_ACK; RtoB_ACK}; 364 {}; 365 {StoB_REQ}; 366 {StoB_REQ; BtoS_ACK}; 367 {BtoS_ACK}; 368 {BtoS_ACK; BtoR_REQ}; 369 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 370 {BtoS_ACK; RtoB_ACK}; 371 {}; 372 {StoB_REQ}; 373 {StoB_REQ; BtoS_ACK}; 374 {BtoS_ACK}; 375 {BtoS_ACK; BtoR_REQ}; 376 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 377 {BtoS_ACK; RtoB_ACK}; 378 {}; 379 {StoB_REQ}; 380 {StoB_REQ; BtoS_ACK}; 381 {BtoS_ACK}; 382 {BtoS_ACK; BtoR_REQ}; 383 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 384 {BtoS_ACK; RtoB_ACK}; 385 {}; 386 {StoB_REQ}; 387 {StoB_REQ; BtoS_ACK}; 388 {BtoS_ACK}; 389 {BtoS_ACK; BtoR_REQ}; 390 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 391 {BtoS_ACK; RtoB_ACK}; 392 {}; 393 {StoB_REQ}; 394 {StoB_REQ; BtoS_ACK}; 395 {BtoS_ACK}; 396 {BtoS_ACK; BtoR_REQ}; 397 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 398 {BtoS_ACK; RtoB_ACK}; 399 {}; 400 {StoB_REQ}; 401 {StoB_REQ; BtoS_ACK}; 402 {BtoS_ACK}; 403 {BtoS_ACK; BtoR_REQ}; 404 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 405 {BtoS_ACK; RtoB_ACK}; 406 {}; 407 {StoB_REQ}; 408 {StoB_REQ; BtoS_ACK}; 409 {BtoS_ACK}; 410 {BtoS_ACK; BtoR_REQ}; 411 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 412 {BtoS_ACK; RtoB_ACK}; 413 {}; 414 {StoB_REQ}; 415 {StoB_REQ; BtoS_ACK}; 416 {BtoS_ACK}; 417 {BtoS_ACK; BtoR_REQ}; 418 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 419 {BtoS_ACK; RtoB_ACK}; 420 {}; 421 {StoB_REQ}; 422 {StoB_REQ; BtoS_ACK}; 423 {BtoS_ACK}; 424 {BtoS_ACK; BtoR_REQ}; 425 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 426 {BtoS_ACK; RtoB_ACK}; 427 {}; 428 {StoB_REQ}; 429 {StoB_REQ; BtoS_ACK}; 430 {BtoS_ACK}; 431 {BtoS_ACK; BtoR_REQ}; 432 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 433 {BtoS_ACK; RtoB_ACK}; 434 {}; 435 {StoB_REQ}; 436 {StoB_REQ; BtoS_ACK}; 437 {BtoS_ACK}; 438 {BtoS_ACK; BtoR_REQ}; 439 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 440 {BtoS_ACK; RtoB_ACK}; 441 {}; 442 {StoB_REQ}; 443 {StoB_REQ; BtoS_ACK}; 444 {BtoS_ACK}; 445 {BtoS_ACK; BtoR_REQ}; 446 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 447 {BtoS_ACK; RtoB_ACK}; 448 {}; 449 {StoB_REQ}; 450 {StoB_REQ; BtoS_ACK}; 451 {BtoS_ACK}; 452 {BtoS_ACK; BtoR_REQ}; 453 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 454 {BtoS_ACK; RtoB_ACK}; 455 {}; 456 {StoB_REQ}; 457 {StoB_REQ; BtoS_ACK}; 458 {BtoS_ACK}; 459 {BtoS_ACK; BtoR_REQ}; 460 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 461 {BtoS_ACK; RtoB_ACK}; 462 {}; 463 {StoB_REQ}; 464 {StoB_REQ; BtoS_ACK}; 465 {BtoS_ACK}; 466 {BtoS_ACK; BtoR_REQ}; 467 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 468 {BtoS_ACK; RtoB_ACK}; 469 {}; 470 {StoB_REQ}; 471 {StoB_REQ; BtoS_ACK}; 472 {BtoS_ACK}; 473 {BtoS_ACK; BtoR_REQ}; 474 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 475 {BtoS_ACK; RtoB_ACK}; 476 {}; 477 {StoB_REQ}; 478 {StoB_REQ; BtoS_ACK}; 479 {BtoS_ACK}; 480 {BtoS_ACK; BtoR_REQ}; 481 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 482 {BtoS_ACK; RtoB_ACK}; 483 {}; 484 {StoB_REQ}; 485 {StoB_REQ; BtoS_ACK}; 486 {BtoS_ACK}; 487 {BtoS_ACK; BtoR_REQ}; 488 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 489 {BtoS_ACK; RtoB_ACK}; 490 {}; 491 {StoB_REQ}; 492 {StoB_REQ; BtoS_ACK}; 493 {BtoS_ACK}; 494 {BtoS_ACK; BtoR_REQ}; 495 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 496 {BtoS_ACK; RtoB_ACK}; 497 {}; 498 {StoB_REQ}; 499 {StoB_REQ; BtoS_ACK}; 500 {BtoS_ACK}; 501 {BtoS_ACK; BtoR_REQ}; 502 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 503 {BtoS_ACK; RtoB_ACK}; 504 {}; 505 {StoB_REQ}; 506 {StoB_REQ; BtoS_ACK}; 507 {BtoS_ACK}; 508 {BtoS_ACK; BtoR_REQ}; 509 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 510 {BtoS_ACK; RtoB_ACK}; 511 {}; 512 {StoB_REQ}; 513 {StoB_REQ; BtoS_ACK}; 514 {BtoS_ACK}; 515 {BtoS_ACK; BtoR_REQ}; 516 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 517 {BtoS_ACK; RtoB_ACK}; 518 {}; 519 {StoB_REQ}; 520 {StoB_REQ; BtoS_ACK}; 521 {BtoS_ACK}; 522 {BtoS_ACK; BtoR_REQ}; 523 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 524 {BtoS_ACK; RtoB_ACK}; 525 {}; 526 {StoB_REQ}; 527 {StoB_REQ; BtoS_ACK}; 528 {BtoS_ACK}; 529 {BtoS_ACK; BtoR_REQ}; 530 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 531 {BtoS_ACK; RtoB_ACK}; 532 {}; 533 {StoB_REQ}; 534 {StoB_REQ; BtoS_ACK}; 535 {BtoS_ACK}; 536 {BtoS_ACK; BtoR_REQ}; 537 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 538 {BtoS_ACK; RtoB_ACK}; 539 {}; 540 {StoB_REQ}; 541 {StoB_REQ; BtoS_ACK}; 542 {BtoS_ACK}; 543 {BtoS_ACK; BtoR_REQ}; 544 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 545 {BtoS_ACK; RtoB_ACK}; 546 {}; 547 {StoB_REQ}; 548 {StoB_REQ; BtoS_ACK}; 549 {BtoS_ACK}; 550 {BtoS_ACK; BtoR_REQ}; 551 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 552 {BtoS_ACK; RtoB_ACK}; 553 {}; 554 {StoB_REQ}; 555 {StoB_REQ; BtoS_ACK}; 556 {BtoS_ACK}; 557 {BtoS_ACK; BtoR_REQ}; 558 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 559 {BtoS_ACK; RtoB_ACK}; 560 {}; 561 {StoB_REQ}; 562 {StoB_REQ; BtoS_ACK}; 563 {BtoS_ACK}; 564 {BtoS_ACK; BtoR_REQ}; 565 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 566 {BtoS_ACK; RtoB_ACK}; 567 {}; 568 {StoB_REQ}; 569 {StoB_REQ; BtoS_ACK}; 570 {BtoS_ACK}; 571 {BtoS_ACK; BtoR_REQ}; 572 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 573 {BtoS_ACK; RtoB_ACK}; 574 {}; 575 {StoB_REQ}; 576 {StoB_REQ; BtoS_ACK}; 577 {BtoS_ACK}; 578 {BtoS_ACK; BtoR_REQ}; 579 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 580 {BtoS_ACK; RtoB_ACK}; 581 {}; 582 {StoB_REQ}; 583 {StoB_REQ; BtoS_ACK}; 584 {BtoS_ACK}; 585 {BtoS_ACK; BtoR_REQ}; 586 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 587 {BtoS_ACK; RtoB_ACK}; 588 {}; 589 {StoB_REQ}; 590 {StoB_REQ; BtoS_ACK}; 591 {BtoS_ACK}; 592 {BtoS_ACK; BtoR_REQ}; 593 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 594 {BtoS_ACK; RtoB_ACK}; 595 {}; 596 {StoB_REQ}; 597 {StoB_REQ; BtoS_ACK}; 598 {BtoS_ACK}; 599 {BtoS_ACK; BtoR_REQ}; 600 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 601 {BtoS_ACK; RtoB_ACK}; 602 {}; 603 {StoB_REQ}; 604 {StoB_REQ; BtoS_ACK}; 605 {BtoS_ACK}; 606 {BtoS_ACK; BtoR_REQ}; 607 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 608 {BtoS_ACK; RtoB_ACK}; 609 {}; 610 {StoB_REQ}; 611 {StoB_REQ; BtoS_ACK}; 612 {BtoS_ACK}; 613 {BtoS_ACK; BtoR_REQ}; 614 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 615 {BtoS_ACK; RtoB_ACK}; 616 {}; 617 {StoB_REQ}; 618 {StoB_REQ; BtoS_ACK}; 619 {BtoS_ACK}; 620 {BtoS_ACK; BtoR_REQ}; 621 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 622 {BtoS_ACK; RtoB_ACK}; 623 {}; 624 {StoB_REQ}; 625 {StoB_REQ; BtoS_ACK}; 626 {BtoS_ACK}; 627 {BtoS_ACK; BtoR_REQ}; 628 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 629 {BtoS_ACK; RtoB_ACK}; 630 {}; 631 {StoB_REQ}; 632 {StoB_REQ; BtoS_ACK}; 633 {BtoS_ACK}; 634 {BtoS_ACK; BtoR_REQ}; 635 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 636 {BtoS_ACK; RtoB_ACK}; 637 {}; 638 {StoB_REQ}; 639 {StoB_REQ; BtoS_ACK}; 640 {BtoS_ACK}; 641 {BtoS_ACK; BtoR_REQ}; 642 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 643 {BtoS_ACK; RtoB_ACK}; 644 {}; 645 {StoB_REQ}; 646 {StoB_REQ; BtoS_ACK}; 647 {BtoS_ACK}; 648 {BtoS_ACK; BtoR_REQ}; 649 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 650 {BtoS_ACK; RtoB_ACK}; 651 {}; 652 {StoB_REQ}; 653 {StoB_REQ; BtoS_ACK}; 654 {BtoS_ACK}; 655 {BtoS_ACK; BtoR_REQ}; 656 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 657 {BtoS_ACK; RtoB_ACK}; 658 {}; 659 {StoB_REQ}; 660 {StoB_REQ; BtoS_ACK}; 661 {BtoS_ACK}; 662 {BtoS_ACK; BtoR_REQ}; 663 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 664 {BtoS_ACK; RtoB_ACK}; 665 {}; 666 {StoB_REQ}; 667 {StoB_REQ; BtoS_ACK}; 668 {BtoS_ACK}; 669 {BtoS_ACK; BtoR_REQ}; 670 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 671 {BtoS_ACK; RtoB_ACK}; 672 {}; 673 {StoB_REQ}; 674 {StoB_REQ; BtoS_ACK}; 675 {BtoS_ACK}; 676 {BtoS_ACK; BtoR_REQ}; 677 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 678 {BtoS_ACK; RtoB_ACK}; 679 {}; 680 {StoB_REQ}; 681 {StoB_REQ; BtoS_ACK}; 682 {BtoS_ACK}; 683 {BtoS_ACK; BtoR_REQ}; 684 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 685 {BtoS_ACK; RtoB_ACK}; 686 {}; 687 {StoB_REQ}; 688 {StoB_REQ; BtoS_ACK}; 689 {BtoS_ACK}; 690 {BtoS_ACK; BtoR_REQ}; 691 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 692 {BtoS_ACK; RtoB_ACK}; 693 {}; 694 {StoB_REQ}; 695 {StoB_REQ; BtoS_ACK}; 696 {BtoS_ACK}; 697 {BtoS_ACK; BtoR_REQ}; 698 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 699 {BtoS_ACK; RtoB_ACK}; 700 {}; 701 {StoB_REQ}; 702 {StoB_REQ; BtoS_ACK}; 703 {BtoS_ACK}; 704 {BtoS_ACK; BtoR_REQ}; 705 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 706 {BtoS_ACK; RtoB_ACK}; 707 {}; 708 {StoB_REQ}; 709 {StoB_REQ; BtoS_ACK}; 710 {BtoS_ACK}; 711 {BtoS_ACK; BtoR_REQ}; 712 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 713 {BtoS_ACK; RtoB_ACK}; 714 {}; 715 {StoB_REQ}; 716 {StoB_REQ; BtoS_ACK}; 717 {BtoS_ACK}; 718 {BtoS_ACK; BtoR_REQ}; 719 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 720 {BtoS_ACK; RtoB_ACK}; 721 {}; 722 {StoB_REQ}; 723 {StoB_REQ; BtoS_ACK}; 724 {BtoS_ACK}; 725 {BtoS_ACK; BtoR_REQ}; 726 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 727 {BtoS_ACK; RtoB_ACK}; 728 {}; 729 {StoB_REQ}; 730 {StoB_REQ; BtoS_ACK}; 731 {BtoS_ACK}; 732 {BtoS_ACK; BtoR_REQ}; 733 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 734 {BtoS_ACK; RtoB_ACK}; 735 {}; 736 {StoB_REQ}; 737 {StoB_REQ; BtoS_ACK}; 738 {BtoS_ACK}; 739 {BtoS_ACK; BtoR_REQ}; 740 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 741 {BtoS_ACK; RtoB_ACK}; 742 {}; 743 {StoB_REQ}; 744 {StoB_REQ; BtoS_ACK}; 745 {BtoS_ACK}; 746 {BtoS_ACK; BtoR_REQ}; 747 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 748 {BtoS_ACK; RtoB_ACK}; 749 {}; 750 {StoB_REQ}; 751 {StoB_REQ; BtoS_ACK}; 752 {BtoS_ACK}; 753 {BtoS_ACK; BtoR_REQ}; 754 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 755 {BtoS_ACK; RtoB_ACK}; 756 {}; 757 {StoB_REQ}; 758 {StoB_REQ; BtoS_ACK}; 759 {BtoS_ACK}; 760 {BtoS_ACK; BtoR_REQ}; 761 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 762 {BtoS_ACK; RtoB_ACK}; 763 {}; 764 {StoB_REQ}; 765 {StoB_REQ; BtoS_ACK}; 766 {BtoS_ACK}; 767 {BtoS_ACK; BtoR_REQ}; 768 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 769 {BtoS_ACK; RtoB_ACK}; 770 {}; 771 {StoB_REQ}; 772 {StoB_REQ; BtoS_ACK}; 773 {BtoS_ACK}; 774 {BtoS_ACK; BtoR_REQ}; 775 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 776 {BtoS_ACK; RtoB_ACK}; 777 {}; 778 {StoB_REQ}; 779 {StoB_REQ; BtoS_ACK}; 780 {BtoS_ACK}; 781 {BtoS_ACK; BtoR_REQ}; 782 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 783 {BtoS_ACK; RtoB_ACK}; 784 {}; 785 {StoB_REQ}; 786 {StoB_REQ; BtoS_ACK}; 787 {BtoS_ACK}; 788 {BtoS_ACK; BtoR_REQ}; 789 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 790 {BtoS_ACK; RtoB_ACK}; 791 {}; 792 {StoB_REQ}; 793 {StoB_REQ; BtoS_ACK}; 794 {BtoS_ACK}; 795 {BtoS_ACK; BtoR_REQ}; 796 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 797 {BtoS_ACK; RtoB_ACK}; 798 {}; 799 {StoB_REQ}; 800 {StoB_REQ; BtoS_ACK}; 801 {BtoS_ACK}; 802 {BtoS_ACK; BtoR_REQ}; 803 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 804 {BtoS_ACK; RtoB_ACK}; 805 {}; 806 {StoB_REQ}; 807 {StoB_REQ; BtoS_ACK}; 808 {BtoS_ACK}; 809 {BtoS_ACK; BtoR_REQ}; 810 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 811 {BtoS_ACK; RtoB_ACK}; 812 {}; 813 {StoB_REQ}; 814 {StoB_REQ; BtoS_ACK}; 815 {BtoS_ACK}; 816 {BtoS_ACK; BtoR_REQ}; 817 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 818 {BtoS_ACK; RtoB_ACK}; 819 {}; 820 {StoB_REQ}; 821 {StoB_REQ; BtoS_ACK}; 822 {BtoS_ACK}; 823 {BtoS_ACK; BtoR_REQ}; 824 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 825 {BtoS_ACK; RtoB_ACK}; 826 {}; 827 {StoB_REQ}; 828 {StoB_REQ; BtoS_ACK}; 829 {BtoS_ACK}; 830 {BtoS_ACK; BtoR_REQ}; 831 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 832 {BtoS_ACK; RtoB_ACK}; 833 {}; 834 {StoB_REQ}; 835 {StoB_REQ; BtoS_ACK}; 836 {BtoS_ACK}; 837 {BtoS_ACK; BtoR_REQ}; 838 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 839 {BtoS_ACK; RtoB_ACK}; 840 {}; 841 {StoB_REQ}; 842 {StoB_REQ; BtoS_ACK}; 843 {BtoS_ACK}; 844 {BtoS_ACK; BtoR_REQ}; 845 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 846 {BtoS_ACK; RtoB_ACK}; 847 {}; 848 {StoB_REQ}; 849 {StoB_REQ; BtoS_ACK}; 850 {BtoS_ACK}; 851 {BtoS_ACK; BtoR_REQ}; 852 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 853 {BtoS_ACK; RtoB_ACK}; 854 {}; 855 {StoB_REQ}; 856 {StoB_REQ; BtoS_ACK}; 857 {BtoS_ACK}; 858 {BtoS_ACK; BtoR_REQ}; 859 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 860 {BtoS_ACK; RtoB_ACK}; 861 {}; 862 {StoB_REQ}; 863 {StoB_REQ; BtoS_ACK}; 864 {BtoS_ACK}; 865 {BtoS_ACK; BtoR_REQ}; 866 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 867 {BtoS_ACK; RtoB_ACK}; 868 {}; 869 {StoB_REQ}; 870 {StoB_REQ; BtoS_ACK}; 871 {BtoS_ACK}; 872 {BtoS_ACK; BtoR_REQ}; 873 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 874 {BtoS_ACK; RtoB_ACK}; 875 {}; 876 {StoB_REQ}; 877 {StoB_REQ; BtoS_ACK}; 878 {BtoS_ACK}; 879 {BtoS_ACK; BtoR_REQ}; 880 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 881 {BtoS_ACK; RtoB_ACK}; 882 {}; 883 {StoB_REQ}; 884 {StoB_REQ; BtoS_ACK}; 885 {BtoS_ACK}; 886 {BtoS_ACK; BtoR_REQ}; 887 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 888 {BtoS_ACK; RtoB_ACK}; 889 {}; 890 {StoB_REQ}; 891 {StoB_REQ; BtoS_ACK}; 892 {BtoS_ACK}; 893 {BtoS_ACK; BtoR_REQ}; 894 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 895 {BtoS_ACK; RtoB_ACK}; 896 {}; 897 {StoB_REQ}; 898 {StoB_REQ; BtoS_ACK}; 899 {BtoS_ACK}; 900 {BtoS_ACK; BtoR_REQ}; 901 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 902 {BtoS_ACK; RtoB_ACK}; 903 {}; 904 {StoB_REQ}; 905 {StoB_REQ; BtoS_ACK}; 906 {BtoS_ACK}; 907 {BtoS_ACK; BtoR_REQ}; 908 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 909 {BtoS_ACK; RtoB_ACK}; 910 {}; 911 {StoB_REQ}; 912 {StoB_REQ; BtoS_ACK}; 913 {BtoS_ACK}; 914 {BtoS_ACK; BtoR_REQ}; 915 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 916 {BtoS_ACK; RtoB_ACK}; 917 {}; 918 {StoB_REQ}; 919 {StoB_REQ; BtoS_ACK}; 920 {BtoS_ACK}; 921 {BtoS_ACK; BtoR_REQ}; 922 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 923 {BtoS_ACK; RtoB_ACK}; 924 {}; 925 {StoB_REQ}; 926 {StoB_REQ; BtoS_ACK}; 927 {BtoS_ACK}; 928 {BtoS_ACK; BtoR_REQ}; 929 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 930 {BtoS_ACK; RtoB_ACK}; 931 {}; 932 {StoB_REQ}; 933 {StoB_REQ; BtoS_ACK}; 934 {BtoS_ACK}; 935 {BtoS_ACK; BtoR_REQ}; 936 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 937 {BtoS_ACK; RtoB_ACK}; 938 {}; 939 {StoB_REQ}; 940 {StoB_REQ; BtoS_ACK}; 941 {BtoS_ACK}; 942 {BtoS_ACK; BtoR_REQ}; 943 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 944 {BtoS_ACK; RtoB_ACK}; 945 {}; 946 {StoB_REQ}; 947 {StoB_REQ; BtoS_ACK}; 948 {BtoS_ACK}; 949 {BtoS_ACK; BtoR_REQ}; 950 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 951 {BtoS_ACK; RtoB_ACK}; 952 {}; 953 {StoB_REQ}; 954 {StoB_REQ; BtoS_ACK}; 955 {BtoS_ACK}; 956 {BtoS_ACK; BtoR_REQ}; 957 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 958 {BtoS_ACK; RtoB_ACK}; 959 {}; 960 {StoB_REQ}; 961 {StoB_REQ; BtoS_ACK}; 962 {BtoS_ACK}; 963 {BtoS_ACK; BtoR_REQ}; 964 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 965 {BtoS_ACK; RtoB_ACK}; 966 {}; 967 {StoB_REQ}; 968 {StoB_REQ; BtoS_ACK}; 969 {BtoS_ACK}; 970 {BtoS_ACK; BtoR_REQ}; 971 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 972 {BtoS_ACK; RtoB_ACK}; 973 {}; 974 {StoB_REQ}; 975 {StoB_REQ; BtoS_ACK}; 976 {BtoS_ACK}; 977 {BtoS_ACK; BtoR_REQ}; 978 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 979 {BtoS_ACK; RtoB_ACK}; 980 {}; 981 {StoB_REQ}; 982 {StoB_REQ; BtoS_ACK}; 983 {BtoS_ACK}; 984 {BtoS_ACK; BtoR_REQ}; 985 {BtoS_ACK; BtoR_REQ; RtoB_ACK}; 986 {BtoS_ACK; RtoB_ACK}; 987 {}]`; 988 989quietdec := false; 990 991(* A pure computeLib version *) 992 993(****************************************************************************** 994* SimRun |= {[*]; StoB_REQ; [*]} 995******************************************************************************) 996val _ = 997time 998 EVAL 999 ``US_SEM 1000 SimRun 1001 (S_CAT(S_REPEAT S_TRUE, 1002 S_CAT(S_BOOL(B_PROP StoB_REQ), 1003 S_REPEAT S_TRUE)))``; 1004 1005(****************************************************************************** 1006* SimRun |= {[*]; StoB_REQ; StoB_REQ; [*]} 1007******************************************************************************) 1008val _ = 1009time 1010 EVAL 1011 ``US_SEM 1012 SimRun 1013 (S_CAT(S_REPEAT S_TRUE, 1014 S_CAT(S_CAT(S_BOOL(B_PROP StoB_REQ),S_BOOL(B_PROP StoB_REQ)), 1015 S_REPEAT S_TRUE)))``; 1016 1017 1018(****************************************************************************** 1019* SimRun |= {[*]; StoB_REQ; BtoR_REQ; [*]} 1020******************************************************************************) 1021val _ = 1022time 1023 EVAL 1024 ``US_SEM 1025 SimRun 1026 (S_CAT(S_REPEAT S_TRUE, 1027 S_CAT(S_CAT(S_BOOL(B_PROP StoB_REQ),S_BOOL(B_PROP BtoR_REQ)), 1028 S_REPEAT S_TRUE)))``; 1029 1030(****************************************************************************** 1031* The following 4 properties make up the vunit 1032* four_phase_handshake_left of page 19 of the FoCs User's Manual 1033* with "never r" replaced by "{r}(F)" 1034******************************************************************************) 1035 1036(****************************************************************************** 1037* {[*]; !StoB_REQ & BtoS_ACK; StoB_REQ}(F) 1038******************************************************************************) 1039val _ = 1040time 1041 EVAL 1042 ``UF_SEM 1043 (FINITE SimRun) 1044 (F_SUFFIX_IMP 1045 (S_CAT(S_REPEAT S_TRUE, 1046 S_CAT(S_BOOL(B_AND(B_NOT(B_PROP StoB_REQ), B_PROP BtoS_ACK)), 1047 S_BOOL(B_PROP StoB_REQ))), 1048 F_BOOL B_FALSE))``; 1049 1050(****************************************************************************** 1051* FINITE SimRun |= {[*]; StoB_REG & !BtoS_ACK; !StoB_REQ}(F) 1052******************************************************************************) 1053val _ = 1054time 1055 EVAL 1056 ``UF_SEM 1057 (FINITE SimRun) 1058 (F_SUFFIX_IMP 1059 (S_CAT(S_REPEAT S_TRUE, 1060 S_CAT(S_BOOL(B_AND(B_PROP StoB_REQ, B_NOT(B_PROP BtoS_ACK))), 1061 S_BOOL(B_NOT(B_PROP StoB_REQ)))), 1062 F_BOOL B_FALSE))``; 1063 1064(****************************************************************************** 1065* FINITE SimRun |= {[*]; !BtoS_ACK & !StoB_REQ; BtoS_ACK}(F) 1066******************************************************************************) 1067val _ = 1068time 1069 EVAL 1070 ``UF_SEM 1071 (FINITE SimRun) 1072 (F_SUFFIX_IMP 1073 (S_CAT(S_REPEAT S_TRUE, 1074 S_CAT(S_BOOL(B_AND(B_NOT(B_PROP BtoS_ACK), 1075 B_NOT(B_PROP StoB_REQ))), 1076 S_BOOL(B_PROP BtoS_ACK))), 1077 F_BOOL B_FALSE))``; 1078 1079(****************************************************************************** 1080* {[*]; BtoS_ACK & StoB_REQ; !BtoS_ACK}(F) 1081******************************************************************************) 1082val _ = 1083time 1084 EVAL 1085 ``UF_SEM 1086 (FINITE SimRun) 1087 (F_SUFFIX_IMP 1088 (S_CAT(S_REPEAT S_TRUE, 1089 S_CAT(S_BOOL(B_AND(B_PROP BtoS_ACK, B_PROP StoB_REQ)), 1090 S_BOOL(B_NOT(B_PROP BtoS_ACK)))), 1091 F_BOOL B_FALSE))``; 1092 1093 1094(****************************************************************************** 1095* Make "&" into an infix for F_AND 1096******************************************************************************) 1097val _ = set_fixity "&" (Infixl 500); 1098val F_AND_IX_def = xDefine "F_AND_IX" `$& f1 f2 = F_AND(f1,f2)`; 1099 1100(****************************************************************************** 1101* A single property characterising a four-phase handshake 1102******************************************************************************) 1103 1104val FOUR_PHASE_def = 1105 Define 1106 `FOUR_PHASE req ack = 1107 F_SUFFIX_IMP 1108 (S_CAT(S_REPEAT S_TRUE, 1109 S_CAT(S_BOOL(B_AND(B_NOT(B_PROP req), B_PROP ack)), 1110 S_BOOL(B_PROP req))), 1111 F_BOOL B_FALSE) 1112 & 1113 F_SUFFIX_IMP 1114 (S_CAT(S_REPEAT S_TRUE, 1115 S_CAT(S_BOOL(B_AND(B_PROP req, B_NOT(B_PROP ack))), 1116 S_BOOL(B_NOT(B_PROP req)))), 1117 F_BOOL B_FALSE) 1118 & 1119 F_SUFFIX_IMP 1120 (S_CAT(S_REPEAT S_TRUE, 1121 S_CAT(S_BOOL(B_AND(B_NOT(B_PROP ack), B_NOT(B_PROP req))), 1122 S_BOOL(B_PROP ack))), 1123 F_BOOL B_FALSE) 1124 & 1125 F_SUFFIX_IMP 1126 (S_CAT(S_REPEAT S_TRUE, 1127 S_CAT(S_BOOL(B_AND(B_PROP ack, B_PROP req)), 1128 S_BOOL(B_NOT(B_PROP ack)))), 1129 F_BOOL B_FALSE)`; 1130 1131(****************************************************************************** 1132* vunit four_phase_handskake_left (page 19, FoCs User's Manual) 1133* FOUR_PHASE StoB_REQ BtoS_ACK 1134******************************************************************************) 1135val _ = 1136time EVAL ``UF_SEM (FINITE SimRun) (FOUR_PHASE StoB_REQ BtoS_ACK)``; 1137 1138 1139(****************************************************************************** 1140* vunit four_phase_handskake_right (page 20, FoCs User's Manual) 1141* FOUR_PHASE BtoR_REQ RtoB_ACK 1142******************************************************************************) 1143val _ = 1144time EVAL ``UF_SEM (FINITE SimRun) (FOUR_PHASE BtoR_REQ RtoB_ACK)``; 1145 1146(****************************************************************************** 1147* f1 before f2 = [not f2 W (f1 & not f2)] 1148******************************************************************************) 1149val F_BEFORE_def = 1150 Define 1151 `F_BEFORE(f1,f2) = F_W(F_NOT f2, F_AND(f1, F_NOT f2))`; 1152 1153(****************************************************************************** 1154* FINITE SimRun |= StoB_REQ before BtoS_ACK 1155******************************************************************************) 1156val _ = 1157time 1158 EVAL 1159 ``UF_SEM 1160 (FINITE SimRun) 1161 (F_BEFORE(F_BOOL(B_PROP StoB_REQ), F_BOOL(B_PROP BtoS_ACK)))``; 1162 1163(****************************************************************************** 1164* FINITE SimRun |= BtoS_ACK before StoB_REQ 1165******************************************************************************) 1166val _ = 1167time 1168 EVAL 1169 ``UF_SEM 1170 (FINITE SimRun) 1171 (F_BEFORE(F_BOOL(B_PROP BtoS_ACK), F_BOOL(B_PROP StoB_REQ)))``; 1172 1173(****************************************************************************** 1174* FINITE SimRun |= {[*]}(StoB_REQ before BtoS_ACK) 1175******************************************************************************) 1176val _ = 1177time 1178 EVAL 1179 ``UF_SEM 1180 (FINITE SimRun) 1181 (F_SUFFIX_IMP 1182 (S_REPEAT S_TRUE, 1183 F_BEFORE(F_BOOL(B_PROP StoB_REQ), F_BOOL(B_PROP BtoS_ACK))))``; 1184 1185(****************************************************************************** 1186* FINITE SimRun |= {[*]}(BtoS_ACK before StoB_REQ) 1187******************************************************************************) 1188val _ = 1189time 1190 EVAL 1191 ``UF_SEM 1192 (FINITE SimRun) 1193 (F_SUFFIX_IMP 1194 (S_REPEAT S_TRUE, 1195 F_BEFORE(F_BOOL(B_PROP BtoS_ACK), F_BOOL(B_PROP StoB_REQ))))``; 1196 1197 1198(****************************************************************************** 1199* Make ";;" into an infix for S_CAT 1200******************************************************************************) 1201val _ = set_fixity ";;" (Infixl 500); 1202val S_CAT_IX_def = xDefine "S_CAT_IX" `$;; r1 r2 = S_CAT(r1,r2)`; 1203 1204(****************************************************************************** 1205* FINITE SimRun |= {[*];!BtoS_ACK;BtoS_ACK}(F) 1206******************************************************************************) 1207val _ = 1208time 1209 EVAL 1210 ``UF_SEM 1211 (FINITE SimRun) 1212 (F_SUFFIX_IMP 1213 ((S_REPEAT(S_BOOL B_TRUE) ;; 1214 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1215 S_BOOL(B_PROP BtoS_ACK)), 1216 F_BOOL B_FALSE))``; 1217 1218(****************************************************************************** 1219* FINITE SimRun |= {[*];!BtoS_ACK;BtoS_ACK;[*];!BtoS_ACK;BtoS_ACK}(F) 1220******************************************************************************) 1221val _ = 1222time 1223 EVAL 1224 ``UF_SEM 1225 (FINITE SimRun) 1226 (F_SUFFIX_IMP 1227 ((S_REPEAT(S_BOOL B_TRUE) ;; 1228 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1229 S_BOOL(B_PROP BtoS_ACK) ;; 1230 S_REPEAT(S_BOOL B_TRUE) ;; 1231 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1232 S_BOOL(B_PROP BtoS_ACK)), 1233 F_BOOL B_FALSE))``; 1234 1235(****************************************************************************** 1236* FINITE SimRun |= {[*];BtoS_ACK;[RtoB_ACK];BtoS_ACK}(F) 1237******************************************************************************) 1238val _ = 1239time 1240 EVAL 1241 ``UF_SEM 1242 (FINITE SimRun) 1243 (F_SUFFIX_IMP 1244 ((S_REPEAT(S_BOOL B_TRUE) ;; 1245 S_BOOL(B_PROP BtoS_ACK) ;; 1246 S_REPEAT(S_BOOL(B_PROP RtoB_ACK)) ;; 1247 S_BOOL(B_PROP BtoS_ACK)), 1248 F_BOOL B_FALSE))``; 1249 1250(****************************************************************************** 1251* FINITE SimRun |= {[*];!BtoS_ACK;BtoS_ACK;[RtoB_ACK];!BtoS_ACK;BtoS_ACK}(F) 1252******************************************************************************) 1253val _ = 1254time 1255 EVAL 1256 ``UF_SEM 1257 (FINITE SimRun) 1258 (F_SUFFIX_IMP 1259 ((S_REPEAT(S_BOOL B_TRUE) ;; 1260 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1261 S_BOOL(B_PROP BtoS_ACK) ;; 1262 S_REPEAT(S_BOOL(B_PROP RtoB_ACK)) ;; 1263 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1264 S_BOOL(B_PROP BtoS_ACK)), 1265 F_BOOL B_FALSE))``; 1266 1267(****************************************************************************** 1268* FINITE SimRun |= {[*];BtoS_ACK;[!RtoB_ACK];BtoS_ACK}(F) 1269******************************************************************************) 1270val _ = 1271time 1272 EVAL 1273 ``UF_SEM 1274 (FINITE SimRun) 1275 (F_SUFFIX_IMP 1276 ((S_REPEAT(S_BOOL B_TRUE) ;; 1277 S_BOOL(B_PROP BtoS_ACK) ;; 1278 S_REPEAT(S_BOOL(B_NOT(B_PROP RtoB_ACK))) ;; 1279 S_BOOL(B_PROP BtoS_ACK)), 1280 F_BOOL B_FALSE))``; 1281 1282(****************************************************************************** 1283* FINITE SimRun |= {[*];!BtoS_ACK;BtoS_ACK;[!RtoB_ACK];!BtoS_ACK;BtoS_ACK}(F) 1284******************************************************************************) 1285val _ = 1286time 1287 EVAL 1288 ``UF_SEM 1289 (FINITE SimRun) 1290 (F_SUFFIX_IMP 1291 ((S_REPEAT(S_BOOL B_TRUE) ;; 1292 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1293 S_BOOL(B_PROP BtoS_ACK) ;; 1294 S_REPEAT(S_BOOL(B_NOT(B_PROP RtoB_ACK))) ;; 1295 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1296 S_BOOL(B_PROP BtoS_ACK)), 1297 F_BOOL B_FALSE))``; 1298 1299(****************************************************************************** 1300* FINITE SimRun 1301* |= {[*];!BtoS_ACK;BtoS_ACK;[*];!RtoB_ACK;RtoB_ACK;[*];!BtoS_ACK;BtoS_ACK}(F) 1302******************************************************************************) 1303val _ = 1304time 1305 EVAL 1306 ``UF_SEM 1307 (FINITE SimRun) 1308 (F_SUFFIX_IMP 1309 ((S_REPEAT(S_BOOL B_TRUE) ;; 1310 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1311 S_BOOL(B_PROP BtoS_ACK) ;; 1312 S_REPEAT(S_BOOL(B_TRUE)) ;; 1313 S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; 1314 S_BOOL(B_PROP RtoB_ACK) ;; 1315 S_REPEAT(S_BOOL(B_TRUE)) ;; 1316 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1317 S_BOOL(B_PROP BtoS_ACK)), 1318 F_BOOL B_FALSE))``; 1319 1320(****************************************************************************** 1321* SimRun 1322* |= {[*];!BtoS_ACK;BtoS_ACK; 1323* [BtoS_ACK];[!BtoS_ACK]; 1324* ((!RtoB_ACK;RtoB_ACK;)&&(!BtoS_ACK;!BtoS_ACK)); 1325* [!BtoS_ACK];BtoS_ACK} 1326******************************************************************************) 1327val _ = 1328time 1329 EVAL 1330 ``US_SEM 1331 SimRun 1332 ((S_REPEAT(S_BOOL B_TRUE) ;; 1333 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1334 S_BOOL(B_PROP BtoS_ACK) ;; 1335 S_REPEAT(S_BOOL(B_PROP BtoS_ACK));; 1336 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1337 S_AND((S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; S_BOOL(B_PROP RtoB_ACK)), 1338 (S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; S_BOOL(B_NOT(B_PROP BtoS_ACK)))) ;; 1339 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1340 S_BOOL(B_PROP BtoS_ACK)))``; 1341 1342(****************************************************************************** 1343* FINITE SimRun 1344* |= {[*];!BtoS_ACK;BtoS_ACK; 1345* [BtoS_ACK];[!BtoS_ACK]; 1346* ((!RtoB_ACK;RtoB_ACK;)&&(!BtoS_ACK;!BtoS_ACK)); 1347* [!BtoS_ACK];BtoS_ACK} 1348* (F) 1349******************************************************************************) 1350val _ = 1351time 1352 EVAL 1353 ``UF_SEM 1354 (FINITE SimRun) 1355 (F_SUFFIX_IMP 1356 ((S_REPEAT(S_BOOL B_TRUE) ;; 1357 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1358 S_BOOL(B_PROP BtoS_ACK) ;; 1359 S_REPEAT(S_BOOL(B_PROP BtoS_ACK));; 1360 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1361 S_AND((S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; S_BOOL(B_PROP RtoB_ACK)), 1362 (S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; S_BOOL(B_NOT(B_PROP BtoS_ACK)))) ;; 1363 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1364 S_BOOL(B_PROP BtoS_ACK)), 1365 F_BOOL B_FALSE))``; 1366 1367(****************************************************************************** 1368* FINITE SimRun 1369* |= {[*];!BtoS_ACK;BtoS_ACK; 1370* [BtoS_ACK];[!BtoS_ACK]; 1371* ((!RtoB_ACK;RtoB_ACK;)&&(!BtoS_ACK;!BtoS_ACK)); 1372* [!BtoS_ACK];BtoS_ACK} 1373* (T) 1374******************************************************************************) 1375val _ = 1376time 1377 EVAL 1378 ``UF_SEM 1379 (FINITE SimRun) 1380 (F_SUFFIX_IMP 1381 ((S_REPEAT(S_BOOL B_TRUE) ;; 1382 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1383 S_BOOL(B_PROP BtoS_ACK) ;; 1384 S_REPEAT(S_BOOL(B_PROP BtoS_ACK));; 1385 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1386 S_AND((S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; S_BOOL(B_PROP RtoB_ACK)), 1387 (S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; S_BOOL(B_NOT(B_PROP BtoS_ACK)))) ;; 1388 S_REPEAT(S_BOOL(B_NOT(B_PROP BtoS_ACK)));; 1389 S_BOOL(B_PROP BtoS_ACK)), 1390 F_BOOL B_TRUE))``; 1391(****************************************************************************** 1392* FINITE SimRun 1393* |= {[*];!BtoS_ACK; 1394* BtoS_ACK; 1395* [BtoS_ACK&!RtoB_ACK]; 1396* [!BtoS_ACK&!RoB_ACK]; 1397* BtoS_ACK} 1398* (F) 1399******************************************************************************) 1400val _ = 1401time 1402 EVAL 1403 ``UF_SEM 1404 (FINITE SimRun) 1405 (F_SUFFIX_IMP 1406 ((S_REPEAT(S_BOOL B_TRUE) ;; 1407 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1408 S_BOOL(B_PROP BtoS_ACK) ;; 1409 S_REPEAT(S_BOOL(B_AND(B_PROP BtoS_ACK, 1410 B_NOT(B_PROP RtoB_ACK)))) ;; 1411 S_REPEAT(S_BOOL(B_AND(B_NOT(B_PROP BtoS_ACK), 1412 B_NOT(B_PROP RtoB_ACK)))) ;; 1413 S_BOOL(B_PROP BtoS_ACK)), 1414 F_BOOL B_FALSE))``; 1415 1416 1417(****************************************************************************** 1418* FINITE SimRun |= (!BtoS_ACK & X BtoS_ACK) before (!RtoB_ACK & X RtoB_ACK) 1419******************************************************************************) 1420val _ = 1421time 1422 EVAL 1423 ``UF_SEM 1424 (FINITE SimRun) 1425 (F_BEFORE 1426 (F_AND(F_NOT(F_BOOL(B_PROP RtoB_ACK)), 1427 F_NEXT(F_BOOL(B_PROP RtoB_ACK))), 1428 F_AND(F_NOT(F_BOOL(B_PROP BtoS_ACK)), 1429 F_NEXT(F_BOOL(B_PROP BtoS_ACK)))))``; 1430 1431(****************************************************************************** 1432* FINITE SimRun 1433* |= {[*]; !BtoS_ACK; BtoS_ACK; true} 1434* ((!RtoB_ACK & X RtoB_ACK) before (!BtoS_ACK & X BtoS_ACK)) 1435******************************************************************************) 1436val _ = 1437time 1438 EVAL 1439 ``UF_SEM 1440 (FINITE SimRun) 1441 (F_SUFFIX_IMP 1442 ((S_REPEAT(S_BOOL B_TRUE) ;; 1443 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1444 S_BOOL(B_PROP BtoS_ACK) ;; 1445 S_BOOL B_TRUE), 1446 F_BEFORE 1447 (F_AND(F_NOT(F_BOOL(B_PROP RtoB_ACK)), 1448 F_NEXT(F_BOOL(B_PROP RtoB_ACK))), 1449 F_AND(F_NOT(F_BOOL(B_PROP BtoS_ACK)), 1450 F_NEXT(F_BOOL(B_PROP BtoS_ACK))))))``; 1451 1452(****************************************************************************** 1453* FINITE SimRun 1454* |= {[*]; !RtoB_ACK; RtoB_ACK; true} 1455* ((!BtoS_ACK & X BtoS_ACK) before (!RtoB_ACK & X RtoB_ACK)) 1456******************************************************************************) 1457val _ = 1458time 1459 EVAL 1460 ``UF_SEM 1461 (FINITE SimRun) 1462 (F_SUFFIX_IMP 1463 ((S_REPEAT(S_BOOL B_TRUE) ;; 1464 S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; 1465 S_BOOL(B_PROP RtoB_ACK) ;; 1466 S_BOOL B_TRUE), 1467 F_BEFORE 1468 (F_AND(F_NOT(F_BOOL(B_PROP BtoS_ACK)), 1469 F_NEXT(F_BOOL(B_PROP BtoS_ACK))), 1470 F_AND(F_NOT(F_BOOL(B_PROP RtoB_ACK)), 1471 F_NEXT(F_BOOL(B_PROP RtoB_ACK))))))``; 1472 1473 1474(****************************************************************************** 1475* FINITE SimRun 1476* |= {[*]; !BtoS_ACK; BtoS_ACK} 1477* ((!RtoB_ACK & X RtoB_ACK) before (!BtoS_ACK & X BtoS_ACK)) 1478******************************************************************************) 1479val _ = 1480time 1481 EVAL 1482 ``UF_SEM 1483 (FINITE SimRun) 1484 (F_SUFFIX_IMP 1485 ((S_REPEAT(S_BOOL B_TRUE) ;; 1486 S_BOOL(B_NOT(B_PROP BtoS_ACK)) ;; 1487 S_BOOL(B_PROP BtoS_ACK)), 1488 F_BEFORE 1489 (F_AND(F_NOT(F_BOOL(B_PROP RtoB_ACK)), 1490 F_NEXT(F_BOOL(B_PROP RtoB_ACK))), 1491 F_AND(F_NOT(F_BOOL(B_PROP BtoS_ACK)), 1492 F_NEXT(F_BOOL(B_PROP BtoS_ACK))))))``; 1493 1494(****************************************************************************** 1495* FINITE SimRun 1496* |= {[*]; !RtoB_ACK; RtoB_ACK} 1497* ((!BtoS_ACK & X BtoS_ACK) before (!RtoB_ACK & X RtoB_ACK)) 1498******************************************************************************) 1499val _ = 1500time 1501 EVAL 1502 ``UF_SEM 1503 (FINITE SimRun) 1504 (F_SUFFIX_IMP 1505 ((S_REPEAT(S_BOOL B_TRUE) ;; 1506 S_BOOL(B_NOT(B_PROP RtoB_ACK)) ;; 1507 S_BOOL(B_PROP RtoB_ACK)), 1508 F_BEFORE 1509 (F_AND(F_NOT(F_BOOL(B_PROP BtoS_ACK)), 1510 F_NEXT(F_BOOL(B_PROP BtoS_ACK))), 1511 F_AND(F_NOT(F_BOOL(B_PROP RtoB_ACK)), 1512 F_NEXT(F_BOOL(B_PROP RtoB_ACK))))))``; 1513 1514(****************************************************************************** 1515* Generating checkers from formulas. 1516* An example from the Accellera PSL reference manual, page 45. 1517* Mentioned in Joe Hurd's ARG Lunch, 4 November 2003. 1518******************************************************************************) 1519val pureDefine = with_flag (computeLib.auto_import_definitions, false) Define; 1520val a_def = pureDefine `a = 0`; 1521val b_def = pureDefine `b = 1`; 1522val c_def = pureDefine `c = 2`; 1523val alpha = map Term [`a`,`b`,`c`]; 1524val prop = ``F_AND (F_BOOL (B_PROP c), 1525 F_NEXT (F_W (F_BOOL (B_PROP a), F_BOOL (B_PROP b))))``; 1526val prop_sere = time EVAL ``checker ^prop``; 1527val sere = rhs (concl prop_sere); 1528val sere_re = time EVAL ``sere2regexp ^sere``; 1529val re = rhs (concl sere_re); 1530val dfa = verilog_dfa {alphabet = alpha, name = "Checker1", regexp = re}; 1531val _ = print ("\n\n" ^ dfa ^ "\n\n"); 1532