alloy - 排序谓词不可满足
问题描述
ff_next
关于这个合金模型的排序谓词的第一个分支,我似乎有些不明白。
open util/ordering[Exposure]
open util/ordering[Tile]
open util/ordering[Point]
sig Exposure {}
sig Tile {}
sig Point {
ex: one Exposure,
tl: one Tile
} fact {
// Uncommenting the line below makes the model unsatisfiable
// Point.ex = Exposure
Point.tl = Tile
}
pred ff_next[p, p': Point] {
(p.tl = last) => (p'.ex = next[p.ex] and p'.tl = first)
else (p'.ex = p.ex and p'.tl = next[p.tl])
}
fact ff_ordering {
first.ex = first
first.tl = first
all p: Point - last | ff_next[p, next[p]]
}
run {}
这里的直觉是我有很多次曝光,每一次我都想在多个图块位置执行。考虑制作全景图像,然后将它们拼接在一起,但使用不同的相机设置多次执行此操作。
注释掉注释行后,我得到的第一个实例是:
这相当于在一张曝光的情况下通过全景图,然后将其他曝光放在地板上。
这个问题似乎是 in 之后的第一个分支=>
,ff_next
但我不明白出了什么问题。该分支永远不会满足,它将移动到下一次曝光和全景图的开始。如果我取消注释该行Point.ex = Exposure
,模型将变得无法满足,因为它需要该分支。
关于为什么该分支不能满足的任何帮助?
解决方案
看起来您试图表达“在我们移动到下一次曝光之前,每个图块都必须对应于当前曝光的点。” 问题是一个主要的陷阱ordering
:它强制签名准确。如果你写
run {} for 6 but 3 Tile, 2 Exposure
然后按预期工作。时只有模型#Point = #Exposure * #Tile
。ordering
如果这对您来说是个问题,您可以编写自己的简化版本。
推荐阅读
- gradle - 使用 bnd 将 jar 目录包含到 bundle 中
- wagtail - RichText 预览或摘要内容
- sql - 将 Inf、NAN 和 -Inf 插入 sqlite3 数据库的 SQL 命令
- ios - 计划的通知在 iOS Flutter 上不起作用
- java - Midi 设备检索按下的音符
- c# - ASP.NETCORE 在 ConfigureServices 中使用功能标志
- jquery - 仅在按下输入键后刷新jquery自动完成源
- google-maps - 我想添加一个随机的地图活动位置,我该怎么做?
- flutter - LimitedBox 与 ConstrainedBox 中的 ListView
- neural-network - RuntimeError:给定组 = 1,大小为 [32、1、5、5] 的权重,预期输入 [256、3、256、256] 有 1 个通道,但有 3 个通道