本章目录

  • 合约(contract)
  • 格式说明
  • 范例一
  • 范例二
  • 范例三
  • import一个contract的方法

合约(contract)

在进行Check的时候,会执行contract内的验证内容,验证代码逻辑是否有效

格式说明

  • contract格式:
    node 结点名 ( 输入变量 ) returns ( 输出变量 ) ;
    (*@contract
    \quad验证结点方法的方法
    *)
    let
    \quad结点方法
    tel

  • 验证结点方法的方法:可以定义var、const、assum、guarantee、mode或者import一个外部的contract

  • mode 格式:
    mode 名称 (
    \quadrequire 约束条件;
    \quadensure 验证结果;
    );

    不同的mode内的约束条件互不影响

  • var 格式:
    var 变量名

  • const 格式:
    const 常量名

  • assume 格式
    assume 约束条件(可以是一个布尔值true/false,也可也是一个结果为布尔值的公式,如 2 < 3 )

  • guarantee 的格式:
    guarantee 验证结果(可以是一个布尔值true/false,也可也是一个结果为布尔值的公式,如 a < b )

对于real类型的变量,在和数值比较大小或赋值的时候,数值一定要带小数,比如a < 0.0,如果写作a < 0则会报错无法执行

范例一

问题描述:验证两个数相乘的代码,如果两个数均为零,则结果一定也为零

代码:


node times (lhs, rhs: real) returns (res: real) ;(*@contractmode absorbing (
require lhs = 0.0 or rhs = 0.0 ;
ensure res = 0.0 ;
) ;*)
let
res = lhs * rhs ;
tel

Check结果:

._one_mode_active为什么Answer结果为falsifiable我暂时不太理解,对目前的验证不是很重要,所以没仔细研究,等我明白了再回来补充

范例二

问题描述:不使用mode,验证两个数相乘的代码,如果两个数均不为零,则结果一定也不为零

代码:

node times (lhs, rhs: real) returns (res: real) ;(*@contractassume lhs <> 0.0 and rhs <> 0.0;guarantee res <> 0.0 ;
*)
let
res = lhs * rhs ;
tel

Check结果:

  • assume后面写上假设的前提条件
  • guarantee后面写上,当上述的前提条件满足时,要验证的式子是否有效
  • a <> b表示a不等于b

范例三

问题描述:验证两个数相乘的代码,如果两个数均为零,则结果一定也为零;如果两个数都大于零或都小于零,则结果一定大于零;如果两个数一个大于零,一个小于零,则结果一定小于零。

代码:

node times (lhs, rhs: real) returns (res: real) ;(*@contract
const zero = 0.0;
mode absorbing (
require lhs = zero or rhs = zero ;
ensure res = zero ;
) ;
mode positive (
require (
rhs > zero and lhs > zero
) or (
rhs < zero and lhs < zero
) ;
ensure res > zero ;
) ;
mode pos_neg (
require (
rhs > zero and lhs < zero
) or (
rhs < zero and lhs > zero ) ; ensure res < zero ; ) ;
*)
let
res = lhs * rhs ;
tel

Check结果:

import一个contract的方法

问题描述:验证两个数相乘的代码,如果两个数均为零,则结果一定也为零

代码:

contract test (lhs, rhs: real) returns (res: real) ;
let
mode absorbing (
require lhs = 0.0 or rhs = 0.0 ;
ensure res = 0.0 ;
) ;
telnode times (lhs, rhs: real) returns (res: real) ;(*@contract
import test (lhs, rhs) returns (res) ;
*)
let
res = lhs * rhs ;
tel

Check结果:

