There is currently no way to remove values from a domain of a state-fluent. E.g., if we have a state fluent s with domain {0,1,2,3}, but only {0,2} can be reached, we have to keep all because we cannot replace all occurrences of s == 2 with s == 1 (the new domain would be {0,1}, so "2" would be mapped to "1").
This is non-trivial because, to support this, we'd also have to replace every occurrence of expression of the form s1 == s2 for two state fluents with ((s1 == 0) and (s2 == 0)) or ((s1 == 1) and s2 == 1)) or ... because there is no longer the guarantee that both state fluents have the same value if we allow that some values are removed.
There is currently no way to remove values from a domain of a state-fluent. E.g., if we have a state fluent s with domain {0,1,2,3}, but only {0,2} can be reached, we have to keep all because we cannot replace all occurrences of s == 2 with s == 1 (the new domain would be {0,1}, so "2" would be mapped to "1").
This is non-trivial because, to support this, we'd also have to replace every occurrence of expression of the form s1 == s2 for two state fluents with ((s1 == 0) and (s2 == 0)) or ((s1 == 1) and s2 == 1)) or ... because there is no longer the guarantee that both state fluents have the same value if we allow that some values are removed.