我正在阅读an article that uses Alloy to model some safety and security requirements for aircraft avionics。我正在努力理解文章中显示的“事实限制”之一。
数据流入系统。数据由系统使用。该模型声明了一组数据,一组系统和一个consumeBy关系(数据由系统消耗):
sig Data {
consumedBy: some System
}
sig System {}
然后,模型声明了一组“临界值”。关系将关键性映射到数据。另一个关系将关键性映射到系统:
sig Criticality {
concernedData: one Data,
concernedSystem: one System
}
接下来,该模型表达了两个事实。这是我正在努力的第二个事实。
第一个事实是每个系统消耗至少一个数据:
all s: System | some consumedBy.s
文章对第二个事实有这样的评论:
// for any system which consumes a given datum,
// the said datum and system should belong to
// a same unique criticality
我认为评论是这样说的:如果系统消耗了一个数据,那么数据和系统必须具有相同的关键性。例如,如果数据D1由系统S1消耗,而数据D1具有临界值C1,则系统S1也必须具有临界值C1。你同意对评论的解释吗?
现在,以下是合金中表达的事实:
all d: Data | all s: System | one c: Criticality |
c.concernedData = d and c.concernedSystem = s
我对如何阅读这个事实的理解是这样的:
The following constraint holds for exactly one c in Criticality:
For every d in Data and every s in System:
c.concernedData = d and c.concernedSystem = s
这是对这个事实的正确理解吗?如果是这样,我认为事实并不像评论中的描述那样表达。
所以我的问题是这些:
一:评论说:
// for any system which consumes a given datum,
// the said datum and system should belong to
// a same unique criticality
以下Alloy事实是否表达与评论相同的内容?
all d: Data | all s: System | one c: Criticality |
c.concernedData = d and c.concernedSystem = s
二:如果评论和Alloy事实不一样,那么在Alloy中表达评论的正确方法是什么?
答案 0 :(得分:3)
这是一个Alloy模型,将纸张的事实版本与我认为可以捕捉到你想要表达的内容进行比较:
import numpy as np
from scipy.integrate import *
from scipy.optimize import *
def function(a):
return(quad(lambda t: ((np.cos(a[0]))*(np.sin(a[1]))*t),0,3))
如果执行此操作,则会得到以下反例,显示两者之间的差异:
简而言之,纸质版本说两者都只有一个共同点;你的版本说基准和系统都与一个关键性相关联,并且它是相同的(更强)。
我不知道在这种情况下哪个是正确的。
" one"量词,虽然有一个非常简单的语义("一个x:S | P"意味着P对于集合S中的一个x是真的)可能会令人困惑,因为我们如何试图读取量词自然语言。在第73页的软件抽象第3章的常见问题解答中有半页的讨论。