From 08fe984206f62203d3b37d4b2f83dfd8f3b9a063 Mon Sep 17 00:00:00 2001
From: Edward Sabinus <edward.sabinus@informatik.uni-halle.de>
Date: Wed, 24 Apr 2024 16:17:22 +0200
Subject: [PATCH] Added for each error a class

---
 .../Ausgabeverwaltung/Ausgabeverwalter.cs     |  2 +-
 .../BewerterStrukturellerInduktion.csproj     |  5 ++
 .../Eingabeverwaltung/Metamodell/Error.cs     | 24 +++++----
 .../Testverwaltung/InductionTest.cs           | 51 ++++++++++---------
 .../Testverwaltung/TransformationTest.cs      | 36 ++++++++-----
 .../CheckFixedVarsNotSubstituted.cs           |  3 +-
 .../CheckInduction/CheckIndCaseType.cs        |  3 +-
 .../CheckInduction/CheckIndCaseTypeIsValid.cs |  3 +-
 .../CheckIndCasesAllExisting.cs               |  3 +-
 .../CheckInduction/CheckIndHypCanBeUseful.cs  |  3 +-
 .../CheckInduction/CheckIndHypNotUsedInIA.cs  |  3 +-
 .../CheckInduction/CheckIndHypsUnique.cs      |  3 +-
 .../CheckInduction/CheckIndPartEquation.cs    |  7 +--
 .../CheckIndPartEquationFixedVars.cs          |  2 +-
 .../CheckIndPartEquationIsFixed.cs            |  3 +-
 .../CheckIndPartEquationIsNotFixed.cs         |  3 +-
 .../CheckInduction/CheckIndTask_Satisfied.cs  |  5 +-
 .../CheckIndVarHasConstructors.cs             |  3 +-
 .../CheckInduction/CheckIndVarNotFixed.cs     |  3 +-
 .../Ueberpruefung/CheckLemmaEqualsTask.cs     |  5 +-
 .../Ueberpruefung/CheckLemmaIsAcyclic.cs      |  3 +-
 .../Ueberpruefung/CheckLemmaTaskIsUsed.cs     |  3 +-
 .../CheckResultTree_for_RuleEndTree.cs        |  3 +-
 .../CheckResultTree_for_RuleStartTree.cs      |  3 +-
 ...CheckSubstitutionVariable_DefinedIn_ADT.cs |  3 +-
 .../CheckSubstitutionVariable_isUsedInRule.cs |  3 +-
 .../CheckSubstitution_NoSortChange.cs         |  3 +-
 .../CheckSubstitution_for_RuleEndTree.cs      |  5 +-
 .../CheckSubstitution_for_RuleStartTree.cs    |  5 +-
 .../CheckTask_Satisfied.cs                    |  5 +-
 .../CheckTermPart_isSubTreeFrom_StartTree.cs  |  3 +-
 .../CheckTransformationStep_NoSortChange.cs   |  3 +-
 .../CheckUsedLemmaIsProved.cs                 |  3 +-
 .../Errors/InductionErrors/Error30.cs         | 10 ++++
 .../Errors/InductionErrors/Error31.cs         | 10 ++++
 .../Errors/InductionErrors/Error32.cs         | 10 ++++
 .../Errors/InductionErrors/Error33.cs         | 10 ++++
 .../Errors/InductionErrors/Error34.cs         | 10 ++++
 .../Errors/InductionErrors/Error35.cs         | 10 ++++
 .../Errors/InductionErrors/Error36.cs         | 10 ++++
 .../Errors/InductionErrors/Error37.cs         | 10 ++++
 .../Errors/InductionErrors/Error38.cs         | 10 ++++
 .../Errors/InductionErrors/Error39.cs         | 10 ++++
 .../Errors/InductionErrors/Error40.cs         | 10 ++++
 .../Errors/InductionErrors/Error41.cs         | 10 ++++
 .../Errors/InductionErrors/Error42.cs         | 10 ++++
 .../Errors/InductionErrors/Error43.cs         | 10 ++++
 .../Errors/LemmaErrors/Error20.cs             | 10 ++++
 .../Errors/LemmaErrors/Error21.cs             | 10 ++++
 .../Errors/LemmaErrors/Error22.cs             | 10 ++++
 .../Errors/LemmaErrors/Error23.cs             | 10 ++++
 .../Errors/TransformationErrors/Error01.cs    | 10 ++++
 .../Errors/TransformationErrors/Error02.cs    | 10 ++++
 .../Errors/TransformationErrors/Error03.cs    | 10 ++++
 .../Errors/TransformationErrors/Error04.cs    | 10 ++++
 .../Errors/TransformationErrors/Error05.cs    | 10 ++++
 .../Errors/TransformationErrors/Error06.cs    | 10 ++++
 .../Errors/TransformationErrors/Error07.cs    | 10 ++++
 .../Errors/TransformationErrors/Error08.cs    | 10 ++++
 .../Errors/TransformationErrors/Error09.cs    | 10 ++++
 .../Errors/TransformationErrors/Error10.cs    | 10 ++++
 .../Errors/TransformationErrors/Error11.cs    | 10 ++++
 .../Errors/TransformationErrors/Error12.cs    | 10 ++++
 .../Errors/TransformationErrors/Error13.cs    | 10 ++++
 .../Ueberpruefung/Ueberpruefer.cs             |  7 +--
 BewerterStrukturellerInduktion/Util.cs        |  2 +-
 66 files changed, 446 insertions(+), 88 deletions(-)
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error30.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error31.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error32.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error33.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error34.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error35.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error36.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error37.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error38.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error39.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error40.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error41.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error42.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error43.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error20.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error21.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error22.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error23.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error01.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error02.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error03.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error04.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error05.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error06.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error07.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error08.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error09.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error10.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error11.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error12.cs
 create mode 100644 BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error13.cs

