-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Description
HerbCore defines equivalence of anything <: AbstractRuleNode as follows:
➜ HerbCore git:(master) grep -rnw '.' -e 'Base'
...
./src/rulenode.jl:155:Base.:(==)(::RuleNode, ::AbstractHole) = false
./src/rulenode.jl:156:Base.:(==)(::AbstractHole, ::RuleNode) = false
./src/rulenode.jl:157:function Base.:(==)(A::RuleNode, B::RuleNode)
./src/rulenode.jl:163:Base.:(==)(A::AbstractHole, B::AbstractHole) = false
...Source
Lines 209 to 217 in 7bc381b
| Base.:(==)(::RuleNode, ::AbstractHole) = false | |
| Base.:(==)(::AbstractHole, ::RuleNode) = false | |
| function Base.:(==)(A::RuleNode, B::RuleNode) | |
| (A.ind == B.ind) && | |
| length(A.children) == length(B.children) && #required because zip doesn't check lengths | |
| all(isequal(a, b) for (a, b) in zip(A.children, B.children)) | |
| end | |
| # We do not know how the holes will be expanded yet, so we cannot assume equality even if the domains are equal. | |
| Base.:(==)(A::AbstractHole, B::AbstractHole) = false |
Specifically, Holes are never equal.
This is overwritten in HerbConstraints for StateHole with proper definitions)
./src/solver/uniform_solver/state_hole.jl:88:function Base.:(==)(A::StateHole, B::StateHole)
./src/solver/uniform_solver/state_hole.jl:95:function Base.:(==)(A::RuleNode, B::StateHole)
./src/solver/uniform_solver/state_hole.jl:102:function Base.:(==)(A::StateHole, B::RuleNode)Source
function Base.:(==)(A::StateHole, B::StateHole)
isfilled(A) && isfilled(B) &&
(get_rule(A) == get_rule(B)) &&
(length(A.children) == length(B.children)) &&
all(isequal(a, b) for (a, b) in zip(A.children, B.children))
end
function Base.:(==)(A::RuleNode, B::StateHole)
isfilled(B) &&
(get_rule(A) == get_rule(B)) &&
(length(A.children) == length(B.children)) &&
all(isequal(a, b) for (a, b) in zip(A.children, B.children))
end
function Base.:(==)(A::StateHole, B::RuleNode)
isfilled(A) &&
(get_rule(A) == get_rule(B)) &&
(length(A.children) == length(B.children)) &&
all(isequal(a, b) for (a, b) in zip(A.children, B.children))
endReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels