Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/IntervalArithmeticGrammar.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/IntervalArithmeticGrammar.cs	(revision 17628)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/IntervalArithmeticGrammar.cs	(revision 17628)
@@ -0,0 +1,125 @@
+﻿using System.Collections.Generic;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableType("5A2300A0-D0FC-4F2D-B910-F86384FE9052")]
+  [Item("IntervalArithmeticGrammar", "Represents a grammar for interval arithmetic")]
+  public class IntervalArithmeticGrammar : DataAnalysisGrammar, ISymbolicDataAnalysisGrammar {
+    public IntervalArithmeticGrammar() : base(ItemAttribute.GetName(typeof(IntervalArithmeticGrammar)),
+      ItemAttribute.GetDescription(typeof(IntervalArithmeticGrammar))) {
+      Initialize();
+    }
+
+    [StorableConstructor]
+    public IntervalArithmeticGrammar(StorableConstructorFlag _) : base(_) { }
+
+    public IntervalArithmeticGrammar(DataAnalysisGrammar original, Cloner cloner) : base(original, cloner) { }
+    public IntervalArithmeticGrammar(string name, string description) : base(name, description) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IntervalArithmeticGrammar(this, cloner);
+    }
+
+    private void Initialize() {
+      #region Symbols
+
+      var add      = new Addition();
+      var sub      = new Subtraction();
+      var mul      = new Multiplication();
+      var div      = new Division();
+      var sin      = new Sine();
+      var cos      = new Cosine();
+      var tan      = new Tangent();
+      var log      = new Logarithm();
+      var pow      = new Power();
+      var square   = new Square();
+      var root     = new Root();
+      var sqrt     = new SquareRoot();
+      var cube     = new Cube();
+      var cubeRoot = new CubeRoot();
+      var exp      = new Exponential();
+      var tanh     = new HyperbolicTangent();
+      var constant = new Constant();
+      constant.MinValue = -20;
+      constant.MaxValue = 20;
+      var variableSymbol = new Variable();
+
+      #endregion
+
+      //Special symbols
+      var offset  = new Addition {Name       = "Offset"};
+      var scaling = new Multiplication {Name = "Scaling"};
+      //all other symbols
+      var allSymbols = new List<Symbol> {
+        add, sub, mul, div, constant, variableSymbol, sin, cos, tan, log, pow, square, root, sqrt, cube, cubeRoot, exp,
+        tanh
+      };
+
+      var arithmeticSymbols                = new List<Symbol> {add, sub, mul, div};
+      var trigonometricSymbols             = new List<Symbol> {sin, cos, tan, tanh};
+      var exponentialAndLogarithmicSymbols = new List<Symbol> {exp, log};
+      var powerSymbols                     = new List<Symbol> {square, pow, sqrt, root, cube, cubeRoot};
+      var realValueSymbols = new List<Symbol>
+        {add, sub, mul, div, sin, cos, tan, tanh, exp, log, variableSymbol, constant};
+
+
+      //Add special symbols
+      AddSymbol(offset);
+      AddSymbol(scaling);
+      //Add all other symbols
+      foreach (var symb in allSymbols) AddSymbol(symb);
+
+      #region define subtree count for special symbols
+
+      foreach (var symb in arithmeticSymbols) SetSubtreeCount(symb, 2, 2);
+
+      foreach (var symb in trigonometricSymbols) SetSubtreeCount(symb, 1, 1);
+
+      foreach (var symb in exponentialAndLogarithmicSymbols) SetSubtreeCount(symb, 1, 1);
+
+      SetSubtreeCount(offset, 2, 2);
+      SetSubtreeCount(scaling, 2, 2);
+      SetSubtreeCount(pow, 2, 2);
+      SetSubtreeCount(root, 2, 2);
+      SetSubtreeCount(square, 1, 1);
+      SetSubtreeCount(cube, 1, 1);
+      SetSubtreeCount(sqrt, 1, 1);
+      SetSubtreeCount(cubeRoot, 1, 1);
+
+      #endregion
+
+      #region child symbols config
+
+      AddAllowedChildSymbol(StartSymbol, offset);
+
+      //Define childs for offset
+      AddAllowedChildSymbol(offset, scaling, 0);
+      AddAllowedChildSymbol(offset, constant, 1);
+
+      //Define childs for scaling
+      foreach (var symb in allSymbols) AddAllowedChildSymbol(scaling, symb, 0);
+      AddAllowedChildSymbol(scaling, constant, 1);
+
+      //Define childs for realvalue symbols
+      foreach (var symb in realValueSymbols) {
+        foreach (var c in realValueSymbols) AddAllowedChildSymbol(symb, c);
+      }
+
+      //define childs for power symbols
+      foreach (var symb in powerSymbols) {
+        AddAllowedChildSymbol(symb, variableSymbol, 0);
+        AddAllowedChildSymbol(symb, constant, 1);
+      }
+
+      //define child for sqrt and square
+      foreach (var c in realValueSymbols) {
+        AddAllowedChildSymbol(square, c, 0);
+        AddAllowedChildSymbol(sqrt, c, 0);
+      }
+      #endregion
+    }
+  }
+}
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17607)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17628)
@@ -224,4 +224,5 @@
     <Compile Include="Formatters\SymbolicDataAnalysisExpressionCSharpFormatter.cs" />
     <Compile Include="Grammars\DataAnalysisGrammar.cs" />
+    <Compile Include="Grammars\IntervalArithmeticGrammar.cs" />
     <Compile Include="Hashing\HashExtensions.cs" />
     <Compile Include="Hashing\HashUtil.cs" />
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs	(revision 17607)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs	(revision 17628)
@@ -37,11 +37,9 @@
     private const string EvaluatedSolutionsParameterName = "EvaluatedSolutions";
 
-    public IFixedValueParameter<IntValue> EvaluatedSolutionsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[EvaluatedSolutionsParameterName]; }
-    }
+    public IFixedValueParameter<IntValue> EvaluatedSolutionsParameter => (IFixedValueParameter<IntValue>)Parameters[EvaluatedSolutionsParameterName];
 
     public int EvaluatedSolutions {
-      get { return EvaluatedSolutionsParameter.Value.Value; }
-      set { EvaluatedSolutionsParameter.Value.Value = value; }
+      get => EvaluatedSolutionsParameter.Value.Value;
+      set => EvaluatedSolutionsParameter.Value.Value = value;
     }
 
@@ -89,8 +87,5 @@
 
       // because of numerical errors the bounds might be incorrect
-      if (outputInterval.LowerBound <= outputInterval.UpperBound)
-        return outputInterval;
-      else
-        return new Interval(outputInterval.UpperBound, outputInterval.LowerBound);
+      return outputInterval.LowerBound <= outputInterval.UpperBound ? outputInterval : new Interval(outputInterval.UpperBound, outputInterval.LowerBound);
     }
 
@@ -279,5 +274,5 @@
 
     public static bool IsCompatible(ISymbolicExpressionTree tree) {
-      var containsUnknownSyumbol = (
+      var containsUnknownSymbols = (
         from n in tree.Root.GetSubtree(0).IterateNodesPrefix()
         where
@@ -301,5 +296,5 @@
           !(n.Symbol is AnalyticQuotient)
         select n).Any();
-      return !containsUnknownSyumbol;
+      return !containsUnknownSymbols;
     }
   }