diff --git a/BewerterStrukturellerInduktion/Ausgabeverwaltung/Ausgabeverwalter.cs b/BewerterStrukturellerInduktion/Ausgabeverwaltung/Ausgabeverwalter.cs
index 3cfd15e..ea84073 100644
--- a/BewerterStrukturellerInduktion/Ausgabeverwaltung/Ausgabeverwalter.cs
+++ b/BewerterStrukturellerInduktion/Ausgabeverwaltung/Ausgabeverwalter.cs
@@ -168,7 +168,7 @@ namespace Ausgabeverwaltung
             }
             str += ":\r\n";
             foreach (Error err in errors)
-                str += "    " + err.errorCode + " " + err.Output + "\r\n";
+                str += "    " + err.errorCode + " " + err.Hint + "\r\n";
             return str;
         }
     }
diff --git a/BewerterStrukturellerInduktion/BewerterStrukturellerInduktion.csproj b/BewerterStrukturellerInduktion/BewerterStrukturellerInduktion.csproj
index 7ccb666..4e13e8a 100644
--- a/BewerterStrukturellerInduktion/BewerterStrukturellerInduktion.csproj
+++ b/BewerterStrukturellerInduktion/BewerterStrukturellerInduktion.csproj
@@ -11,4 +11,9 @@
     <PackageReference Include="Antlr4.Runtime.Standard" Version="4.8.0" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Ueberpruefung\Errors\LemmaErrors\" />
+    <Folder Include="Ueberpruefung\Errors\InductionErrors\" />
+  </ItemGroup>
+
 </Project>
diff --git a/BewerterStrukturellerInduktion/Eingabeverwaltung/Metamodell/Error.cs b/BewerterStrukturellerInduktion/Eingabeverwaltung/Metamodell/Error.cs
index a4a5647..d3766d7 100644
--- a/BewerterStrukturellerInduktion/Eingabeverwaltung/Metamodell/Error.cs
+++ b/BewerterStrukturellerInduktion/Eingabeverwaltung/Metamodell/Error.cs
@@ -2,33 +2,39 @@
 
 namespace Eingabeverwaltung.Metamodell
 {
-    public class Error
+    public abstract class Error
     {
         public readonly int errorCode;
-        private string output;
+        private string hint;
 
         public Error(int errorCode)
         {
             this.errorCode = errorCode;
-            output = null;
+            hint = null;
         }
-        public Error(int errorCode, string output)
+        public Error(int errorCode, string hint)
         {
             this.errorCode = errorCode;
-            this.output = output;
+            this.hint = hint;
         }
 
-        public string Output
+        public string Hint
         {
             get
             {
-                return output;
+                return hint;
             }
             set
             {
-                if (output == null) output = value;
-                else throw new Exception("ERROR: It was tried to change Error.output while it was set!");
+                if (hint == null) hint = value;
+                else throw new Exception("ERROR: It was tried to change Error.hint while it was set!");
             }
         }
+
+        /// <summary>
+        /// Description returns the description of the error.
+        /// </summary>
+        /// <returns></returns>
+        public abstract string Description();
     }
 }
diff --git a/BewerterStrukturellerInduktion/Testverwaltung/InductionTest.cs b/BewerterStrukturellerInduktion/Testverwaltung/InductionTest.cs
index b7684bd..67c52ed 100644
--- a/BewerterStrukturellerInduktion/Testverwaltung/InductionTest.cs
+++ b/BewerterStrukturellerInduktion/Testverwaltung/InductionTest.cs
@@ -3,6 +3,7 @@ using System;
 using System.Collections.Generic;
 using System.Collections.Immutable;
 using Ueberpruefung;
+using Ueberpruefung.Errors;
 
 namespace Testverwaltung
 {
@@ -34,42 +35,42 @@ namespace Testverwaltung
             string L1 = "Lemma L1 geht ein in Teilaufgaben: L1 \r\n";
             string Lo = "Lemma L1 ohne Bewertung \r\n";
             string hb = "Hauptbeweis\r\n";
-            string m32(string c) => aus.ErrorMessage(new List<Error>() { new Error(32, c+" ") }, true, "", false, -1, -1);
+            string m32(string c) => aus.ErrorMessage(new List<Error>() { new Error32(c+" ") }, true, "", false, -1, -1);
             foreach (string testID in testIDs)
             {
                 string str;
                 switch (testID)
                 {
-                    case "1,2"   : str = L1 + aus.ErrorMessage(new List<Error>() { new Error(1), new Error(2) }, true, "Fall null", true, -1, -1);  break;                        
-                    case "30,37" : str = hb + aus.ErrorMessage(new List<Error>() { new Error(21), new Error(37,"y ") }, true, "Fall null", true, 1, -1)
-                                       + Lo + aus.ErrorMessage(new List<Error>() { new Error(22) }, false, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(30) },true,"", false, -1, -1); ; break;
-                    case "31,38" : str = L1 + aus.ErrorMessage(new List<Error>() { new Error(38), new Error(31) }, true, "", false, -1, -1); break;
+                    case "1,2"   : str = L1 + aus.ErrorMessage(new List<Error>() { new Error01(), new Error02() }, true, "Fall null", true, -1, -1);  break;                        
+                    case "30,37" : str = hb + aus.ErrorMessage(new List<Error>() { new Error21(), new Error37("y ") }, true, "Fall null", true, 1, -1)
+                                       + Lo + aus.ErrorMessage(new List<Error>() { new Error22() }, false, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error30() },true,"", false, -1, -1); ; break;
+                    case "31,38" : str = L1 + aus.ErrorMessage(new List<Error>() { new Error38(), new Error31() }, true, "", false, -1, -1); break;
                     case "32,40,43" 
                                  : str = hb + m32("inc")
-                                            + aus.ErrorMessage(new List<Error>() { new Error(40, "m "), new Error(43) }, true, "IH", false, -1, -1)
-                                       + L1 + aus.ErrorMessage(new List<Error>() { new Error(8) },true,"Fall null", true, 1, -1); break;
+                                            + aus.ErrorMessage(new List<Error>() { new Error40("m "), new Error43() }, true, "IH", false, -1, -1)
+                                       + L1 + aus.ErrorMessage(new List<Error>() { new Error08() },true,"Fall null", true, 1, -1); break;
                     case "33d,41,43"
                                  : str = hb + m32("inc")
-                                            + aus.ErrorMessage(new List<Error>() { new Error(43) }, true, "IH", false, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(41), new Error(33) }, true, "Fall null", false, -1, -1); break;
+                                            + aus.ErrorMessage(new List<Error>() { new Error43() }, true, "IH", false, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error41(), new Error33() }, true, "Fall null", false, -1, -1); break;
                     case "33u"   : str = L1 + m32("null")
