用于TLA的Jupyter内核

tlaplus-jupyter的Python项目详细描述


Build statusBuild StatusBinder

特拉普卢斯朱庇特

用于TLA+和Pluscal规范语言的Jupyter内核。在

  • 基于官方lexer的语法高亮显示。在
  • 表达式的REPL功能。在
  • 可以用活页夹在线执行。Try it now!
  • 不需要安装TLA工具箱:Java和Python就足够了。在

Screenshot 2019-11-11 at 23 58 17

安装

tlaplus_jupyter是一个可以与pip一起安装的python包。支持Python2和3。要安装运行:

pip install tlaplus_jupyter
python -m tlaplus_jupyter.install

最后一步将在系统中注册tlaplus_jupyter作为Jupyter内核,并下载tla2tools.jar。之后,Jupyter可以像往常一样启动:

^{pr2}$

要创建一个新的TLA+笔记本,请单击New按钮,并在下拉菜单中选择TLA+。在单元格内启用行号也很方便(查看>切换行号),因为语法检查器通过行号来指出问题。在

使用

基本用法在intro notebook中解释。在

tlaplus_jupyter支持执行时具有不同行为的多种类型的单元:

  1. 具有full module definition的单元格。执行时,内核将执行语法检查(使用tla2三一三一)并报告错误。如果模块包含Pluscal程序内核也会将其转换为TLA。在

  2. %tlc:ModuleName开头的单元格,其中ModuleName是先前执行的模块之一的名称。在本例中,单元被视为TLC模型检查器的配置文件。例如,要检查模型Spec的规范Spec和不变量TypeOk,请执行以下操作:

    %tlc:DieHardTLA
    SPECIFICATION Spec
    INVARIANT TypeOK
    

    Init和next state公式可以设置在关键字INITNEXT之后。常量定义应该跟在CONSTANTS关键字后面,用换行符或逗号分隔。可能的配置语句和语法的描述在Specifying systems书的第14章中给出。在

    可以在TLC名称后指定模块名称:

    %tlc:DieHardTLA -deadlock
    SPECIFICATION Spec
    

    TLC评估在所有已定义模块的上下文中进行。所以,如果模型引用另一个模型,那么另一个模型也应该在某个单元格中。在

  3. 不包含%-magic或模块定义的单元格被视为常量表达式,并将在执行时打印其结果。与^{一样,求值发生在所有已定义模块的上下文中,因此表达式可以引用已计算模块中定义的任何内容。在

  4. 命令%log/%log on/%log off对应显示当前打开的笔记本的内核日志/启用日志记录/禁用日志记录。在

与Binder共享可执行模型

通过将Dockerfile复制到存储库根目录,可以很容易地使Github上共享的TLA+模型可运行。之后,可以在Binder使用指向此类回购的URL来启动一个动态TLA+环境。在

相关项目

vscode-tlaplus用于VSCode编辑器的酷插件,具有语法突出显示和用于显示跟踪的自定义小部件。在

许可证

BSD

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java动态地将圆添加到Arraylist   什么是好的“错误检查”模式(Java)?   java是我们可以在应用程序中使用的云服务,它需要存储最大大小为5MB的小文件   JavaGooglePhotosAPI是静态内容上传项目的永久url   java AES密钥存储   java文件正在下载,但没有任何内容   每次循环迭代和threadsleep的java日志记录都是不好的做法?   java不会切换到另一个。单击submit时使用jsp。春季mvc   java我很难从我的maclaurin系列中获得sin x的准确输出   java使用类似的<Object>?   需要java Hibernate映射吗?   java如何在https和客户端证书请求后面生成web服务代理   java如何通过注释有条件地使用自定义JsonSerializer   java如何在html页面和Restful WebResource方法之间实现JaxB?   读取文件Libgdx Android时发生java错误   java如何在处理主活动之前从另一个方法中获取值?   java在一个SQLquery中使用多个语句,还是使用批处理?