diff --git a/core/src/main/java/it/cavallium/warppi/math/rules/dsl/VisitorPattern.java b/core/src/main/java/it/cavallium/warppi/math/rules/dsl/VisitorPattern.java
new file mode 100644
index 00000000..f698799d
--- /dev/null
+++ b/core/src/main/java/it/cavallium/warppi/math/rules/dsl/VisitorPattern.java
@@ -0,0 +1,184 @@
+package it.cavallium.warppi.math.rules.dsl;
+
+import it.cavallium.warppi.math.Function;
+import it.cavallium.warppi.math.FunctionVisitor;
+import it.cavallium.warppi.math.functions.*;
+import it.cavallium.warppi.math.functions.Number;
+import it.cavallium.warppi.math.functions.equations.Equation;
+import it.cavallium.warppi.math.functions.equations.EquationsSystem;
+import it.cavallium.warppi.math.functions.equations.EquationsSystemPart;
+import it.cavallium.warppi.math.functions.trigonometry.*;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A Pattern
which implements match
as a visitor.
+ */
+public abstract class VisitorPattern implements Pattern, FunctionVisitor>> {
+ @Override
+ public Optional