Alloyapi解集
Alloy api solution set
我有一个用 Alloy 编写的简单模型:
module login
sig Email {}
sig Password {}
sig User {
login: one Login
}
sig Login {
email: one Email,
password: one Password,
owner: one User,
}
fact {
all u:User | u.login.owner = u
}
assert a {
all l:Login | one l.owner
all u:User | one u.login.email
all u:User | u.login.owner = u
}
check a for 3
如果我 运行 使用 alloy 分析器 GUI,它说:
No counterexample found. Assertion may be valid. 11ms.
但是如果我 运行 与我的 java 中的 API 相同的模型编程它 returns:
---OUTCOME---
Unsatisfiable.
甚至没有显示 1 个解决方案。
任何人都可以帮我检测问题吗?
java 中的代码使用 API:
A4Reporter rep = new A4Reporter();
try {
Module loaded_model = CompUtil.parseEverything_fromFile(rep, null, model.getModelpath());
A4Options options = new A4Options();
options.solver = A4Options.SatSolver.SAT4J;
Command cmd = loaded_model.getAllCommands().get(0);
A4Solution sol = TranslateAlloyToKodkod.execute_command(rep, loaded_model.getAllReachableSigs(), cmd, options);
System.out.println(sol.toString());
while (sol.satisfiable()) {
System.out.println("[Solution]:");
System.out.println(sol.toString());
sol = sol.next();
}
} catch (Err e){
e.printStackTrace();
}
谢谢
两种情况都没有找到反例。
注意方法调用loaded_model.getAllCommands().get(0)
得到的命令是check a for 3
,也就是说你问Alloy找反例
如果您想获得一个满足您的约束的实例 - 即不是反例 - 您应该使用包含关键字 run
而不是 check
.[=14= 的命令]
我有一个用 Alloy 编写的简单模型:
module login
sig Email {}
sig Password {}
sig User {
login: one Login
}
sig Login {
email: one Email,
password: one Password,
owner: one User,
}
fact {
all u:User | u.login.owner = u
}
assert a {
all l:Login | one l.owner
all u:User | one u.login.email
all u:User | u.login.owner = u
}
check a for 3
如果我 运行 使用 alloy 分析器 GUI,它说:
No counterexample found. Assertion may be valid. 11ms.
但是如果我 运行 与我的 java 中的 API 相同的模型编程它 returns:
---OUTCOME---
Unsatisfiable.
甚至没有显示 1 个解决方案。
任何人都可以帮我检测问题吗?
java 中的代码使用 API:
A4Reporter rep = new A4Reporter();
try {
Module loaded_model = CompUtil.parseEverything_fromFile(rep, null, model.getModelpath());
A4Options options = new A4Options();
options.solver = A4Options.SatSolver.SAT4J;
Command cmd = loaded_model.getAllCommands().get(0);
A4Solution sol = TranslateAlloyToKodkod.execute_command(rep, loaded_model.getAllReachableSigs(), cmd, options);
System.out.println(sol.toString());
while (sol.satisfiable()) {
System.out.println("[Solution]:");
System.out.println(sol.toString());
sol = sol.next();
}
} catch (Err e){
e.printStackTrace();
}
谢谢
两种情况都没有找到反例。
注意方法调用loaded_model.getAllCommands().get(0)
得到的命令是check a for 3
,也就是说你问Alloy找反例
如果您想获得一个满足您的约束的实例 - 即不是反例 - 您应该使用包含关键字 run
而不是 check
.[=14= 的命令]