Index: trunk/sources/HeuristicLab.Functions/Addition.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Addition.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Addition.cs	(revision 434)
@@ -44,4 +44,7 @@
       // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/And.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/And.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/And.cs	(revision 434)
@@ -40,4 +40,7 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Average.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Average.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Average.cs	(revision 434)
@@ -38,4 +38,7 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Cosinus.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Cosinus.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Cosinus.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly one subfunction
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Division.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Division.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Division.cs	(revision 434)
@@ -50,4 +50,7 @@
       // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Equal.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Equal.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Equal.cs	(revision 434)
@@ -38,4 +38,6 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Exponential.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Exponential.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Exponential.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly one sub-operator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/GreaterThan.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/GreaterThan.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/GreaterThan.cs	(revision 434)
@@ -38,4 +38,6 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
     }
     public override void Accept(IFunctionVisitor visitor) {
Index: trunk/sources/HeuristicLab.Functions/IfThenElse.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/IfThenElse.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/IfThenElse.cs	(revision 434)
@@ -39,4 +39,7 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(3, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/LessThan.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/LessThan.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/LessThan.cs	(revision 434)
@@ -38,4 +38,6 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Logarithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Logarithm.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Logarithm.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly 1 suboperator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Multiplication.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Multiplication.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Multiplication.cs	(revision 434)
@@ -44,4 +44,7 @@
       // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Not.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Not.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Not.cs	(revision 434)
@@ -38,4 +38,5 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Or.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Or.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Or.cs	(revision 434)
@@ -39,4 +39,7 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Power.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Power.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Power.cs	(revision 434)
@@ -38,4 +38,6 @@
       // must have exactly 2 suboperators base ^ exponent
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Signum.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Signum.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Signum.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly 1 suboperator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Sinus.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Sinus.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Sinus.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly 1 suboperator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Sqrt.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Sqrt.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Sqrt.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly 1 suboperator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Subtraction.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Subtraction.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Subtraction.cs	(revision 434)
@@ -44,4 +44,7 @@
       // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Tangens.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Tangens.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Tangens.cs	(revision 434)
@@ -38,4 +38,5 @@
       // must have exactly one suboperator
       AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
     }
 
Index: trunk/sources/HeuristicLab.Functions/Xor.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/Xor.cs	(revision 429)
+++ trunk/sources/HeuristicLab.Functions/Xor.cs	(revision 434)
@@ -38,4 +38,6 @@
       : base() {
       AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
     }
 