-                                            + aus.ErrorMessage(new List<Error>() { new Error(33) }, true, "Fall plus( null,plus( null,null ) ) = plus( null,null )", false, -1, -1); break;
+                                            + aus.ErrorMessage(new List<Error>() { new Error33() }, true, "Fall plus( null,plus( null,null ) ) = plus( null,null )", false, -1, -1); break;
                     case "34c"   : str = hb + m32("null")
-                                            + aus.ErrorMessage(new List<Error>() { new Error(34), new Error(33) }, true, "Fall plus( null,null ) = null", false, -1, -1); break;
+                                            + aus.ErrorMessage(new List<Error>() { new Error34(), new Error33() }, true, "Fall plus( null,null ) = null", false, -1, -1); break;
                     case "34cIS,43" 
-                                 : str = hb + aus.ErrorMessage(new List<Error>() { new Error(43)}, true, "IH", false, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(34, ": fixed Y-0 : Nat : forall m : Nat : plus( inc( Y-0 ),m ) = plus( m,inc( Y-0 ) )") }, true, "Fall inc", false, -1, -1); break;
-                    case "34h"   : str = hb + aus.ErrorMessage(new List<Error>() { new Error(34, ": fixed k : Nat : forall m : Nat : plus( k,m ) = plus( m,k )") }, true, "IH", false, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(9, "[ plus( m,k ) / y ]") }, true, "Fall inc", true, 2, -1); break;
-                    case "35"    : str = hb + aus.ErrorMessage(new List<Error>() { new Error(35, "k ") }, true, "IH", false, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(35, "k ") }, true, "Fall inc", false, -1, -1); break;
-                    case "36"    : str = hb + aus.ErrorMessage(new List<Error>() { new Error(36), new Error(37,"k ") }, true, "Fall null", true, 1, -1); break;
-                    case "39"    : str = L1 + aus.ErrorMessage(new List<Error>() { new Error(39) }, true, -1, -1)
-                                            + aus.ErrorMessage(new List<Error>() { new Error(21, "{ L1 }") }, true, 1, -1); break;
+                                 : str = hb + aus.ErrorMessage(new List<Error>() { new Error43()}, true, "IH", false, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error34(": fixed Y-0 : Nat : forall m : Nat : plus( inc( Y-0 ),m ) = plus( m,inc( Y-0 ) )") }, true, "Fall inc", false, -1, -1); break;
+                    case "34h"   : str = hb + aus.ErrorMessage(new List<Error>() { new Error34(": fixed k : Nat : forall m : Nat : plus( k,m ) = plus( m,k )") }, true, "IH", false, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error09("[ plus( m,k ) / y ]") }, true, "Fall inc", true, 2, -1); break;
+                    case "35"    : str = hb + aus.ErrorMessage(new List<Error>() { new Error35("k ") }, true, "IH", false, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error35("k ") }, true, "Fall inc", false, -1, -1); break;
+                    case "36"    : str = hb + aus.ErrorMessage(new List<Error>() { new Error36(), new Error37("k ") }, true, "Fall null", true, 1, -1); break;
+                    case "39"    : str = L1 + aus.ErrorMessage(new List<Error>() { new Error39() }, true, -1, -1)
+                                            + aus.ErrorMessage(new List<Error>() { new Error21("{ L1 }") }, true, 1, -1); break;
                     default: 
                         Console.WriteLine("Found an unexpected testID " + testID+". This test may not be tested correctly.");
-                        str = aus.NoErrors(); ; break;
+                        str = aus.NoErrors(); break;
                 }
                 shouldValues.Add(str);
             }
