From 8403a0d216ab53dd7e97ffe62526c905f96a3f73 Mon Sep 17 00:00:00 2001
From: MaZiFAU <63099053+MaZiFAU@users.noreply.github.com>
Date: Fri, 7 Jul 2023 15:13:35 +0200
Subject: [PATCH] Refactor;

Refacto:
+OMA.arguments List => Array
+Added SOMDoc.MaekTupel()
---
 Assets/Scripts/GlobalBehaviour.cs             |  2 +-
 .../FactHandling/Facts/AbstractAngleFact.cs   | 14 +--
 .../FactHandling/Facts/AbstractLineFact.cs    |  4 +-
 .../FactHandling/Facts/Fact.cs                | 50 +++++-----
 .../FactHandling/Facts/FunctionFact.cs        | 11 ++-
 .../TBD/CanonBallCalculator.cs                | 22 ++---
 Assets/Scripts/SOMDocManager.cs               | 93 +++++++++++--------
 7 files changed, 104 insertions(+), 92 deletions(-)

diff --git a/Assets/Scripts/GlobalBehaviour.cs b/Assets/Scripts/GlobalBehaviour.cs
index 05fb6e3a..d8888ccb 100644
--- a/Assets/Scripts/GlobalBehaviour.cs
+++ b/Assets/Scripts/GlobalBehaviour.cs
@@ -122,7 +122,7 @@ IEnumerator getScrollsfromServer()
             AvailableScrolls = JsonConvert.DeserializeObject<List<REST_JSON_API.Scroll>>(jsonString);
             Debug.Log(
                 $"Scroll Times:\n" +
-                $"Sum\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" +
+                $"Summ\t{(System.DateTime.UtcNow - requestTime).TotalMilliseconds}ms\n" +
                 $"Server\t{(answerTime - requestTime).TotalMilliseconds}ms\n" +
                 $"Download\t{(parseTime - answerTime).TotalMilliseconds}ms\n" +
                 $"Parsing\t{(System.DateTime.UtcNow - parseTime).TotalMilliseconds}ms");
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
index 8f22fec1..5ef39d17 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractAngleFact.cs
@@ -64,7 +64,7 @@ protected AbstractAngleFact(string pid1, string pid2, string pid3, float angle,
     public override bool HasDependentFacts => true;
 
     /// \copydoc Fact.getDependentFactIds
-    protected override string[] GetGetDependentFactIds() 
+    protected override string[] GetGetDependentFactIds()
         => new string[] { Pid1, Pid2, Pid3 };
 
     protected override void RecalculateTransform()
@@ -146,7 +146,7 @@ public AngleFact(string pid1, string pid2, string pid3, FactOrganizer organizer)
     /// <param name="Pid3">sets <see cref="Pid3"/></param>
     /// <param name="backendURI">MMT URI</param>
     /// <param name="organizer">sets <see cref="Fact._Facts"/></param>
-    public AngleFact(string Pid1, string Pid2, string Pid3, float angle, string backendURI, FactOrganizer organizer) 
+    public AngleFact(string Pid1, string Pid2, string Pid3, float angle, string backendURI, FactOrganizer organizer)
         : base(Pid1, Pid2, Pid3, angle, backendURI, organizer) { }
 
     public override MMTDeclaration MakeMMTDeclaration()
@@ -154,7 +154,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.Angle),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Pid1),
                     new OMS(Pid2),
                     new OMS(Pid3)
