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)); }
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)); }
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)); }
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)); }
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)); }