JuliaSymbolics / Metatheory.jl

Makes Julia reason with equations. General purpose metaprogramming, symbolic computation and algebraic equational reasoning library for the Julia programming language: E-Graphs & equality saturation, term rewriting and more.
https://juliasymbolics.github.io/Metatheory.jl/dev/
MIT License
355 stars 46 forks source link

Matching on fully qualified function call in 3.0 #209

Open HectorPeeters opened 3 months ago

HectorPeeters commented 3 months ago

When creating a rule with a fully qualified function call in the ale/3.0 branch, Metatheory fails to compile the pattern.

A rule defined like so:

@rule Main.identity(~a) --> ~a

Results in the following error:

ERROR: LoadError: MethodError: no method matching match_term_op(::PatExpr, ::Symbol, ::PatExpr)
The function `match_term_op` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  match_term_op(::AbstractPat, ::Any, ::PatVar)
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:208
  match_term_op(::Any, ::Any, ::Union{Expr, Symbol})
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:205
  match_term_op(::Any, ::Any, ::Union{DataType, Function})
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:200

Stacktrace:
 [1] match_term_expr(pattern::PatExpr, coordinate::Vector{Int64}, segments_so_far::Vector{Symbol})
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:217
 [2] match_compile!(pattern::PatExpr, state::Metatheory.MatchCompilerState, coordinate::Vector{Int64}, parent_segments::Vector{Symbol})
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:137
 [3] match_compile(p::PatExpr, pvars::Vector{Symbol})
   @ Metatheory ~/.julia/packages/Metatheory/Wu6kK/src/match_compiler.jl:34
0x0f0f0f commented 3 months ago

Added support for it in #185 - the function must be defined though