【Kind2(基于SMT的自动模型检查器)学习笔记】contract的用法相关推荐

  1. C++基于ffmpeg和QT开发播放器~学习笔记

    C++基于ffmpeg和QT开发播放器 B站网址 https://www.bilibili.com/video/BV1h44y1t7D8?p=2&spm_id_from=pageDriver ...

  2. diy 单片机 自动浇花_基于单片机的自动浇花器设计

    龙源期刊网 http://www.qikan.com.cn 基于单片机的自动浇花器设计 作者:陈赋铭 来源:<农家科技下旬刊> 2015 年第 04 期 摘 要:本文是基于单片机 AT89 ...

  3. c语言打铃器单片机程序,基于单片机的自动打铃器的设计

    基于单片机的自动打铃器的设计-电气信息学院毕业设计 目  录 摘要I AbstractII 第一章绪论1 1.1单片机设计的目的和意义1 1.2单片机发展现状和前景展望1 1.2.1课题发展现状1 1 ...

  4. diy 单片机 自动浇花_基于单片机的自动浇花器的制作方法

    本实用新型涉及浇花设备技术领域,尤其涉及一种基于单片机的自动浇花器. 背景技术: 随着人们生活质量的不断提高,人们喜欢在家里放置花卉来点缀家中环境,从而使花卉种植不断普及,然而大多数花草生长问题是由花 ...

  5. 《基于GPU加速的计算机视觉编程》学习笔记

    <基于GPU加速的计算机视觉编程>学习笔记(1) 最近打算 准备工作 CUDA开发环境(主要是查看N卡的信息) 在WIN10下安装CUDA工具包 最近打算 在训练模型的时候,感觉电脑非常吃 ...

  6. 基于神经网络的机器阅读理解综述学习笔记

    基于神经网络的机器阅读理解综述学习笔记 一.机器阅读理解的任务定义 1.问题描述 机器阅读理解任务可以形式化成一个有监督的学习问题:给出三元组形式的训练数据(C,Q,A),其中,C 表示段落,Q 表示 ...

  7. 《基于张量网络的机器学习入门》学习笔记4

    <基于张量网络的机器学习入门>学习笔记4 量子概率 将概率复数化 分布与向量的表示 事件与Hilbert空间 不兼容属性及其复数概率表示 为什么一定要复数概率 量子概率 将概率复数化 在经 ...

  8. 图形处理(十三)基于可变形模板的三维人脸重建-学习笔记

    基于可变形模板的三维人脸重建-学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50331423 作者:hjimce 一.数据库处理: 我们通 ...

  9. 《深度学习入门-基于Python的理论与实现》学习笔记1

    <深度学习入门-基于Python的理论与实现>学习笔记1 第一章Python入门 Python是一个简单.易读.易记的编程语言,可以用类似于英语的语法进行编写程序,可读性高,且能写出高性能 ...

  10. C4D 内置渲染器 学习笔记

    C4D 内置渲染器 学习笔记 一.渲染到图片查看器 交互式区域渲染 这里可以调节渲染画质 创建动画预览 预览模式:硬件预览 图像尺寸可以大一些,这里渲染很快 二.渲染设置 选择渲染器 输出视频 保存 ...

最新文章

  1. mysql 常用函数循环_近30个MySQL常用函数,看到就是学到,纯干货收藏!
  2. 用最少的时间学最多的数据挖掘知识(附教程数据源)| CSDN博文精选
  3. 获取行信息_论文推荐 | 周乐韬,黄丁发,袁林果,等:基于状态和残差的北斗基准站观测数据表达与信息分级...
  4. js对浏览器内部及外部窗口宽度及高度使用测试
  5. oracle表修改语句,Oracle的常用修改表及字段的语句
  6. Android 中关于Cursor类的介绍
  7. mysql为什么要重建索引_MySQL表索引为什么会遭破坏?
  8. javascript 中的prompt 用法
  9. 华为olt ma5680t常用命令详解
  10. 一图读懂5G定位(提供完整思维导图下载)
  11. matlab遗传算法求解车辆路径问题(一)
  12. 机器人动力学(雅克比)
  13. 秒赞机器人好友_qq空间秒赞机器人好友 qq空间说说秒赞神器
  14. 安卓开发eclipse+adt下载
  15. wincc mysql_Wincc操作数据库SQLSERVER
  16. C#使用Windows全局钩子(Winform) SetWindowsHookEx
  17. 一套代码快速实现一个语音聊天室
  18. SAP各模块优缺点和发展简析
  19. [CF869E]The Untended Antiquity
  20. 论文阅读:Channel Augmented Joint Learning for Visible-Infrared Recognition

热门文章

  1. 计算机图形学 :中点画圆法
  2. 电动车 碟刹维修 液体的杠杆原理, 帕斯卡定律
  3. 原型开发工具_开发工具的未来原型
  4. 外贸常用术语_外贸常用术语大全-
  5. 零极点和系统稳定性关系
  6. 康托尔点集matlab实数,康托尔(Cantor)是如何证明实数集是不可数的
  7. 4.68亿人信息泄露:2 块钱就能查你的身份证,还带照片!
  8. 树莓派python摄像头文字识别_古德微树莓派摄像头文字识别
  9. 2008秋季-计算机软件基础- vc6 wintc 编译器
  10. Mycat全局序列号失效的诡异事件