blob: 443f744f6a2e86ac1fddab0aa40b945a7f66c54e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/*
* SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
*
* SPDX-License-Identifier: EPL-2.0
*/
package tools.refinery.logic.term.truthvalue;
import tools.refinery.logic.AbstractDomain;
import java.util.Optional;
// Singleton pattern, because there is only one domain for truth values.
@SuppressWarnings("squid:S6548")
public final class TruthValueDomain implements AbstractDomain<TruthValue, Boolean> {
public static final TruthValueDomain INSTANCE = new TruthValueDomain();
private TruthValueDomain() {
}
@Override
public Class<TruthValue> abstractType() {
return TruthValue.class;
}
@Override
public Class<Boolean> concreteType() {
return Boolean.class;
}
@Override
public TruthValue toAbstract(Boolean concreteValue) {
return TruthValue.toTruthValue(concreteValue);
}
@Override
public Optional<Boolean> toConcrete(TruthValue abstractValue) {
return switch (abstractValue) {
case TRUE -> Optional.of(true);
case FALSE -> Optional.of(false);
default -> Optional.empty();
};
}
@Override
public boolean isConcrete(TruthValue abstractValue) {
return abstractValue.isConcrete();
}
@Override
public TruthValue commonRefinement(TruthValue leftValue, TruthValue rightValue) {
return leftValue.merge(rightValue);
}
@Override
public TruthValue commonAncestor(TruthValue leftValue, TruthValue rightValue) {
return leftValue.join(rightValue);
}
@Override
public TruthValue unknown() {
return TruthValue.UNKNOWN;
}
@Override
public boolean isError(TruthValue abstractValue) {
return !abstractValue.isConsistent();
}
}
|