From 11691f38ae62ef17898390183e370798997263f7 Mon Sep 17 00:00:00 2001
From: Edward Sabinus <edward.sabinus@informatik.uni-halle.de>
Date: Wed, 24 Apr 2024 12:00:12 +0200
Subject: [PATCH] Added tests to ExtraTest. Some test cases which violate
 grammar do not work with non deadly errors, so they are deadly now. removed
 test cases for errors which are now deadly. TODO: improve antlr error
 reporting to not start semantic analysis if syntax analysis got errors.

---
 .../Parser/Listener_Helper.cs                 |  2 +-
 .../Parser/Proof_Listener.cs                  |  2 +-
 .../Parser/TransformationStep_Listener.cs     | 32 ++++++-------
 .../Testverwaltung/ExtraTest.cs               | 17 ++++++-
 .../Tests/extra/NonDeadSemErrs/0riginal.proof |  2 +-
 .../Tests/extra/NonDeadSemErrs/axiom.proof    |  2 +-
 .../extra/NonDeadSemErrs/direction.proof      |  2 +-
 .../Tests/extra/NonDeadSemErrs/indvar2.proof  |  2 +-
 .../extra/NonDeadSemErrs/resulttree.proof     | 46 -------------------
 .../extra/NonDeadSemErrs/starttree.proof      | 45 ------------------
 .../extra/NonDeadSemErrs/substitution1.proof  | 46 -------------------
 .../extra/NonDeadSemErrs/substitution2.proof  | 46 -------------------
 .../Tests/extra/NonDeadSemErrs/termpart.proof | 46 -------------------
 .../extra/NonDeadSemErrs/transformation.proof | 39 ----------------
 14 files changed, 36 insertions(+), 293 deletions(-)
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/resulttree.proof
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/starttree.proof
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution1.proof
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution2.proof
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/termpart.proof
 delete mode 100644 BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/transformation.proof

diff --git a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Listener_Helper.cs b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Listener_Helper.cs
index 1e6d930..78c8c7b 100644
--- a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Listener_Helper.cs
+++ b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Listener_Helper.cs
@@ -378,7 +378,7 @@ namespace Eingabeverwaltung.Parser
             {
                 if (leftTree.sort.name != rightTree.sort.name)
                     errors.Add(new SemanticAnalysisError(coords, "The Equation has not the same Sort on its 2 sides! Sort of leftTree: " + leftTree.sort.name + " Sort of rightTree: " + rightTree.sort.name));
-            }catch(NullReferenceException n) { errors.Add(new SemanticAnalysisError(coords, "One or more sides of one Equation are null!")); }
+            }catch(NullReferenceException) { errors.Add(new SemanticAnalysisError(coords, "One or more sides of one Equation are null!")); }
         }
 
         /// <summary>
