Replies: 1 comment
How
|
sometimes o1[t] = i1[t]' |
sometimes o1[t] = i1[t] & i2[t] |
|
|---|---|---|
| Constants chosen by solver | _uc_i1 = 0 |
_uc_i1 = 0, _uc_i2 = 0 |
| Guard fires when | i1[t] = 0 |
i1[t] = 0 AND i2[t] = 0 |
| Output at firing step | o1 = 0' = T (non-zero, visible) |
o1 = 0 & 0 = 0 (zero, invisible) |
| Output for any other input | 0 (guard not matched) |
0 (guard not matched) |
Providing T, T as inputs still gives F because:
guard = (T = F) && (T = F) = FALSE
The implication FALSE → psi is vacuously true — no constraint on o1, so it defaults to 0.
Root Cause
The synthesis found a degenerate but technically valid witness for sometimes (o1 = i1 & i2):
- Guard constants
(0, 0)→ formula "holds" when inputs are both zero 0 & 0 = 0→ output is zero, indistinguishable from o1 not being computed
For negation, the same minimal-constant choice (0) produces F' = T — visible and non-trivial.
The synthesized program for sometimes (o1 = i1 & i2) always outputs 0 because:
- When inputs are
(0, 0): guard fires, AND gives0 - When inputs are anything else: guard doesn't fire,
o1 = 0
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This question was originally posted by LEARN TAU:
At step 0, r <> o1[t] = i1[t]’ performs negation once then o1=0 all the time but r <>o1[t] = i1[t] & i2[t] doesn’t perform "&" operator at step 0. Why? Thank you for your guidance!
All reactions