繁体   English   中英

碳氢化合物合金模型

[英]alloy model for hydrocarbons

我需要使用合金模拟碳氢化合物结构基本上我需要设计烷烃,烯烃和炔烃基团我已经创建了以下签名(烯烃示例)

sig Hydrogen{}
sig Carbon{}
sig alkenegrp{
    c:one Carbon,
    h:set Hydrogen,
    doublebond:lone alkenegrp
}
sig alkene{
    unit : set alkenegrp
}
fact{
    all a:alkenegrp|a not in a.doublebond.*doublebond
    all a:alkenegrp|#a.h=mul[#(a.c),2]
}
pred show_alkene{
    #alkene>1
}
run show_alkene

这可以从烯烃开始,但是当我尝试通过改变像所有的事实来设计相同的烷烃或炔烃时:alkynegrp |#ah = minus [mul [#(ac),2],2]它不起作用。 任何人都可以建议我如何实现它?

我的问题陈述是在有机化学中,饱和烃是完全由单键组成并且被氢饱和的有机化合物。 饱和烃的通式为C n H 2n + 2 (假设为非环状结构)。 也称为烷烃。 不饱和烃在碳原子之间具有一个或多个双键或三键。 具有双键的那些被称为烯烃。 具有一个双键的那些具有式C n H 2n (假设非环状结构)。 含有三键的那些被称为炔烃,通式C n H 2n-2 模拟碳氢化合物并给出谓词以生成烷烃,烯烃和炔烃的实例。 我们尝试过:

sig Hydrogen{}
sig Carbon{}

sig alkane{
c:one Carbon,
h:set Hydrogen,
n:lone alkane
}

fact{
//(#h)=add [mul[(#c),2],2]
//all a:alkane|a not in a.*n
all a:alkane|#a.h=mul[#(a.c),2]
}
pred show_alkane(){}

run show_alkan

Ë

烷烃的通式是C n H 2n + 2 ,对于乘法,我们可以使用mul内置函数但是我们不能写添加因为我们必须做C n H 2n + 2.我们应该写什么它可以用于烷烃

我现在对烷烃,烯烃和炔烃的了解要好一些,但我仍然不明白为什么你认为你的Alloy模型不起作用。

要表达C n H 2n-2约束,您当然可以写出您的建议

all a:alkynegrp |
   #a.h = minus[mul[#(a.c), 2], 2]

问题只是在你的alkane信号声明中你说c: one Carbon ,它将碳原子的数量精确地固定为1,所以minus[mul[#(ac), 2], 2]总是会准确地评估为0.我假设您想要合成任意数量的碳(因为C n )所以您应该将其从c: one Carbon更改为c: set Carbon 如果然后运行show_alkane谓词,则应该得到一些实例,其中碳的数量大于1,因此氢的数量大于0。

此外,对于烷烃配方

all a:alkynegrp |
   #a.h = plus[mul[#(a.c), 2], 2]

3的默认范围是不够的,因为当ac非空时你将需要至少4个氢原子,但你可以通过明确给出范围来解决这个问题

run show_alkane for 8

如果这不是您所讨论的问题,请更具体地说明为什么您认为“它不起作用”,即您期望Alloy做什么以及Alloy实际上做了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM