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
|
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
https://github.com/Herb-AI/HerbConstraints.jl/blob/26275e2a8bf99168ac45ab6a63644b4c62dca0fc/src/solver/uniform_solver/state_hole.jl#L88-L107
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))
end
HerbCoredefines equivalence of anything<: AbstractRuleNodeas follows:Source
HerbCore.jl/src/rulenode.jl
Lines 209 to 217 in 7bc381b
Specifically,
Holes are never equal.This is overwritten in
HerbConstraintsforStateHolewith proper definitions)Source
https://github.com/Herb-AI/HerbConstraints.jl/blob/26275e2a8bf99168ac45ab6a63644b4c62dca0fc/src/solver/uniform_solver/state_hole.jl#L88-L107