diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-07-07 19:05:07 +0000 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-07-07 19:05:07 +0000 |
commit | 9af0bbf79a231c01a03a0d5e0c77b1f743642069 (patch) | |
tree | 1a0c416214e27296700e4bacd31d53edadccd9ba | |
parent | /* QA checks/verification */ choice of algo (diff) | |
download | glep-9af0bbf79a231c01a03a0d5e0c77b1f743642069.tar.gz glep-9af0bbf79a231c01a03a0d5e0c77b1f743642069.tar.bz2 glep-9af0bbf79a231c01a03a0d5e0c77b1f743642069.zip |
/* QA checks to verify REQUIRED_USE solutions */ mention the indirect implication problem
-rw-r--r-- | GLEP:73.mw | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -268,6 +268,18 @@ In order to determine the final set of flags ''F<sub>n</sub>'', with specific se * For every flat constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' in the set: ** If the condition ''C<sub>i</sub>'' always evaluates to true, update ''F'' with ''E<sub>i</sub>'' (''F<sub>i+1</sub> = F<sub>i</sub> ∪ {E<sub>i</sub>} ∖ {¬E<sub>i</sub>}''). +====Limitations of the algorithm==== + +The presented check algorithm has a limitation which could result in false positives. However, the testing against all real Gentoo uses of REQUIRED_USE has shown that none of those occur at the moment of writing this GLEP, and that is quite unlikely for them to become a major issue in the future. + +The algorithm is unable to infer indirect implications of the constraints. For example, given the following constraint: + + || ( a b c ) a? ( !d ) b? ( !d ) c? ( !d ) d? ( e ) + +The algorithm is unable to correctly infer that due to the first constraint, ''d'' will never be true. As a result, it will e.g. report an immutability error on <code>d? ( e )</code> if ''e'' is masked even though this condition could never evaluate to true. + +However, it is considered that a natural occurrence of such a constraint is quite unlikely, and usually indicates a problem with the constraint anyway. Therefore, reporting a false positive here could serve as an indication of another problem. + ==Rationale== ===Restrictions for allowed REQUIRED_USE syntax=== |