diff --git a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Proof_Listener.cs b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Proof_Listener.cs
index d02698f..dec6ed1 100644
--- a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Proof_Listener.cs
+++ b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/Proof_Listener.cs
@@ -111,7 +111,7 @@ namespace Eingabeverwaltung.Parser
         public void EnterStart_tree([NotNull] ProofParser.Start_treeContext context) => LH.trees = new List<Tree>();
         public void ExitStart_tree([NotNull] ProofParser.Start_treeContext context)
         {
-            if (LH.trees.Count != 1) LH.errors.Add(new SemanticAnalysisError(new Coords(context),"Trees was Expected to have 1 Tree for Start_tree, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees)));
+            if (LH.trees.Count != 1) throw new SemanticAnalysisDeadlyError(new Coords(context), "Trees was Expected to have 1 Tree for Start_tree, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees));
             startTree = LH.trees[0];
         }
 
diff --git a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/TransformationStep_Listener.cs b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/TransformationStep_Listener.cs
index b84d12c..98081be 100644
--- a/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/TransformationStep_Listener.cs
+++ b/BewerterStrukturellerInduktion/Eingabeverwaltung/Parser/TransformationStep_Listener.cs
@@ -103,7 +103,7 @@ namespace Eingabeverwaltung.Parser
         public void EnterTransformation([NotNull] ProofParser.TransformationContext context) => TSs = new List<Transformation_Step>();
         public void ExitTransformation([NotNull] ProofParser.TransformationContext context) 
         {
-            if (TSs.Count < 1) LH.errors.Add(new SemanticAnalysisError(new Coords(context),"No TransformationSteps found in Transformation at ExitTransformation!"));
+            if (TSs.Count < 1) throw new SemanticAnalysisDeadlyError(new Coords(context),"No TransformationSteps found in Transformation at ExitTransformation!");
             Tree startT = currentTR.startTree;
             for (int i = 0; i < TSs.Count; i++)
             {
@@ -128,6 +128,10 @@ namespace Eingabeverwaltung.Parser
         {
             Coords coords = new Coords(context);
             Rule rule = null;
+            // begin preparation for exception case (this is for exception case to avoid NullReferenceException on reading TS.rule.eq)
+            Tree exceptionTree = new TreeVariable(new Variable("", new Sort("")));
+            Equation exeptionEquation = new Equation(exceptionTree, exceptionTree, new List<Variable>()); 
+            // end preparation for exception case
             if (context.BEZ() != null) 
             {
                 string ruleName = context.BEZ().GetText();
@@ -151,9 +155,9 @@ namespace Eingabeverwaltung.Parser
                                 {
                                     rule = findRuleIn(ruleName, currentInd.indHyps.Cast<Rule>().ToList());
                                     if (rule != null) TS.rule = rule;
-                                    else { LH.errors.Add(new SemanticAnalysisError(coords, "The rule " + ruleName + " is not defined!")); TS.rule = new Lemma(coords, ruleName, null, new List<Variable>(), null); }
+                                    else { LH.errors.Add(new SemanticAnalysisError(coords, "The rule " + ruleName + " is not defined!")); TS.rule = new InductionHypothesis(coords, ruleName, exeptionEquation, new List<Variable>()); }
                                 }
-                                else { LH.errors.Add(new SemanticAnalysisError(coords, "The rule " + ruleName + " is not defined!")); TS.rule = new Lemma(coords, ruleName, null, new List<Variable>(), null); }
+                                else { LH.errors.Add(new SemanticAnalysisError(coords, "The rule " + ruleName + " is not defined!")); TS.rule = new InductionHypothesis(coords, ruleName, exeptionEquation, new List<Variable>()); }
                             }
                         }
                     }
@@ -163,7 +167,7 @@ namespace Eingabeverwaltung.Parser
             {
                 if (currentInd != null) rule = findRuleIn("IH", currentInd.indHyps.Cast<Rule>().ToList());
                 if (rule != null) TS.rule = rule;
-                else { LH.errors.Add(new SemanticAnalysisError(coords,"The Inductionhypothesis is not defined for the current TransformationStep!")); TS.rule = new InductionHypothesis(coords,"IH",null,new List<Variable>()); }
+                else { LH.errors.Add(new SemanticAnalysisError(coords,"The Inductionhypothesis is not defined for the current TransformationStep!")); TS.rule = new InductionHypothesis(coords,"IH", exeptionEquation, new List<Variable>()); }
             }            
         }
 
@@ -183,8 +187,8 @@ namespace Eingabeverwaltung.Parser
         public void EnterTermpart([NotNull] ProofParser.TermpartContext context) => LH.trees = new List<Tree>();
         public void ExitTermpart([NotNull] ProofParser.TermpartContext context)
         {
-            if (LH.trees.Count != 1) LH.errors.Add(new SemanticAnalysisError(new Coords(context), "Trees was Expected to have 1 Tree for Termpart, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees)));
-            else TS.termpart = LH.trees[0];
+            if (LH.trees.Count != 1) throw new SemanticAnalysisDeadlyError(new Coords(context), "Trees was Expected to have 1 Tree for Termpart, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees));
+            TS.termpart = LH.trees[0];
             LH.trees = null;
         }
 
@@ -212,23 +216,15 @@ namespace Eingabeverwaltung.Parser
             string variableName = context.BEZ().GetText();
             Variable variable = LH.findVariable(variableName, TS.rule.eq.variables);
             Test_Substitution_Variable_isCorrect(variableName, variable,coords);
-            if (LH.trees.Count != 1)
-            {
-                LH.errors.Add(new SemanticAnalysisError(coords, "Trees was Expected to have 1 Tree for Termpart, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees)));
-                TS.subs.Add(new Substitution(coords, variableName, variable, null));
-            }
-            else TS.subs.Add(new Substitution(coords, variableName, variable, LH.trees[0]));
+            if (LH.trees.Count != 1) throw new SemanticAnalysisDeadlyError(coords, "Trees was Expected to have 1 Tree for Termpart, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees));
+            TS.subs.Add(new Substitution(coords, variableName, variable, LH.trees[0]));
         }
 
         public void EnterResult_tree([NotNull] ProofParser.Result_treeContext context) => LH.trees = new List<Tree>();
         public void ExitResult_tree([NotNull] ProofParser.Result_treeContext context)
         {
-            if (LH.trees.Count != 1) 
-            { 
-                LH.errors.Add(new SemanticAnalysisError(new Coords(context), "Trees was Expected to have 1 Tree for ResultTree, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees)));
-                TS.resultTree = null;
-            }
-            else TS.resultTree = LH.trees[0];
+            if (LH.trees.Count != 1) throw (new SemanticAnalysisDeadlyError(new Coords(context), "Trees was Expected to have 1 Tree for ResultTree, but found " + LH.trees.Count + " trees! They are: " + LH.TreeListToString(LH.trees)));
+            TS.resultTree = LH.trees[0];
         }
 
         // Induction
diff --git a/BewerterStrukturellerInduktion/Testverwaltung/ExtraTest.cs b/BewerterStrukturellerInduktion/Testverwaltung/ExtraTest.cs
index 93800cd..11c688d 100644
--- a/BewerterStrukturellerInduktion/Testverwaltung/ExtraTest.cs
+++ b/BewerterStrukturellerInduktion/Testverwaltung/ExtraTest.cs
@@ -1,4 +1,5 @@
-using System;
+using Eingabeverwaltung.Metamodell;
+using System;
 using System.Collections.Generic;
 using Ueberpruefung;
 
@@ -37,6 +38,7 @@ namespace Testverwaltung
         /// <param name="path"></param>
         private void NonDeadSemErrsTest(string path)
         {
+            // Test ADT
             List<string> adtFileNames = new List<string>() { "tree1","tree2","tree3","tree4","tree5","sort","op","ax","chaos" };
             List<string> adtShallValues = new List<string>() 
             {
@@ -52,6 +54,7 @@ namespace Testverwaltung
             };
             for (int i = 0; i < adtFileNames.Count; i++)
                 ExceptionTesting("ADT", path + adtFileNames[i]+".adt", adtShallValues[i]);
+            // Test Task
             List<string> taskFileNames = new List<string>() { "tree1", "tree2", "tree3", "tree4", "tree5", "var", "lemma" };
             List<string> taskShallValues = new List<string>()
             {
@@ -66,6 +69,18 @@ namespace Testverwaltung
             ein.Eingabe_Interface("ADT", path + "1riginal.adt");
             for (int i = 0; i < taskFileNames.Count; i++)
                 ExceptionTesting("Task", path + taskFileNames[i] + ".task", taskShallValues[i]);
+            // Test Proof
+            List<string> proofFileNames = new List<string>() { "axiom", "direction", "indvar1", "indvar2" }; // wierd grammar errors:, "resulttree", "starttree", "substitution", "termpart", "transformation" };
+            List<string> proofShallValues = new List<string>() {
+                "Errors:\r\nError in 4:5: The rule bla0 is not defined!\r\n",
+                "Errors:\r\nError in 4:9: The Direction of the TransformationStep is undefined! Expected 'rl' or 'lr' but found \"leftright\".\r\n",
+                "Errors:\r\nError in 3:0: Induction variable of proof L1 is neither definied in proof nor in task!\r\nError in 16:0: Induction variable of proof L2 is neither definied in proof nor in task!\r\nError in 33:0: Induction variable of proof main proof is neither definied in proof nor in task!\r\n",
+                "Errors:\r\nError in 16:64: Could not find Induction variable x in current context of variables.\r\nError in 16:64: Induction variable of proof L2 is neither definied in proof nor in task!\r\n",
+            };
+            ein.Eingabe_Interface("ADT", path + "0riginal.adt");
+            ein.Eingabe_Interface("Task", path + "1riginal.task");
+            for (int i = 0; i < proofFileNames.Count; i++)
+                ExceptionTesting("Proof", path + proofFileNames[i] + ".proof", proofShallValues[i]);
         }
 
         private void ExceptionTesting(string inputType, string inputPath, string shallMessage) 
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/0riginal.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/0riginal.proof
index 64a6995..43ebe30 100644
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/0riginal.proof
+++ b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/0riginal.proof
@@ -28,7 +28,7 @@ plus(inc(a),inc(b))
   {p1,rl,inc(plus(a,b)),[a/n,b/m]}
 = inc(plus(a,inc(b)))
 
-proof
+proof induction n
 IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
 plus(null,m)
   {L1,lr,plus(null,m),[m/y]}
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/axiom.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/axiom.proof
index fa67982..9dd637d 100644
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/axiom.proof
+++ b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/axiom.proof
@@ -28,7 +28,7 @@ plus(inc(a),inc(b))
   {p1,rl,inc(plus(a,b)),[a/n,b/m]}
 = inc(plus(a,inc(b)))
 
-proof
+proof induction n
 IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
 plus(null,m)
   {L1,lr,plus(null,m),[m/y]}
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/direction.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/direction.proof
index 5610fb6..368403c 100644
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/direction.proof
+++ b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/direction.proof
@@ -28,7 +28,7 @@ plus(inc(a),inc(b))
   {p1,rl,inc(plus(a,b)),[a/n,b/m]}
 = inc(plus(a,inc(b)))
 
-proof
+proof induction n
 IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
 plus(null,m)
   {L1,lr,plus(null,m),[m/y]}
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/indvar2.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/indvar2.proof
index 3be4ccd..3579930 100644
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/indvar2.proof
+++ b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/indvar2.proof
@@ -30,7 +30,7 @@ plus(inc(a),inc(b))
   {p1,rl,inc(plus(a,b)),[a/n,b/m]}
 = inc(plus(a,inc(b)))
 
-proof
+proof induction n
 IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
 plus(null,m)
   {L1,lr,plus(null,m),[m/y]}
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/resulttree.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/resulttree.proof
deleted file mode 100644
index f9e686b..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/resulttree.proof
+++ /dev/null
@@ -1,46 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null    
-plus(null,null)
-    {p0, lr, plus(null,null), [null/n]}
-= null null // two result trees
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y))
-    {p1, lr, plus(null,inc(y)), [null/n,y/m]}
-= inc(plus(null,y))
-    {IH, lr, plus(null,y), []}
-= // no result tree
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/starttree.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/starttree.proof
deleted file mode 100644
index 5bef015..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/starttree.proof
+++ /dev/null
@@ -1,45 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null    
-    {p0, lr, plus(null,null), [null/n]} // missing starttree
-= null
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y)) plus(null,null)       // two starttrees
-    {p1, lr, plus(null,inc(y)), [null/n,y/m]}
-= inc(plus(null,y))
-    {IH, lr, plus(null,y), []}
-= inc(y)
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution1.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution1.proof
deleted file mode 100644
index 358a11d..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution1.proof
+++ /dev/null
@@ -1,46 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null    
-plus(null,null)
-    {p0, lr, plus(null,null), [/n]} // 0 trees in sub
-= null
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y))
-    {p1, lr, plus(null,inc(y)), [null null/n,y/m]} // two trees in sub
-= inc(plus(null,y))
-    {IH, lr, plus(null,y), []}
-= inc(y)
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution2.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution2.proof
deleted file mode 100644
index 94e76ff..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/substitution2.proof
+++ /dev/null
@@ -1,46 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null    
-plus(null,null)
-    {p0, lr, plus(null,null), [null/x]} // unknown variable in substitution
-= null
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y))
-    {p1, lr, plus(null,inc(y)), [null/n,y/m]}
-= inc(plus(null,y))
-    {IH, lr, plus(null,y), []}
-= inc(y)
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/termpart.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/termpart.proof
deleted file mode 100644
index c643c2e..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/termpart.proof
+++ /dev/null
@@ -1,46 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null    
-plus(null,null)
-    {p0, lr, , [null/n]} // no term part
-= null
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y))
-    {p1, lr, plus(null,inc(y)) plus(null,null), [null/n,y/m]} // two term parts
-= inc(plus(null,y))
-    {IH, lr, plus(null,y), []}
-= inc(y)
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
diff --git a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/transformation.proof b/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/transformation.proof
deleted file mode 100644
index 3ea70c1..0000000
--- a/BewerterStrukturellerInduktion/bin/Debug/netcoreapp5.0/Tests/extra/NonDeadSemErrs/transformation.proof
+++ /dev/null
@@ -1,39 +0,0 @@
-lemma L1: forall y:Nat : plus(null,y) = y induction y
-IA: zu zeigen: plus(null,null) = null // No transformationsteps
-IH: fixed y:Nat : plus(null,y) = y
-IS: zu zeigen: fixed y:Nat : plus(null,inc(y)) = inc(y)
-plus(null,inc(y))                     // only startTree
-
-lemma L2: forall a:Nat, b:Nat : plus(inc(a),b) = inc(plus(a,b)) induction b
-IA: zu zeigen: forall a:Nat : plus(inc(a),null) = inc(plus(a,null))
-plus(inc(a),null)
-  {p0,lr,plus(inc(a),null),[inc(a)/n]}
-= inc(a)
-  {p0,rl,a,[a/n]}
-= inc(plus(a,null))
-IH: forall a:Nat : fixed b:Nat : plus(inc(a),b) = inc(plus(a,b))
-IS: zu zeigen: forall a:Nat : fixed b:Nat : plus(inc(a),inc(b)) = inc(plus(a,inc(b)))
-plus(inc(a),inc(b))
-  {p1,lr,plus(inc(a),inc(b)),[inc(a)/n,b/m]}
-= inc(plus(inc(a),b))
-  {IH,lr,plus(inc(a),b),[]}
-= inc(inc(plus(a,b)))
-  {p1,rl,inc(plus(a,b)),[a/n,b/m]}
-= inc(plus(a,inc(b)))
-
-proof
-IA: zu zeigen: forall m:Nat : plus(null,m) = plus(m,null)
-plus(null,m)
-  {L1,lr,plus(null,m),[m/y]}
-= m
-  {p0,rl,m,[m/n]}
-= plus(m,null)
-IH: fixed k:Nat : forall m:Nat : plus(k,m) = plus(m,k)
-IS: zu zeigen: forall m:Nat : fixed k:Nat : plus(inc(k),m) = plus(m,inc(k))
-plus(m,inc(k))
-  {p1,lr,plus(m,inc(k)),[m/n,k/m]}
-= inc(plus(m,k))
-  {IH,rl,plus(m,k),[]}
-= inc(plus(k,m))
-  {L2,rl,inc(plus(k,m)),[k/a,m/b]}
-= plus(inc(k),m)
\ No newline at end of file
-- 
GitLab