@@ -87,9 +88,9 @@ namespace Testverwaltung
                 switch (testID)
                 {
                     case "22": str = "Lemma Komm ohne Bewertung \r\n" 
-                                   + aus.ErrorMessage(new List<Error>() { new Error(22) }, false, "", false, -1, -1); break;
-                    case "42": str = hb + aus.ErrorMessage(new List<Error>() { new Error(42) }, true, "IH", false, -1, -1); break;
-                    case "43": str = hb + aus.ErrorMessage(new List<Error>() { new Error(43) }, true, "IH3", false, -1, -1); break;
+                                   + aus.ErrorMessage(new List<Error>() { new Error22() }, false, "", false, -1, -1); break;
+                    case "42": str = hb + aus.ErrorMessage(new List<Error>() { new Error42() }, true, "IH", false, -1, -1); break;
+                    case "43": str = hb + aus.ErrorMessage(new List<Error>() { new Error43() }, true, "IH3", false, -1, -1); break;
                     default:
                         Console.WriteLine("Found an unexpected testID " + testID + ". This test may not be tested correctly.");
                         str = aus.NoErrors(); ; break;
diff --git a/BewerterStrukturellerInduktion/Testverwaltung/TransformationTest.cs b/BewerterStrukturellerInduktion/Testverwaltung/TransformationTest.cs
index a17c8ef..2d054b1 100644
--- a/BewerterStrukturellerInduktion/Testverwaltung/TransformationTest.cs
+++ b/BewerterStrukturellerInduktion/Testverwaltung/TransformationTest.cs
@@ -1,6 +1,8 @@
 using Ueberpruefung;
 using System.Collections.Generic;
 using Eingabeverwaltung.Metamodell;
+using Ueberpruefung.Errors;
+using System;
 
 namespace Testverwaltung
 {
@@ -14,22 +16,28 @@ namespace Testverwaltung
 			shouldValues = new List<string>();
 			string err = "";
 			string errO = "[ inc( n ) / n ]";
-			for (int ts = -1, sub = -1, error = 1; error < numTests; error++)
+			for (int ts = -1, sub = -1, testID = 1; testID < numTests -1; testID++)
 			{
-                switch (error)
+                switch (testID)
                 {
-					case 3:  err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 1 , 2  ); ts = 1; break;
-					case 4:  err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 1 , 1  );         break;
-					case 5:  err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 1 , sub)+
-								   aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 2 , sub);         break;
-					case 6:  err = aus.ErrorMessage(new List<Error>() { new Error(6),new Error(7)          }, 2 , sub);         break;
-					case 8:  err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 2 , sub);         break;
-					case 9:  err = aus.ErrorMessage(new List<Error>() {              new Error(error,errO) }, ts, sub);         break;
-					case 10: err = aus.ErrorMessage(new List<Error>() { new Error(8),new Error(error,errO) }, ts, sub);         break;
-					case 12: err = aus.ErrorMessage(new List<Error>() { new Error(8),new Error(error)      }, ts, sub);         break;
-					case 13: err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, 1 , 2  );         break;
-					default: err = aus.ErrorMessage(new List<Error>() { new Error(error)                   }, ts, sub);         break;
-				}
+					case 1:  err = aus.ErrorMessage(new List<Error>() { new Error01()                   }, ts, sub);         break;
+                    case 2:  err = aus.ErrorMessage(new List<Error>() { new Error02()                   }, ts, sub);         break;
+                    case 3:  err = aus.ErrorMessage(new List<Error>() { new Error03()                   }, 1 , 2  ); ts = 1; break;
+					case 4:  err = aus.ErrorMessage(new List<Error>() { new Error04()                   }, 1 , 1  );         break;
+					case 5:  err = aus.ErrorMessage(new List<Error>() { new Error05()                   }, 1 , sub)+
+								   aus.ErrorMessage(new List<Error>() { new Error05()                   }, 2 , sub);         break;
+					case 6:  err = aus.ErrorMessage(new List<Error>() { new Error06(),new Error07()     }, 2 , sub);         break;
+                    case 7:  err = aus.ErrorMessage(new List<Error>() { new Error07()                   }, ts, sub);         break;
+                    case 8:  err = aus.ErrorMessage(new List<Error>() { new Error08()                   }, 2 , sub);         break;
+					case 9:  err = aus.ErrorMessage(new List<Error>() {               new Error09(errO) }, ts, sub);         break;
+					case 10: err = aus.ErrorMessage(new List<Error>() { new Error08(),new Error10(errO) }, ts, sub);         break;
+                    case 11: err = aus.ErrorMessage(new List<Error>() { new Error11()                   }, ts, sub);         break;
+                    case 12: err = aus.ErrorMessage(new List<Error>() { new Error08(),new Error12()     }, ts, sub);         break;
+					case 13: err = aus.ErrorMessage(new List<Error>() { new Error13()                   }, 1 , 2  );         break;
+                    default:
+                        Console.WriteLine("Found an unexpected testID " + testID + ". This test may not be tested correctly.");
+                        err = aus.NoErrors(); break;
+                }
 				shouldValues.Add("Hauptbeweis\r\n" + err);
 			}
 		}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckFixedVarsNotSubstituted.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckFixedVarsNotSubstituted.cs
index 30ec506..ae14564 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckFixedVarsNotSubstituted.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckFixedVarsNotSubstituted.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -20,7 +21,7 @@ namespace Ueberpruefung.CheckInduction
                         // renamings without changing name are substitutions added at model creating and are no errors
                         if (!(sub.tree is TreeVariable tv && tv.name == sub.variable.name))
                         { result = false; output += sub.variable.name+" "; }
-                if (!result) ts.errors.Add(new Error(37, output));
+                if (!result) ts.errors.Add(new Error37(output));
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseType.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseType.cs
index e81a664..eede5f3 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseType.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseType.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung;
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -25,7 +26,7 @@ namespace Ueberpruefung.CheckInduction
                 else if (indC.type == "IS")
                     { if (indC.Constructor != null) result = indC.Constructor is BuildingConstructor; }
                 else throw new KontextException(indC.coords,"Found an unknown induction case type: " + indC.type);
-                if (!result) indC.errors.Add(new Error(41));
+                if (!result) indC.errors.Add(new Error41());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseTypeIsValid.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseTypeIsValid.cs
index 4c6f65c..9cdf121 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseTypeIsValid.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCaseTypeIsValid.cs
@@ -3,6 +3,7 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -36,7 +37,7 @@ namespace Ueberpruefung.CheckInduction
                         }
                 }
                 foreach (InductionCase ic in invalidCases)
-                    ic.errors.Add(new Error(33));
+                    ic.errors.Add(new Error33());
                 return invalidCases.Count == 0;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCasesAllExisting.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCasesAllExisting.cs
