public ActionSet(ComprehensionData comprData) { Contract.Requires(comprData != null); AST = Factory.Instance.ToAST(comprData.Node); Index = comprData.Owner.Index; myComprData = comprData; TypeEnvironment = comprData.Owner.TypeEnvironment.AddChild(comprData.Node); IsCompiled = LiftedBool.Unknown; }
public ActionSet(AST <Node> ast, TermIndex index) { Contract.Requires(index != null && ast != null); Contract.Requires(ast.Node.NodeKind == NodeKind.Rule || ast.Node.NodeKind == NodeKind.ContractItem); //// TODO: Accept contract specifications too. AST = ast; Index = index; myComprData = null; TypeEnvironment = new TypeEnvironment(ast.Node, index); IsCompiled = LiftedBool.Unknown; }
internal Action( Node head, ConstraintSystem body, TypeEnvironment typeEnv, ComprehensionData comprData = null, Node configurationContext = null) { Head = head; Body = body; myComprData = comprData; this.configurationContext = configurationContext; typeEnvironment = typeEnv; theUnnSymbol = body.Index.SymbolTable.GetOpSymbol(ReservedOpKind.TypeUnn); theRngSymbol = body.Index.SymbolTable.GetOpSymbol(ReservedOpKind.Range); }
/// <summary> /// W.R.T. orientations, comprehension variables are simulated as an equality whose LHS can never orient /// the variables on the RHS. /// </summary> public ItemData(Term comprVar, ComprehensionData comprData) { ComponentId = NoComponentId; Item = comprVar; OrderId = NoOrderId; Kind = ItemKind.Compr; Variables = new Set <Term>(Term.Compare, comprData.ReadVars.Keys); Variables.Add(comprVar); //// A compr var is oriented if its reads are oriented, but a compr var //// cannot orient its reads. EqData = new OrientationData(); EqData.LHSVars.Add(comprVar); EqData.LHSOriented.Add(comprVar); foreach (var v in comprData.ReadVars.Keys) { EqData.RHSVars.Add(v); } }