@@ -210,7 +210,7 @@ protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new, F
 public class RightAngleFact : AbstractAngleFactWrappedCRTP<RightAngleFact>
 {
     override public bool is_right_angle { get => true; }
-    override public float angle {get => 90f;}
+    override public float angle { get => 90f; }
 
     /// <summary> \copydoc Fact.Fact </summary>
     public RightAngleFact() : base() { }
@@ -246,10 +246,10 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc tp =
             new OMA(
                 new OMS(MMT_OMS_URI.Ded),
-                new List<SOMDoc> {
+                new[] {
                     new OMA(
                         new OMS(MMT_OMS_URI.RightAngle),
-                        new List<SOMDoc> {
+                        new[]  {
                             new OMS(Pid1),
                             new OMS(Pid2),
                             new OMS(Pid3),
@@ -257,7 +257,7 @@ public override MMTDeclaration MakeMMTDeclaration()
 
         SOMDoc df = null;
 
-        return new MMTSymbolDeclaration(this.Label, tp, df);
+        return new MMTSymbolDeclaration(Label, tp, df);
     }
 
     /// \copydoc Fact.parseFact(ScrollFact)
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
index eaf2c9d7..1e29e045 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/AbstractLineFact.cs
@@ -142,7 +142,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.Metric),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Pid1),
                     new OMS(Pid2)
                 }
@@ -207,7 +207,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc defines = 
             new OMA(
                 new OMS(MMT_OMS_URI.LineOf),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Pid1),
                     new OMS(Pid2)
             });
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
index 6781c22b..6d74682b 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/Fact.cs
@@ -616,7 +616,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc tp = new OMS(MMT_OMS_URI.Point);
         SOMDoc df = new OMA(
                 new OMS(MMT_OMS_URI.Tuple),
-                new List<SOMDoc> {
+                new[] {
                         new OMF(Point.x),
                         new OMF(Point.y),
                         new OMF(Point.z),
@@ -737,10 +737,10 @@ public override MMTDeclaration MakeMMTDeclaration()
     {
         SOMDoc tp = new OMA(
             new OMS(MMT_OMS_URI.Ded),
-            new List<SOMDoc> {
+            new[] {
                 new OMA(
                     new OMS(MMT_OMS_URI.OnLine),
-                    new List<SOMDoc> {
+                    new[]  {
                         new OMS(Rid),
                         new OMS(Pid)
         }),});
@@ -832,10 +832,10 @@ public override MMTDeclaration MakeMMTDeclaration()
     {
         SOMDoc tp = new OMA(
             new OMS(MMT_OMS_URI.Ded),
-            new List<SOMDoc> {
+            new[] {
                 new OMA(
                     new OMS(MMT_OMS_URI.ParallelLine),
-                    new List<SOMDoc> {
+                    new[]  {
                         new OMS(Lid1),
                         new OMS(Lid2),
                     }
@@ -1002,14 +1002,14 @@ protected override string generateLabel()
     /// <returns>struct for <see cref="AddFactResponse"/></returns>
     public override MMTDeclaration MakeMMTDeclaration()
     {
-        List<SOMDoc> outerArguments = new List<SOMDoc>
+        SOMDoc[] outerArguments = new SOMDoc[]
         {
            //CirclePlane,
            new OMA(
                //PointNormalPlane,
                new OMS(MMT_OMS_URI.pointNormalPlane), 
                //planeArgs,
-               new List<SOMDoc> {
+               new SOMDoc[] {
                     //base point of the circle plane?,
                     new OMS(Pid2),
                     //NormalVector,
@@ -1017,7 +1017,7 @@ public override MMTDeclaration MakeMMTDeclaration()
                         //"Vector"
                         new OMS(MMT_OMS_URI.Tuple),
                         //normalArgs,
-                        new List<SOMDoc> {
+                        new[]  {
                             new OMF(normal.x),
                             new OMF(normal.y),
                             new OMF(normal.z)
@@ -1152,10 +1152,10 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc tp =
             new OMA(
                 new OMS(MMT_OMS_URI.Ded),
-                new List<SOMDoc> {
+                new[] {
                     new OMA(
                         new OMS(MMT_OMS_URI.OnCircle),
-                        new List<SOMDoc> {
+                        new[] {
                             new OMS(Cid),
                             new OMS(Pid),
         }),});
@@ -1290,7 +1290,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.AnglePlaneLine),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Cid1),
                     new OMS(Rid2),
                 }
@@ -1398,7 +1398,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.RadiusCircleMetric),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Cid1),
                 }
             );
@@ -1501,7 +1501,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.AreaCircle),
-                new List<SOMDoc> {
+                new[] {
                     new OMS(Cid1),
                 }
             );
@@ -1628,9 +1628,9 @@ public override MMTDeclaration MakeMMTDeclaration()
             new OMA(
                 new OMS(MMT_OMS_URI.VolumeCone),
 
-                new List<SOMDoc> {
+                new[] {
                     new OMA(new OMS(MMT_OMS_URI.ConeOfCircleApex),
-                        new List<SOMDoc> {
+                        new[]  {
                             new OMS(Cid1),
                             new OMS(Pid1),
                          }
@@ -1762,10 +1762,10 @@ public override MMTDeclaration MakeMMTDeclaration()
     {
         SOMDoc tp = new OMA(
             new OMS(MMT_OMS_URI.Ded),
-            new List<SOMDoc>{
+            new[]{
                 new OMA(
                     new OMS(MMT_OMS_URI.OrthoCircleLine),
-                    new List<SOMDoc>{
+                    new[] {
                         new OMS(Cid1),
                         new OMS(Lid1),
                     }
@@ -1899,7 +1899,7 @@ public override MMTDeclaration MakeMMTDeclaration()
         SOMDoc lhs =
             new OMA(
                 new OMS(MMT_OMS_URI.TruncatedVolumeCone),
-                new List<SOMDoc> {
+                new SOMDoc[] {
                     new OMS(Cid1),
                     new OMS(Cid2),
                     new OMS(unequalCirclesProof),
@@ -2034,7 +2034,7 @@ public override MMTDeclaration MakeMMTDeclaration()
             new OMA(
                 new OMS(MMT_OMS_URI.CylinderVolume),
 
-                new List<SOMDoc> {
+                new SOMDoc[] {
                     new OMS(Cid1),
                     new OMS(Cid2),
                     new OMS(equalCirclesProof),
@@ -2149,10 +2149,10 @@ public override MMTDeclaration MakeMMTDeclaration()
     {
         SOMDoc tp = new OMA(
             new OMS(MMT_OMS_URI.Ded),
-            new List<SOMDoc> {
+            new[] {
                 new OMA(
                     new OMS(MMT_OMS_URI.EqualityCircles),
-                    new List<SOMDoc> {
+                    new[]  {
                         new OMS(Cid1),
                         new OMS(Cid2),
                     }
@@ -2266,9 +2266,9 @@ public override MMTDeclaration MakeMMTDeclaration()
     {
         SOMDoc tp = new OMA(
             new OMS(MMT_OMS_URI.Ded),
-            new List<SOMDoc> {
+            new[] {
                 new OMA(new OMS(MMT_OMS_URI.UnEqualityCircles),
-                new List<SOMDoc> {
+                new[]  {
                     new OMS(Cid1),
                     new OMS(Cid2),
         }),});
@@ -2369,7 +2369,7 @@ public static List<string> parseFactList(MMTDeclaration decl, out string typeURI
             if (next_element is not OMA current_element)
                 return ret;
 
-            switch (current_element.arguments.Count)
+            switch (current_element.arguments.Length)
             {
                 case 2:
                     if (current_element.arguments[1] is not OMS oMS)
@@ -2399,7 +2399,7 @@ public static List<T> parseFactList<T>(MMTDeclaration decl)
             if (next_element is not OMA current_element)
                 return ret;
 
-            switch (current_element.arguments.Count)
+            switch (current_element.arguments.Length)
             {
                 case 2:
                     ret.Add((current_element.arguments[1].GetLambdaExpression().Compile() as Func<T>)());
diff --git a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
index c2f55019..b395c82b 100644
--- a/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
+++ b/Assets/Scripts/InteractionEngine/FactHandling/Facts/FunctionFact.cs
@@ -263,6 +263,12 @@ protected AttachedPositionFunction(string fid, string[] funcids, string uri, Fac
         return new AttachedPositionFunction(default, default(string[]), fact.@ref.uri, StageStatic.stage.factState);
     }
 
+    public override MMTDeclaration MakeMMTDeclaration()
+    {
+        //SOMDoc[] defines  ??
+        //SOMDoc type = new OMS(MMT_OMS_URI.Tuple);
+        throw new NotImplementedException();
+    }
 
     public override bool HasDependentFacts
         => true;
@@ -287,9 +293,4 @@ protected override void RecalculateTransform()
     protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new, FactOrganizer organizer)
         // => new AttachedPositionFunction(old_to_new[this.fid], old_to_new[func_calls_list_id], organizer);
         => new AttachedPositionFunction(old_to_new[this.fid], this.func_calls_ids.Select(id => old_to_new[id]).ToArray(), organizer);
-
-    public override MMTDeclaration MakeMMTDeclaration()
-    {
-        throw new NotImplementedException();
-    }
 }
diff --git a/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs b/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs
index 836e8a73..a486787e 100644
--- a/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs
+++ b/Assets/Scripts/InteractionEngine/TBD/CanonBallCalculator.cs
@@ -57,30 +57,30 @@ SOMDoc BuildOMA_XVA()
             new OMBINDC("Acc", typeof(Vector3),
             new OMBINDC("t", "R",
                 new OMA(
-                new OMS(MMT_OMS_URI.Add),
-                new() {
+                    new OMS(MMT_OMS_URI.Add),
+                    new SOMDoc[] {
                         new OMV("Pos"),
                         new OMA(
                             new OMS(MMT_OMS_URI.Add),
-                            new() {
+                            new[] {
                                 new OMA(
                                     new OMS(MMT_OMS_URI.Multiply),
-                                    new() {
+                                    new[] {
                                         new OMV("Vel"),
                                         new OMV("t"),
                                     }
                                 ),
                                 new OMA(
                                     new OMS(MMT_OMS_URI.Multiply),
-                                    new() {
+                                    new SOMDoc[] {
                                         new OMF(0.5f),
                                         new OMA(
                                             new OMS(MMT_OMS_URI.Multiply),
-                                            new() {
+                                            new SOMDoc[] {
                                                 new OMV("Acc"),
                                                 new OMA(
                                                     new OMS(MMT_OMS_URI.Multiply),
-                                                    new() {
+                                                    new[] {
                                                         new OMV("t"),
                                                         new OMV("t"),
             }),}),}),}),})))));
@@ -91,10 +91,10 @@ SOMDoc BuildOMAPath(Vector3 Pos, Vector3 Vel)
             return new OMBINDC("t", "R",
                 new OMA(
                     new OMS(MMT_OMS_URI.MakeObjectArray),
-                    new() {
-                        SOMDoc.MakeUnityEngineVector3(Pos),
-                        SOMDoc.MakeUnityEngineVector3(Vel),
-                        SOMDoc.MakeUnityEngineVector3(Gravity),
+                    new SOMDoc[] {
+                        SOMDoc.MakeTupel(Pos),
+                        SOMDoc.MakeTupel(Vel),
+                        SOMDoc.MakeTupel(Gravity),
                         new OMV("t"),
                     }
             ));
diff --git a/Assets/Scripts/SOMDocManager.cs b/Assets/Scripts/SOMDocManager.cs
index a95fb543..81400f56 100644
--- a/Assets/Scripts/SOMDocManager.cs
+++ b/Assets/Scripts/SOMDocManager.cs
@@ -55,7 +55,7 @@ public static class MMT_OMS_URI
         public static readonly string AttachedPositionFunction = "0SET_IN_SOMDocManager!";
         public static readonly string FunctionCallFact = "1SET_IN_SOMDocManager!";
         public static readonly string FunctionFact = "2SET_IN_SOMDocManager!";
-            
+
         public static readonly string TestType = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?xcircleType3D";
 
         public static readonly string ListType = "http://gl.mathhub.info/MMT/LFX/Datatypes?ListSymbols?ListType";
@@ -195,9 +195,9 @@ public static class SOMDoctoLambdaExpression<T>
             { MMT_OMS_URI.SquareRoot,
                 MakeCos },
             { MMT_OMS_URI.Tuple,
-                MakeUnityEngineVector3 },
+                MakeTupel },
             { MMT_OMS_URI.MakeObjectArray,
-                MakeArray },
+                MakeObjArray },
             { "InstantList",
                 MakeInstantList },
             { MMT_OMS_URI.ListEnd,
@@ -334,7 +334,7 @@ void ThrowArgumentException(ExpressionType expression_cast, int expected)
             ParameterExpression[] lambda_params =
                 lambda_applicant
                 .SelectMany(l => l.Parameters)
-                .ToArray(); //PERF: .ToList().Sort() => .BinarySearch;
+                .ToArray(); //PERF: .ToList().Sort() => .BinarySearch; //Too much overhead?
             ParameterExpression[] found_bound_params =
                 bound_params
                 .Where(p => lambda_params.Contains(p))
@@ -379,33 +379,36 @@ private static LambdaExpression ParseFuncUUToExpression<U>(Func<U, U> func)
 
         private static LambdaExpression MakeSin(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
             => ExpresionFuncToLambda(
-                    default(T) switch // TODO? cleaner switch
-                    {
-                        float => ParseFuncUUToExpression<float>(MathF.Sin),
-                        double => ParseFuncUUToExpression<double>(Math.Sin),
-                        _ => throw new NotImplementedException("Sinus for " + nameof(T) + "=" + typeof(T))
-                    },
-                    "Sin", lambda_applicant, bound_params, 1
+                      lambda_applicant[0].ReturnType == typeof(float) ? ParseFuncUUToExpression<float>(MathF.Sin)
+                    : lambda_applicant[0].ReturnType == typeof(double) ? ParseFuncUUToExpression<double>(Math.Sin)
+                    : throw new NotImplementedException("Sinus for " + lambda_applicant[0].ReturnType),
+
+                    "Sin", lambda_arguments.Length > 0 ? lambda_arguments : lambda_applicant, bound_params, 1
                 );
 
         private static LambdaExpression MakeCos(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
             => ExpresionFuncToLambda(
-                    default(T) switch // TODO? cleaner switch
-                    {
-                        float => ParseFuncUUToExpression<float>(MathF.Cos),
-                        double => ParseFuncUUToExpression<double>(Math.Cos),
-                        _ => throw new NotImplementedException("Cosinus for " + nameof(T) + "=" + typeof(T))
-                    },
-                    "Cos", lambda_applicant, bound_params, 1
-                );
+                      lambda_applicant[0].ReturnType == typeof(float) ? ParseFuncUUToExpression<float>(MathF.Cos)
+                    : lambda_applicant[0].ReturnType == typeof(double) ? ParseFuncUUToExpression<double>(Math.Cos)
+                    : throw new NotImplementedException("Cosinus for " + lambda_applicant[0].ReturnType),
 
-        private static LambdaExpression MakeUnityEngineVector3(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
-            => ExpresionFuncToLambda(
-                    (Expression<Func<float, float, float, Vector3>>)((x, y, z) => new Vector3(x, y, z)),
-                    "UnityEngineVector3", lambda_applicant, bound_params, 3
+                    "Cos", lambda_arguments.Length > 0 ? lambda_arguments : lambda_applicant, bound_params, 1
                 );
 
-        private static LambdaExpression MakeArray(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
+        private static LambdaExpression MakeTupel(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
+        {
+            if (lambda_applicant.Length == 3
+             && lambda_applicant.All(l => l.ReturnType == typeof(float)))
+
+                return ExpresionFuncToLambda(
+                         (Expression<Func<float, float, float, Vector3>>)((x, y, z) => new Vector3(x, y, z)),
+                         "UnityEngineVector3", lambda_applicant, bound_params, 3
+                     );
+
+            return MakeObjArray(lambda_applicant, lambda_arguments, bound_params);
+        }
+
+        private static LambdaExpression MakeObjArray(LambdaExpression[] lambda_applicant, LambdaExpression[] lambda_arguments, ParameterExpression[] bound_params)
             => Expression.Lambda(
                     Expression.NewArrayInit(
                         typeof(object),
@@ -526,14 +529,17 @@ public LambdaExpression GetLambdaExpression()
         public abstract SOMDoc MapURIs(Dictionary<string, string> old_to_new);
 
         #region MakeMMT_OMS_URItoSOMDoc
-        public static OMA MakeUnityEngineVector3(Vector3 vec)
-            => new OMA(
-                new OMS(MMT_OMS_URI.Tuple),
-                    new() {
+        public static OMA MakeTupel(Vector3 vec)
+            => MakeTupel(new[] {
                         new OMF(vec.x),
                         new OMF(vec.y),
                         new OMF(vec.z),
-                    }
+                });
+
+        public static OMA MakeTupel(SOMDoc[] args)
+            => new(
+                    new OMS(MMT_OMS_URI.Tuple),
+                    args
                 );
 
         public static OMA MakeList(string[] lids, Type type)
@@ -541,15 +547,20 @@ public static OMA MakeList(string[] lids, Type type)
 
         public static OMA MakeList(string[] lids, string typeURI)
         {
-            List<SOMDoc> end_of_list = new() {
+            SOMDoc[] end_of_list = new SOMDoc[] {
                 new OMA(
                     new OMS(MMT_OMS_URI.ListEnd),
-                    new() {
+                    new[] {
                         new OMS(typeURI),
-            }),};
+                    }
+                ),
+                lids.Length == 0
+                    ? null
+                    : new OMS(lids[^1])
+            };
 
-            if (lids.Length > 0)
-                end_of_list.Add(new OMS(lids[^1]));
+            if (lids.Length == 0)
+                end_of_list = end_of_list[..^1];
 
             SOMDoc defines = new OMA(
                 new OMS(MMT_OMS_URI.ListLiteral),
@@ -560,7 +571,7 @@ public static OMA MakeList(string[] lids, string typeURI)
             {
                 defines = new OMA(
                     new OMS(MMT_OMS_URI.ListLiteral),
-                    new() {
+                    new[] {
                         defines,
                         new OMS(lids[i]),
                 });
@@ -568,10 +579,10 @@ public static OMA MakeList(string[] lids, string typeURI)
 
             SOMDoc type = new OMA(
                 new OMS(MMT_OMS_URI.ListType),
-                new() { new OMS(typeURI), }
+                new[] { new OMS(typeURI), }
             );
 
-            return new OMA(type, new() { defines });
+            return new OMA(type, new[] { defines });
         }
         #endregion MakeMMT_OMS_URItoSOMDoc
     }
@@ -651,10 +662,10 @@ public class OMA : SOMDocCRTP<OMA>
         public new string kind = "OMA";
 
         public SOMDoc applicant;
-        public List<SOMDoc> arguments;
+        public SOMDoc[] arguments;
 
         [JsonConstructor]
-        public OMA(SOMDoc applicant, List<SOMDoc> arguments) : base()
+        public OMA(SOMDoc applicant, SOMDoc[] arguments) : base()
         {
             this.applicant = applicant;
             this.arguments = arguments;
@@ -679,11 +690,11 @@ public override string ToString()
         public override OMA MapURIsWrapped(Dictionary<string, string> old_to_new)
             => new OMA(
                 applicant.MapURIs(old_to_new),
-                arguments.Select(arg => arg.MapURIs(old_to_new)).ToList()
+                arguments.Select(arg => arg.MapURIs(old_to_new)).ToArray()
             );
     }
 
-    public class OMS : SOMDocCRTP<OMS> //OMSTR?
+    public class OMS : SOMDocCRTP<OMS>
     {
         public new string kind = "OMS";
 
-- 
GitLab