Verification 合金映射关系
我几乎开始研究合金来做一些验证。我正在努力练习如何使编程语言具有简单的结构 映射实体具有程序和依赖关系 程序有多种功能 函数有代码行 依赖关系是一个实体,它将程序中某个函数中的两行代码相互映射 下面是我试图做的,但输出图显示了一行代码,它链接到依赖元组,但与函数不匹配。我需要所有的代码行都在一个函数中,它们可以在依赖项中,也可以不在依赖项中Verification 合金映射关系,verification,alloy,Verification,Alloy,我几乎开始研究合金来做一些验证。我正在努力练习如何使编程语言具有简单的结构 映射实体具有程序和依赖关系 程序有多种功能 函数有代码行 依赖关系是一个实体,它将程序中某个函数中的两行代码相互映射 下面是我试图做的,但输出图显示了一行代码,它链接到依赖元组,但与函数不匹配。我需要所有的代码行都在一个函数中,它们可以在依赖项中,也可以不在依赖项中 abstract sig mapping{} sig Dependency extends mapping {dep0,dep1: one line}
abstract sig mapping{}
sig Dependency extends mapping {dep0,dep1: one line}
one sig Program extends mapping{ F: some function, D: some Dependency }
//mapping entity is composed of Dependency pairs 2 lines of code
//and one program which has functions and dependency pairs
sig function { Line : some line}
//Function is made of line of code
abstract sig line{}
run {}
您应该添加一些事实,这些事实将强制您为模型考虑的约束 例如,为了确保每一行都有相应的函数,您可以编写如下代码
fact LinesBelongToFunctions {
all ln: line |
one f: function |
ln in f.Line
}
这一事实表明,对于每一行
ln
而言,只有一个函数f
,因此f.Lines
包含行ln您应该添加一些事实,以强制执行您为模型考虑的约束
例如,为了确保每一行都有相应的函数,您可以编写如下代码
fact LinesBelongToFunctions {
all ln: line |
one f: function |
ln in f.Line
}
这一事实表明,对于每一行ln
而言,只有一个函数f
,因此f.Lines
包含行ln