Safe and Live Assertions.Library fragmentdef bundle __std_lib() { input __local_timer#time_now #(hours : {0..23}, minutes : {0..59}, seconds : { 0..59}, cseconds : { 0..99 } ); fun sleep_secs(t) { local until : { 0..59 }; until := (__local_timer#time_now#second + t); wait(__local_timer#time_now#second FQGT until); } ... } A door unlock exampledef bundle ButtonLock() { input v#keys#button : { false:true}; output v#locks#unlocked : { false:true }; forever { wait (button); unlocked := true; sleep_secs(5); unlocked := false; wait (!button); } local locked := !unlocked; live unlocked, locked; } Incompatible Bundledef bundle B2() { pebble lock = tup://128.232.1.45/v; input d#q : bool; r#keys#button := lock#locks#unlocked && d#q; } The lock would become deadlocked and hence bundle B2 cannot be loaded. Domain manager should rehydrate the pebble statement and then detect the clash. |