index 08179f4..a7ea156 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCasesAllExisting.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndCasesAllExisting.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -29,7 +30,7 @@ namespace Ueberpruefung.CheckInduction
                 {
                     string output = "";
                     foreach (Constructor indVarC in indVarCs) output += indVarC.name + " ";
-                    ind.errors.Add(new Error(32, output));
+                    ind.errors.Add(new Error32(output));
                     return false;
                 }
                 else return true;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypCanBeUseful.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypCanBeUseful.cs
index ff7eccc..59836b1 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypCanBeUseful.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypCanBeUseful.cs
@@ -2,6 +2,7 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -34,7 +35,7 @@ namespace Ueberpruefung.CheckInduction
                             ihBuildingVarName = tv.name;
                     if (ihBuildingVarName != "")
                         if (!bPVNames.Contains(ihBuildingVarName))
-                        { result = false; ih.errors.Add(new Error(43)); }
+                        { result = false; ih.errors.Add(new Error43()); }
                 }
                 return result;
             }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypNotUsedInIA.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypNotUsedInIA.cs
index fc8c890..4ef1757 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypNotUsedInIA.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypNotUsedInIA.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -25,7 +26,7 @@ namespace Ueberpruefung.CheckInduction
                         if (ts.rule is InductionHypothesis)
                         {
                             result = false;
-                            ts.errors.Add(new Error(36));
+                            ts.errors.Add(new Error36());
                         }
                     return result;
                 }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypsUnique.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypsUnique.cs
index eca6d67..41a7849 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypsUnique.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndHypsUnique.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -30,7 +31,7 @@ namespace Ueberpruefung.CheckInduction
                             ihBuildingVarName = tv.name;
                     if (ihBuildingVarName != "")
                         if (ihBuildingVarNames.Contains(ihBuildingVarName))
-                        { result = false; ih.errors.Add(new Error(42)); }
+                        { result = false; ih.errors.Add(new Error42()); }
                         else ihBuildingVarNames.Add(ihBuildingVarName);
                 }
                 return result;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquation.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquation.cs
index f8501ad..15671d8 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquation.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquation.cs
@@ -2,6 +2,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -37,7 +38,7 @@ namespace Ueberpruefung.CheckInduction
                     foreach (Substitution sub in renamings)
                         if (sub.variable != parent.indVar)
                             result &= sub.variable.name == ((TreeVariable)sub.tree).name;
-                if (!result) ih.errors.Add(new Error(34, errOutput));
+                if (!result) ih.errors.Add(new Error34(errOutput));
                 return result;
             }
             else if (e is InductionCase ic)
@@ -84,7 +85,7 @@ namespace Ueberpruefung.CheckInduction
                             result &= sub.variable.name == ((TreeVariable)sub.tree).name;
                         // 6. only ind var is allowed to be substituted by composed tree
                         result &= subs[0].variable == parent.indVar;
-                        // 7. build corrected constructor for error output
+                        // 7. build corrected constructor for error hint
                         if (!result)
                         {
                             if (parent.indVar.sort == cTree.sort)
@@ -99,7 +100,7 @@ namespace Ueberpruefung.CheckInduction
                         }
                     }
                 }
-                if (!result) ic.errors.Add(new Error(34, errOutput));
+                if (!result) ic.errors.Add(new Error34(errOutput));
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationFixedVars.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationFixedVars.cs
index abd581a..6bc515f 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationFixedVars.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationFixedVars.cs
@@ -46,7 +46,7 @@ namespace Ueberpruefung.CheckInduction
         protected abstract bool check(List<Variable> shouldValueFixedVars, List<Variable> isValueFixedVars, List<Error> contextErrorList);
 
         /// <summary>
-        /// checks error 35. Removes all should be fixed vars from isValueFixedVars and prints error output in err35Output if result is false.
+        /// checks error 35. Removes all should be fixed vars from isValueFixedVars and prints error hint in err35Output if result is false.
         /// </summary>
         /// <param name="shouldValueFixedVars"></param>
         /// <param name="isValueFixedVars"></param>
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsFixed.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsFixed.cs
index deb2e3b..9907b00 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsFixed.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsFixed.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -22,7 +23,7 @@ namespace Ueberpruefung.CheckInduction
         {
             isValueFixedVars = new List<Variable>(isValueFixedVars); // copy list
             bool result = check35(shouldValueFixedVars,isValueFixedVars, out string err35Output);
-            if (!result) contextErrorList.Add(new Error(35, err35Output));
+            if (!result) contextErrorList.Add(new Error35(err35Output));
             return result;
         }
     }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsNotFixed.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsNotFixed.cs
index cdf38ad..cc928e3 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsNotFixed.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndPartEquationIsNotFixed.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -28,7 +29,7 @@ namespace Ueberpruefung.CheckInduction
                 string output = "";
                 foreach (Variable var in isValueFixedVars)
                     output += var.name + " ";
-                contextErrorList.Add(new Error(40, output));
+                contextErrorList.Add(new Error40(output));
             }
             return result;
         }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndTask_Satisfied.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndTask_Satisfied.cs
index 02a3329..1e8aa55 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndTask_Satisfied.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndTask_Satisfied.cs
@@ -2,6 +2,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -39,11 +40,11 @@ namespace Ueberpruefung.CheckInduction
             bool result = true;
             Variable taskIndVar = ((TreeVariable)taskRenaming.tree).variable;
             if (proof is Transformation tr)
-            { result = false; tr.errors.Add(new Error(39)); }
+            { result = false; tr.errors.Add(new Error39()); }
             else if (proof is Induction ind)
             {
                 if (ind.indVar != taskRenaming.variable)
-                { result = false; ind.errors.Add(new Error(38)); }
+                { result = false; ind.errors.Add(new Error38()); }
             }
             else throw new KontextException(proof.coords,"Found a single proof that is neither Transformation nor Induction!");
             return result;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarHasConstructors.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarHasConstructors.cs
