如何评估Alloy源代码中的谓词?

时间:2014-03-10 17:13:47

标签: alloy

我的Alloy模型中有一个名为LS的谓词,它获取一个名为st的sig的实例。我试图在源代码中的st实例(称为st $ 0)上评估此谓词。我可以找到A4Solution类型的解决方案,称为ans。但我不知道如何根据这个解决方案评估这个谓词。

1 个答案:

答案 0 :(得分:1)

以下是使用API​​

进行一般评估谓词的方法
String fileName = "<file path to your alloy model>";
Module world = CompUtil.parseEverything_fromFile(rep, null, fileName);
A4Options opt = new A4Options();
opt.solver = A4Options.SatSolver.SAT4J;

// run the first command for the sake of this example
Command cmd = world.getAllCommands().get(0);
A4Solution sol = TranslateAlloyToKodkod.execute_command(rep, world.getAllReachableSigs(), cmd, opt);

// evaluate the first defined function/predicate applied to the first defined Sig
Func func = world.getAllFunc().get(0);
Sig sig = world.getAllSigs().get(0);
System.out.println(sol.eval(func.call(sig)));