Esempio n. 1
0
 static public double ExtractDouble(Microsoft.Formula.API.Generators.ICSharpTerm model)
 {
     if (model is SHSystem_Root.RealCnst)
     {
         var t = (SHSystem_Root.RealCnst)model;
         return((double)t.Value.Numerator / (double)t.Value.Denominator);
     }
     throw new Exception(String.Format("Expected real constant instead of {0}", model.Symbol));
 }
Esempio n. 2
0
 public BoolExprWithOverflow ExtractDiscreteBoolModel(Microsoft.Formula.API.Generators.ICSharpTerm model)
 {
     if (model is SHSystem_Root.C.EQ)
     {
         var t = (SHSystem_Root.C.EQ)model;
         return(ctx.MkFPEq(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.LE)
     {
         var t = (SHSystem_Root.C.LE)model;
         return(ctx.MkFPSLE(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.GE)
     {
         var t = (SHSystem_Root.C.GE)model;
         return(ctx.MkFPSGE(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.LT)
     {
         var t = (SHSystem_Root.C.LT)model;
         return(ctx.MkFPSLT(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.GT)
     {
         var t = (SHSystem_Root.C.GT)model;
         return(ctx.MkFPSGT(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Not)
     {
         var t = (SHSystem_Root.C.Not)model;
         var m = ExtractDiscreteBoolModel(t.arg1);
         return(new BoolExprWithOverflow(ctx.MkNot(m.bv), m.overflow, String.Format("not {0}", m.Expr)));
     }
     else if (model is SHSystem_Root.C.And)
     {
         var t    = (SHSystem_Root.C.And)model;
         var m1   = ExtractDiscreteBoolModel(t.arg1);
         var m2   = ExtractDiscreteBoolModel(t.arg2);
         var calc = ctx.MkAnd(m1.bv, m2.bv);
         return(new BoolExprWithOverflow(calc, ctx.MkOr(m1.overflow, m2.overflow), String.Format("{0} and {1}", m1.Expr, m2.Expr)));
     }
     else if (model is SHSystem_Root.C.Or)
     {
         var t    = (SHSystem_Root.C.Or)model;
         var m1   = ExtractDiscreteBoolModel(t.arg1);
         var m2   = ExtractDiscreteBoolModel(t.arg2);
         var calc = ctx.MkOr(m1.bv, m2.bv);
         return(new BoolExprWithOverflow(calc, ctx.MkOr(m1.overflow, m2.overflow), String.Format("{0} or {1}", m1.Expr, m2.Expr)));
     }
     throw new Exception(String.Format("Unsupported language element: {0}", model.Symbol));
 }
Esempio n. 3
0
 public BoolAST ExtractSafetyFormula(Microsoft.Formula.API.Generators.ICSharpTerm model)
 {
     if (model is SHSystem_Root.LE)
     {
         var t = (SHSystem_Root.LE)model;
         return(new LE(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.GE)
     {
         var t = (SHSystem_Root.GE)model;
         return(new GE(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.LT)
     {
         var t = (SHSystem_Root.LT)model;
         return(new LT(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.GT)
     {
         var t = (SHSystem_Root.GT)model;
         return(new GT(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.Not)
     {
         var t = (SHSystem_Root.Not)model;
         return(new NOT(ExtractSafetyFormula(t.arg1)));
     }
     else if (model is SHSystem_Root.And)
     {
         var t = (SHSystem_Root.And)model;
         return(new AND(ExtractSafetyFormula(t.arg1), ExtractSafetyFormula(t.arg2)));
     }
     else if (model is SHSystem_Root.Or)
     {
         var t = (SHSystem_Root.Or)model;
         return(new OR(ExtractSafetyFormula(t.arg1), ExtractSafetyFormula(t.arg2)));
     }
     throw new Exception(String.Format("Unsupported language element: {0}", model.Symbol));
 }
Esempio n. 4
0
 public FixedPointNumber ExtractDiscreteModel(Microsoft.Formula.API.Generators.ICSharpTerm model)
 {
     if (model is SHSystem_Root.C.Const)
     {
         var t = (SHSystem_Root.C.Const)model;
         return(ctx.MkFPscaled(ExtractInteger(t.value), (uint)ExtractInteger(t.bits), (uint)ExtractInteger(t.decimals)));
     }
     if (model is SHSystem_Root.C.RConst)
     {
         var t = (SHSystem_Root.C.RConst)model;
         return(ctx.MkFPfromReal(ExtractDouble(t.value), (uint)ExtractInteger(t.bits), (uint)ExtractInteger(t.decimals)));
     }
     else if (model is SHSystem_Root.C.Var)
     {
         var t    = (SHSystem_Root.C.Var)model;
         var name = (string)t.name.Symbol;
         var var  = ctx.MkFPConst(name, (uint)ExtractInteger(t.bits), (uint)ExtractInteger(t.decimals));
         if (!discreteVariablesByName.ContainsKey(name))
         {
             discreteVariablesByName.Add(name, var);
         }
         return(var);
     }
     else if (model is SHSystem_Root.C.Neg)
     {
         var t = (Domain.SHSystem_Root.C.Neg)model;
         return(ctx.MkFPNeg(ExtractDiscreteModel(t.arg1)));
     }
     else if (model is SHSystem_Root.C.Pre)
     {
         var              t    = (Domain.SHSystem_Root.C.Pre)model;
         string           name = ExtractPre(t);
         FixedPointNumber arg1 = ExtractDiscreteModel(t.arg1);
         var              var  = ctx.MkFPConst(name, arg1.bits, arg1.decimals);
         if (!discreteVariablesByName.ContainsKey(name))
         {
             assigns.Add(name, arg1);
             discreteVariablesByName.Add(name, var);
         }
         return(var);
     }
     else if (model is SHSystem_Root.C.Add)
     {
         var t = (Domain.SHSystem_Root.C.Add)model;
         return(ctx.MkFPAdd(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Sub)
     {
         var t = (Domain.SHSystem_Root.C.Sub)model;
         return(ctx.MkFPSub(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Mul)
     {
         var t = (Domain.SHSystem_Root.C.Mul)model;
         return(ctx.MkFPMul(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Div)
     {
         var t = (Domain.SHSystem_Root.C.Div)model;
         return(ctx.MkFPSDiv(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Min)
     {
         var t = (Domain.SHSystem_Root.C.Min)model;
         return(ctx.MkFPMin(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.Max)
     {
         var t = (Domain.SHSystem_Root.C.Max)model;
         return(ctx.MkFPMax(ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     else if (model is SHSystem_Root.C.ITE)
     {
         var t = (Domain.SHSystem_Root.C.ITE)model;
         return(ctx.MkFPITE(ExtractDiscreteBoolModel(t.test), ExtractDiscreteModel(t.arg1), ExtractDiscreteModel(t.arg2)));
     }
     throw new Exception(String.Format("Unsupported language element: {0}", model.Symbol));
 }
Esempio n. 5
0
 public AST ExtractContinuousModel(Microsoft.Formula.API.Generators.ICSharpTerm model)
 {
     if (model is SHSystem_Root.RealCnst)
     {
         var t = (SHSystem_Root.RealCnst)model;
         return(new REAL(ExtractDouble(t)));
     }
     else if (model is SHSystem_Root.O.Const)
     {
         var t = (SHSystem_Root.O.Const)model;
         return(new REAL(ExtractDouble(t.value)));
     }
     else if (model is SHSystem_Root.O.Var)
     {
         var t    = (SHSystem_Root.O.Var)model;
         var name = (string)t.name.Symbol;
         return(new VAR(name));
     }
     else if (model is SHSystem_Root.O.Neg)
     {
         var t = (Domain.SHSystem_Root.O.Neg)model;
         return(new NEG(ExtractContinuousModel(t.arg1)));
     }
     else if (model is SHSystem_Root.O.Sin)
     {
         var t = (Domain.SHSystem_Root.O.Sin)model;
         return(new SIN(ExtractContinuousModel(t.arg1)));
     }
     else if (model is SHSystem_Root.O.Cos)
     {
         var t = (Domain.SHSystem_Root.O.Cos)model;
         return(new COS(ExtractContinuousModel(t.arg1)));
     }
     else if (model is SHSystem_Root.O.Exp)
     {
         var t = (Domain.SHSystem_Root.O.Exp)model;
         return(new EXP(ExtractContinuousModel(t.arg1)));
     }
     else if (model is SHSystem_Root.O.Sqrt)
     {
         var t = (Domain.SHSystem_Root.O.Sqrt)model;
         return(new SQRT(ExtractContinuousModel(t.arg1)));
     }
     else if (model is SHSystem_Root.O.Pow)
     {
         var t = (Domain.SHSystem_Root.O.Pow)model;
         return(new POW(ExtractContinuousModel(t.arg1), ExtractInteger(t.k)));
     }
     else if (model is SHSystem_Root.O.Add)
     {
         var t = (Domain.SHSystem_Root.O.Add)model;
         return(new ADD(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.O.Sub)
     {
         var t = (Domain.SHSystem_Root.O.Sub)model;
         return(new SUB(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.O.Mul)
     {
         var t = (Domain.SHSystem_Root.O.Mul)model;
         return(new MUL(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     else if (model is SHSystem_Root.O.Div)
     {
         var t = (Domain.SHSystem_Root.O.Div)model;
         return(new DIV(ExtractContinuousModel(t.arg1), ExtractContinuousModel(t.arg2)));
     }
     throw new Exception(String.Format("Unsupported language element: {0}", model.Symbol));
 }