index a4dc095..cfbf260 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarHasConstructors.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarHasConstructors.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -15,7 +16,7 @@ namespace Ueberpruefung.CheckInduction
             {
                 if (ind.indVar == null) return true;
                 bool result = ind.indVar.sort.GetConstructors().Count > 0;
-                if (!result) ind.errors.Add(new Error(31));
+                if (!result) ind.errors.Add(new Error31());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarNotFixed.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarNotFixed.cs
index 1afc7b2..4f75cae 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarNotFixed.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckInduction/CheckIndVarNotFixed.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckInduction
 {
@@ -15,7 +16,7 @@ namespace Ueberpruefung.CheckInduction
             if (e is Induction ind)
             {
                 bool result = !ind.fixedVars.Contains(ind.indVar);
-                if (!result) ind.errors.Add(new Error(30));
+                if (!result) ind.errors.Add(new Error30());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaEqualsTask.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaEqualsTask.cs
index 7d84807..4bf650f 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaEqualsTask.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaEqualsTask.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung
 {
@@ -49,10 +50,10 @@ namespace Ueberpruefung
                     {
                         variableRenaming1.Clear(); variableRenaming2.Clear();
                         if (!FindVariableRenamings(variableRenaming1, variableRenaming2, true))
-                            { l.errors.Add(new Error(22)); return false; }
+                            { l.errors.Add(new Error22()); return false; }
                     }
                     if (CheckHelper.unionSubstitutions(variableRenaming1, variableRenaming2) == null)
-                        { l.errors.Add(new Error(22)); return false; }
+                        { l.errors.Add(new Error22()); return false; }
                     return true;
                 }
                 else return true;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaIsAcyclic.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaIsAcyclic.cs
index d79f922..e615fa0 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaIsAcyclic.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaIsAcyclic.cs
@@ -1,5 +1,6 @@
 using System;
 using Eingabeverwaltung.Metamodell;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung
 {
@@ -16,7 +17,7 @@ namespace Ueberpruefung
                     string output = "{ ";
                     foreach (Lemma dep in l.cyclicDependencies) output += dep.name + " ";
                     output += "}";
-                    l.errors.Add(new Error(20,output));
+                    l.errors.Add(new Error20(output));
                 }
                 return result;
             }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaTaskIsUsed.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaTaskIsUsed.cs
index efb8818..788c68a 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaTaskIsUsed.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckLemmaTaskIsUsed.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using Eingabeverwaltung;
 using Eingabeverwaltung.Metamodell;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung
 {
@@ -51,7 +52,7 @@ namespace Ueberpruefung
                 bool result = mainLemmata.Count == 0;
                 if (!result)
                     foreach (Lemma lemma in mainLemmata)
-                        lemma.errors.Add(new Error(23));
+                        lemma.errors.Add(new Error23());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleEndTree.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleEndTree.cs
index da4284f..77898bf 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleEndTree.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleEndTree.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is TransformationStep ts) 
             {
                 bool result = ts.resultTree.Equals(CheckHelper.transform(ts.startTree, ts.termPart, CheckHelper.substitute(ts.ruleStartTree(), ts.substitutions)));
-                if (!result) ts.errors.Add(new Error(12));
+                if (!result) ts.errors.Add(new Error12());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleStartTree.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleStartTree.cs
index ab9480e..b0019de 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleStartTree.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckResultTree_for_RuleStartTree.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is TransformationStep ts)
             {
                 bool result = ts.resultTree.Equals(CheckHelper.transform(ts.startTree,ts.termPart,CheckHelper.substitute(ts.ruleEndTree(),ts.substitutions)));
-                if (!result) ts.errors.Add(new Error(11));
+                if (!result) ts.errors.Add(new Error11());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_DefinedIn_ADT.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_DefinedIn_ADT.cs
index 1270c0b..fc8d186 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_DefinedIn_ADT.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_DefinedIn_ADT.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is Substitution sub)
             {
                 bool result = sub.variable != null;
-                if (!result) sub.errors.Add(new Error(3));
+                if (!result) sub.errors.Add(new Error03());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_isUsedInRule.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_isUsedInRule.cs
index b911a0c..a4ab876 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_isUsedInRule.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitutionVariable_isUsedInRule.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -21,7 +22,7 @@ namespace Ueberpruefung.CheckTransformation
                 {
                     res = ts.rule.eq.leftTree.findSubTree(new TreeVariable(sub.variable)).Count > 0
                          || ts.rule.eq.rightTree.findSubTree(new TreeVariable(sub.variable)).Count > 0;
-                    if (!res) sub.errors.Add(new Error(13));
+                    if (!res) sub.errors.Add(new Error13());
                 }
                 return result;
             }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_NoSortChange.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_NoSortChange.cs
index 6eb8a5e..846afe5 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_NoSortChange.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_NoSortChange.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is Substitution sub)
             {
                 bool result = sub.variable.sort == sub.tree.sort;
-                if (!result) sub.errors.Add(new Error(4));
+                if (!result) sub.errors.Add(new Error04());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleEndTree.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleEndTree.cs
index 8168881..eee25bf 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleEndTree.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleEndTree.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -16,8 +17,8 @@ namespace Ueberpruefung.CheckTransformation
                 r = ts.termPart.Equals(CheckHelper.substitute(ts.ruleEndTree(), ts.substitutions));
                 if (e && !r && !(new CheckTermPart_match_RuleStartTree().check(ts)))
                 {
-                    Error err = new Error(10);
-                    err.Output = Util.ListSubstitutionToString(CheckHelper.findSubstitution(ts.ruleEndTree(),ts.termPart));
+                    Error err = new Error10();
+                    err.Hint = Util.ListSubstitutionToString(CheckHelper.findSubstitution(ts.ruleEndTree(),ts.termPart));
                     ts.errors.Add(err);
                 }
                 return !e || r;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleStartTree.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleStartTree.cs
index c8bb4e1..c60ba31 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleStartTree.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckSubstitution_for_RuleStartTree.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -16,8 +17,8 @@ namespace Ueberpruefung.CheckTransformation
                 r = ts.termPart.Equals(CheckHelper.substitute(ts.ruleStartTree(), ts.substitutions));
                 if (s && !r)
                 {
-                    Error err = new Error(9);
-                    err.Output = Util.ListSubstitutionToString(CheckHelper.findSubstitution(ts.ruleStartTree(), ts.termPart));
+                    Error err = new Error09();
+                    err.Hint = Util.ListSubstitutionToString(CheckHelper.findSubstitution(ts.ruleStartTree(), ts.termPart));
                     ts.errors.Add(err);
                 }
                 return !s || r;
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTask_Satisfied.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTask_Satisfied.cs
index 2db9e6b..eabb9f2 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTask_Satisfied.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTask_Satisfied.cs
@@ -3,6 +3,7 @@ using Eingabeverwaltung.Metamodell;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -44,8 +45,8 @@ namespace Ueberpruefung.CheckTransformation
             if (startL && endR || startR && endL) result = null;
             else
             {
-                if (!startL && !startR) result.Add(new Error(1));
-                if (!endL && !endR || startL && !endR || startR && !endL) result.Add(new Error(2));
+                if (!startL && !startR) result.Add(new Error01());
+                if (!endL && !endR || startL && !endR || startR && !endL) result.Add(new Error02());
             }
             return result;
         }
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTermPart_isSubTreeFrom_StartTree.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTermPart_isSubTreeFrom_StartTree.cs
index 8c2bb83..d7def58 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTermPart_isSubTreeFrom_StartTree.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTermPart_isSubTreeFrom_StartTree.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is TransformationStep ts)
             {
                 bool result = ts.startTree.findSubTree(ts.termPart).Count > 0;
-                if (!result) ts.errors.Add(new Error(6));
+                if (!result) ts.errors.Add(new Error06());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTransformationStep_NoSortChange.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTransformationStep_NoSortChange.cs
index 3980c59..52713b7 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTransformationStep_NoSortChange.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckTransformationStep_NoSortChange.cs
@@ -1,5 +1,6 @@
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -12,7 +13,7 @@ namespace Ueberpruefung.CheckTransformation
             if (e is TransformationStep ts)
             {
                 bool result = ts.startTree.sort == ts.resultTree.sort;
-                if (!result) ts.errors.Add(new Error(5));
+                if (!result) ts.errors.Add(new Error05());
                 return result;
             }
             else throw new InvalidOperationException();
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckUsedLemmaIsProved.cs b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckUsedLemmaIsProved.cs
index 53acee7..2f7abf2 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckUsedLemmaIsProved.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/CheckTransformation/CheckUsedLemmaIsProved.cs
@@ -1,6 +1,7 @@
 using Eingabeverwaltung;
 using Eingabeverwaltung.Metamodell;
 using System;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung.CheckTransformation
 {
@@ -30,7 +31,7 @@ namespace Ueberpruefung.CheckTransformation
                         }
                         result &= result2;
                     }
