public RefinementProofGenerator(Program i_prog, ModuleDefinition i_mProof, Resolver.ModuleBindings i_bindings) { prog = i_prog; mProof = i_mProof; bindings = i_bindings; mLow = null; mHigh = null; strategy = null; }
private bool GetLevelsAndStrategy() { foreach (var d in mProof.TopLevelDecls) { if (d is RefinementParametersDecl) { var refinement = (RefinementParametersDecl)d; if (mLow != null || mHigh != null) { AH.PrintError(prog, $"More than one 'refinement' declaration found in proof module {mProof.Name}"); return(false); } if (!LookupLevel(refinement.LowLevel, "low-level", out mLow)) { return(false); } if (!LookupLevel(refinement.HighLevel, "high-level", out mHigh)) { return(false); } } else if (d is StrategyDecl) { if (strategy != null) { AH.PrintError(prog, $"More than one strategy found in proof module {mProof.Name}"); return(false); } strategy = (StrategyDecl)d; } } if (mLow == null || mHigh == null) { AH.PrintError(prog, $"No 'refinement' declaration found in proof module {mProof.Name}"); return(false); } if (strategy == null) { AH.PrintError(prog, $"No strategy given in proof module {mProof.Name}"); return(false); } symbolsLow = mLow.ModuleDef.ArmadaSymbols; symbolsHigh = mHigh.ModuleDef.ArmadaSymbols; return(true); }