当前位置:  技术问答>linux和unix

请教CSP,FDR2高手

    来源: 互联网  发布时间:2016-06-29

    本文导语:  近期有个作业,是要求用CSP描述一个病人去医院看病的流程,然后用FDR检验是否通过。具体流程是病人先去一个叫MEDIBANK的中介,预约用自己的pid换一个临时的t_pid号同时MEDIBANK也会把这个号给医院预约,然后病人用这...

近期有个作业,是要求用CSP描述一个病人去医院看病的流程,然后用FDR检验是否通过。具体流程是病人先去一个叫MEDIBANK的中介,预约用自己的pid换一个临时的t_pid号同时MEDIBANK也会把这个号给医院预约,然后病人用这个号去医院,医院检查这个号可用以后,给病人一个初步诊断结果first_result,然后过段时间,再给病人一个最终结果final_result。因为网上找了很久都没有详细的FDR使用手册或者帮助,所以只能摸索参照例子写代码,以下是全部代码,运行后有错误,Debug里面显示MEDIBANK并没有发送t_pid给医院预约,不知道到底错在哪里了,特请教高手帮忙看看代码。以下是FDR2的本过程代码:

-- First, the set of values to be communicated
datatype Datum = pid | pid_error | t_pid | t_pid_error | first_result | final_result


-- define all communication channels
-- p is patient, m is medibank and h is hospital
--channel poutm, minp : Datum
channel poutm, pinm, pouth, pinh, moutp, minp, mouth, minh, houtp, hinp, houtm, hinm : Datum

--for patient modelling
PATIENT = poutm ! pid -> PID_SEND
PID_SEND = [] x: Datum @ (pinm ? x -> if (x == t_pid) then GET_T_PID
  else if (x == pid_error) then STOP
  else PID_SEND)

GET_T_PID = pouth ! t_pid -> pinh ? x -> if (x == first_result) then GET_FIRST_RESULT
   else if (x == t_pid_error) then STOP
   else GET_T_PID

GET_FIRST_RESULT = pinm ? final_result -> SKIP

--for medibank
MEDIBANK = minp ? x -> if (x == pid) then GET_PID
       else MEDIBANK

GET_PID = PID_OK |~| PID_NOK
PID_OK = moutp ! t_pid -> T_PID_GENN
PID_NOK = moutp ! pid_error -> STOP
T_PID_GENN = mouth ! t_pid -> T_PID_GEN


T_PID_GEN = minh ? final_result -> ENCAPSULATION

ENCAPSULATION = moutp ! final_result -> SKIP

--for hospital
HOSPITAL = hinm ? x -> if (x == t_pid) then CHECK_T_PID
       else HOSPITAL

CHECK_T_PID = hinp ? x -> if (x == t_pid) then CHECK_T_PIDD
          else CHECK_T_PID

--CHECK_T_PIDD = T_PID_OK |~| T_PID_NOK
CHECK_T_PIDD = SENT_FIRST_RESULT |~| T_PID_NOK
--T_PID_OK = houtp ! t_pid -> SENT_FIRST_RESULT
T_PID_NOK = houtp ! t_pid_error -> STOP

SENT_FIRST_RESULT = houtp ! first_result -> GEN_FINAL_RESULT

GEN_FINAL_RESULT = houtm ! final_result -> SKIP

--process modelling
--first is six communication channels between patient&medibank, patient&hospital, medibank&hospital
--communication from patient to medibank
COMMpm = [] x : Datum @ (poutm ? x -> (minp ! x -> COMMpm))

--communication from medibank to patient
COMMmp = [] x : Datum @ (moutp ? x -> (pinm ! x -> COMMmp))

--communication from patient to hospital
COMMph = [] x : Datum @ (pouth ? x -> (hinp ! x -> COMMph))

--communication from hospital to patient
COMMhp = [] x : Datum @ (houtp ? x -> (pinh ! x -> COMMhp))

--communication from medibank to hospital
COMMmh = [] x : Datum @ (mouth ? x -> (hinm ! x -> COMMmh))

--communication from hospital to medibank
COMMhm = [] x : Datum @ (houtm ? x -> (minh ! x -> COMMhm))

--combine all communication channel
COMM = (((((COMMpm [|{}|] COMMmp) [|{}|] COMMph) [|{}|] COMMhp) [|{}|] COMMmh) [|{}|] COMMhm)
PIO = {|poutm, pinm, pouth, pinh|}
MIO = {|moutp, minp, mouth, minh|}
HIO = {|houtm, hinm, houtp, hinp|}
COMMIO = union(PIO, union(MIO, HIO))

--put all elements together into SYSTEM and verify them
SYSTEM = (((PATIENT [|{}|] MEDIBANK) [|{}|] HOSPITAL) [|COMMIO|] COMM)  diff(COMMIO, {poutm.pid, pouth.t_pid})  

-- The specification is a patient with pid finally get his final result
SPEC = poutm ! pid -> pinm ? t_pid -> pouth ! t_pid -> pinh ? first_result -> pinm ? final_result -> SPEC

assert SPEC [FD= SYSTEM

|
system执行的动作列(poutm.pid,pouth.t_pid)在spec中无法执行

|
不懂,帮顶

    
 
 

您可能感兴趣的文章:

  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 请教高手:如何用gnome/gtk编写托盘程序
  • 请教各位高手一个简单的问题:在JAVA 中如何才能取得一些系统信息?
  • 请教curses的高手
  • #######菜鸟问题,请教高手,一定给分########
  • 如何在Linux上使用LoadLibrary()?高手请教!
  • 请教:Java高手读书之路
  • 请教高手:cpu占用经常100%怎么解决?
  • linux起不来了,请教高手,谢谢
  • 关于courier邮件服务器的配置问题,请教高手
  • 我的REDHAT 9。0刚装好,显卡不能正常显示,请教各位高手
  • 请教高手,如何将磁盘阵列mount上去??
  • 请教高手,关于vmware中linux的鼠标的问题
  • 请教高手在QT下怎样收串口数据
  • 我的REDHAT 9。0刚装好,显卡不能正常显示,请教各位高手 iis7站长之家
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 请教solaris高手一个solaris安装问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题
  • 请教unix常用命令命令问题
  • 请教两个shell
  • 菜鸟请教Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3