-                    if (!result) ts.errors.Add(new Error(21,output));
+                    if (!result) ts.errors.Add(new Error21(output));
                     return result;
                 }
                 else if (ts.rule is InductionHypothesis ih)
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error30.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error30.cs
new file mode 100644
index 0000000..c14db3d
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error30.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error30 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error30() : base(30) { }
+        public Error30(string hint) : base(30,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error31.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error31.cs
new file mode 100644
index 0000000..1a3f34f
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error31.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error31 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error31() : base(31) { }
+        public Error31(string hint) : base(31,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error32.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error32.cs
new file mode 100644
index 0000000..2c69ba6
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error32.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error32 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error32() : base(32) { }
+        public Error32(string hint) : base(32,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error33.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error33.cs
new file mode 100644
index 0000000..3da5325
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error33.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error33 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error33() : base(33) { }
+        public Error33(string hint) : base(33,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error34.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error34.cs
new file mode 100644
index 0000000..ebd4897
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error34.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error34 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error34() : base(34) { }
+        public Error34(string hint) : base(34,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error35.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error35.cs
new file mode 100644
index 0000000..abfa647
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error35.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error35 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error35() : base(35) { }
+        public Error35(string hint) : base(35,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error36.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error36.cs
new file mode 100644
index 0000000..261a388
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error36.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error36 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error36() : base(36) { }
+        public Error36(string hint) : base(36,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error37.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error37.cs
new file mode 100644
index 0000000..117e50e
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error37.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error37 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error37() : base(37) { }
+        public Error37(string hint) : base(37,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error38.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error38.cs
new file mode 100644
index 0000000..16128a6
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error38.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error38 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error38() : base(38) { }
+        public Error38(string hint) : base(38,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error39.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error39.cs
new file mode 100644
index 0000000..081cb24
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error39.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error39 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error39() : base(39) { }
+        public Error39(string hint) : base(39,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error40.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error40.cs
new file mode 100644
index 0000000..6c3156b
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error40.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error40 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error40() : base(40) { }
+        public Error40(string hint) : base(40,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error41.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error41.cs
new file mode 100644
index 0000000..d112807
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error41.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error41 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error41() : base(41) { }
+        public Error41(string hint) : base(41,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error42.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error42.cs
new file mode 100644
index 0000000..bf7e35d
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error42.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error42 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error42() : base(42) { }
+        public Error42(string hint) : base(42,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error43.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error43.cs
new file mode 100644
index 0000000..e605ef8
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/InductionErrors/Error43.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error43 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error43() : base(43) { }
+        public Error43(string hint) : base(43,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error20.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error20.cs
new file mode 100644
index 0000000..fc81924
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error20.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error20 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error20() : base(20) { }
+        public Error20(string hint) : base(20,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error21.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error21.cs
new file mode 100644
index 0000000..ed8e2b8
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error21.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error21 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error21() : base(21) { }
+        public Error21(string hint) : base(21,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error22.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error22.cs
new file mode 100644
index 0000000..faa43da
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error22.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error22 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error22() : base(22) { }
+        public Error22(string hint) : base(22,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error23.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error23.cs
new file mode 100644
index 0000000..3eca3c7
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/LemmaErrors/Error23.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error23 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error23() : base(23) { }
+        public Error23(string hint) : base(23,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error01.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error01.cs
new file mode 100644
index 0000000..af41d55
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error01.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error01 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error01() : base(1) { }
+        public Error01(string hint) : base(1,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error02.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error02.cs
new file mode 100644
index 0000000..eee18f4
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error02.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error02 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error02() : base(2) { }
+        public Error02(string hint) : base(2,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error03.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error03.cs
new file mode 100644
index 0000000..229fba9
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error03.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error03 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error03() : base(3) { }
+        public Error03(string hint) : base(3,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error04.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error04.cs
new file mode 100644
index 0000000..7880c93
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error04.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error04 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error04() : base(4) { }
+        public Error04(string hint) : base(4,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error05.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error05.cs
new file mode 100644
index 0000000..dcb923e
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error05.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error05 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error05() : base(5) { }
+        public Error05(string hint) : base(5,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error06.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error06.cs
new file mode 100644
index 0000000..11cd95e
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error06.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error06 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error06() : base(6) { }
+        public Error06(string hint) : base(6,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error07.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error07.cs
new file mode 100644
index 0000000..d9e67a0
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error07.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error07 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error07() : base(7) { }
+        public Error07(string hint) : base(7,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error08.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error08.cs
new file mode 100644
index 0000000..3ab0fba
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error08.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error08 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error08() : base(8) { }
+        public Error08(string hint) : base(8,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error09.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error09.cs
new file mode 100644
index 0000000..58c6194
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error09.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error09 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error09() : base(9) { }
+        public Error09(string hint) : base(9,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error10.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error10.cs
new file mode 100644
index 0000000..4676f87
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error10.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error10 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error10() : base(10) { }
+        public Error10(string hint) : base(10,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error11.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error11.cs
new file mode 100644
index 0000000..f4ce7af
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error11.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error11 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error11() : base(11) { }
+        public Error11(string hint) : base(11,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error12.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error12.cs
new file mode 100644
index 0000000..7a20d51
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error12.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error12 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error12() : base(12) { }
+        public Error12(string hint) : base(12,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error13.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error13.cs
new file mode 100644
index 0000000..5d9babf
--- /dev/null
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Errors/TransformationErrors/Error13.cs
@@ -0,0 +1,10 @@
+namespace Ueberpruefung.Errors
+{
+    class Error13 : Eingabeverwaltung.Metamodell.Error
+    {
+        public Error13() : base(13) { }
+        public Error13(string hint) : base(13,hint) { }
+
+        public override string Description() { throw new System.NotImplementedException(); }
+    }
+}
diff --git a/BewerterStrukturellerInduktion/Ueberpruefung/Ueberpruefer.cs b/BewerterStrukturellerInduktion/Ueberpruefung/Ueberpruefer.cs
index 26f33ac..addacf9 100644
--- a/BewerterStrukturellerInduktion/Ueberpruefung/Ueberpruefer.cs
+++ b/BewerterStrukturellerInduktion/Ueberpruefung/Ueberpruefer.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
 using Ueberpruefung.CheckTransformation;
 using Ueberpruefung.CheckInduction;
 using Eingabeverwaltung;
+using Ueberpruefung.Errors;
 
 namespace Ueberpruefung
 {
@@ -122,7 +123,7 @@ namespace Ueberpruefung
                         if (ts.accept(new CheckSubstitution_for_RuleEndTree()))                    // 10
                         {
                             // direction is wrong
-                            ts.errors.Add(new Error(8));
+                            ts.errors.Add(new Error08());
                             if (termPart_isSubTreeFrom_starTree)
                                 isProved &= ts.accept(new CheckResultTree_for_RuleEndTree());      // 12
                         }
@@ -147,13 +148,13 @@ namespace Ueberpruefung
                         {
                             if (termPart_match_RuleEndTree)
                             {
-                                ts.errors.Add(new Error(8));
+                                ts.errors.Add(new Error08());
                                 if (ts.accept(new CheckSubstitution_for_RuleEndTree())             // 10
                                     && termPart_isSubTreeFrom_starTree)
                                     isProved &= ts.accept(new CheckResultTree_for_RuleEndTree());  // 12
                                 else isProved = false;
                             }
-                            else { ts.errors.Add(new Error(7)); isProved = false; }
+                            else { ts.errors.Add(new Error07()); isProved = false; }
                         }
                     }
                     ts.accept(new CheckSubstitutionVariable_isUsedInRule());                       // 13
diff --git a/BewerterStrukturellerInduktion/Util.cs b/BewerterStrukturellerInduktion/Util.cs
index 63eafe3..2b7b469 100644
--- a/BewerterStrukturellerInduktion/Util.cs
+++ b/BewerterStrukturellerInduktion/Util.cs
@@ -15,7 +15,7 @@ public static class Util
     {
         string result = "Errors: { ";
         foreach (Error err in errors)
-            result += err.errorCode + "(" + err.Output + ") ";
+            result += err.errorCode + "(" + err.Hint + ") ";
         result += "}";
         return result;
     }
-- 
GitLab