TLA+ Specifying System (1)

简介: TLA+ Specifying System (1)

概述

  • 并发系统的正确性是很难证明的,因为异步点太多,人类的大脑不是为并发而进化的,并发系统的行为变化可能性太多
  • 如果能够把系统的状态/行为抽象为时态逻辑(Temporal Logic),结借助CPU超强的算力,穷举出所有可能的behavior(状态序列)就可以判断系统是否正确
  • 基本的TLA+语法和使用可见状态序列是指数级别,需要深入立即系统和TLA+对状态进行剪枝
  • 什么是Temporal Logic:系统随着时间的推移,可能出现的状态序列
  • TLA+是基于数理逻辑的语言,如果你对数理逻辑很有研究,那么会如鱼得水

What is a specification?

  • spec描述应该实现什么,而不是描述如何实现
  • 用来验证设计,而不是教你如何设计
  • 在动手coding之前,进行specify能帮助你更好的理解你的系统
  • 只验证设计是否正确而不验证性能
  • specification的基础是数学,因为只有数学语言是精确的
  • 这里用到的数学是更加形式化的数学,而不是我们在学校时学到的经典数学(大部分也不是精确的)。形式化的数学看起来很冗长,但是能用最少的数学概念描述一个系统。

Why TLA+

  • 1977年,艾米尔.伯努利用时序逻辑temporal logic来specify一个系统,但是只能描述部分系统
  • 1980年代,Lamport发明了TLA(temporal logical action),选择了数学家们(而不是程序员)所喜爱的一阶逻辑理论和集合理论
  • TLA提供了specify系统的数学基础,数学描述现实的系统,TLA来形式化数学:TLA就是来解决如何用程序描述数学的问题,而TLA+就是这门语言,仅仅借鉴了编程语言的模块化的思想,除此之外都是数学概念
  • TLA+可以方便描述任何离散的系统(因为它建立于集合论),尤其是异步系统
  • TLA+使用简洁的数学语言来描述状态转换
  • TLA+不是用来描述程序执行的指令序列

一个例子

  • C语言代码
int i;
void main() {
    i = someNumber();
    i = I + 1;
}
  • 和这段代码等价的spec是下面这段tla(emacs上可以安装一个插件,以prity-print方式显示希腊字符)

![]({{ site.url }}images/2018-07-12-specify-system-1.jpg)

  • 几点说明:
  • TLA+支持以模块方式组织代码
  • 以——————————— MODULE SimpleProgram ----------------------开始
  • 以====================================================结尾
  • 任何TLA+ spce都要有Init和Next,Init和Next被称为formula
  • TLA+会默认用Init进行初始化状态,默认用Next迭代可能到达的状态
  • Init == (pc = "start") /\ (i = 0), ‘==’ 定义一个 formula
  • 逻辑与运算符‘/\’:a /\ b 表示先发生a,再发生b
  • 逻辑或运算符‘/’:a / b 表示要么发生a,要么发生b
  • Next formula描述的是一个状态机,‘/’运算连接起来的是两个状态入口“start”和“middle”
  • pc’ 和 i’ 是下一个状态中pc和I的值,记做(pc primae, i prime)
  • TLA+ 使用宽度遍历,暴力遍历所有可达的状态

总结

  • 任何系统都能够使用状态机描述
  • specify状态机所有可达的状态
  • TLA+使用CPU超强的算力穷举所有可能的状态序列
目录
打赏
0
0
0
0
5
分享
相关文章
Paper Digest | 突破个性化推荐数据稀疏性:长尾增强的图对比学习算法研究
本文提出了一种新的长尾增强的图对比学习方法(LAGCL),该方法促使模型同时兼顾头部节点与尾部节点之间的知识,并通过长尾增强技术来使模型产出更均匀更准确的节点表征,从而改进基于 GNN 的推荐任务。
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
337 12
Navicat Premium 17 最新版下载与配置:5分钟完成企业级数据库工具部署
Navicat Premium 17 是一款支持多种主流数据库(如 MySQL、Oracle、PostgreSQL 等)的多数据库管理工具,提供可视化数据建模、SQL 编辑和数据同步等功能。试用版提供 14 天全功能体验,商业版支持跨平台使用。安装环境要求 Windows 10/11 或 macOS 12.0+,最低配置为 4GB 内存。下载并解压安装包后,按步骤启动安装程序、接受许可协议、自定义安装路径并完成安装。首次运行时需激活许可证并配置数据库连接。常见问题包括无法写入注册表、试用期续费及连接数据库权限问题。高级功能涵盖 SSH 通道加速、自动化任务调度和性能调优建议。
1119 19
云数据库Tair:从稳定低延时缓存到 Serverless KV
本次分享聚焦云数据库Tair的使用,涵盖三部分内容:1) Tair概览,介绍其作为稳定低延时缓存及KV数据库服务的特点和优势;2) 稳定低延迟缓存技术,探讨如何通过多线程处理、优化内核等手段提升性能与稳定性;3) 从缓存到Serverless KV的演进,特别是在AI大模型时代,Tair如何助力在线服务和推理缓存加速。Tair在兼容性、性能优化、扩缩容及AI推理加速方面表现出色,满足不同场景需求。
阿里巴巴大数据实践之数据建模:构建企业级数据湖
阿里巴巴通过构建高效的数据湖和实施先进的数据建模策略,实现了数据驱动的业务增长。这些实践不仅提升了内部运营效率,也为客户提供了更好的服务体验。随着数据量的不断增长和技术的不断创新,阿里巴巴将持续优化其数据建模方法,以适应未来的变化和发展。
利用Hadoop进行实时数据分析的挑战与解决方案
【8月更文第28天】随着大数据技术的快速发展,企业和组织面临着越来越复杂的实时数据处理需求。Hadoop 作为一种分布式存储和处理大数据的框架,虽然擅长于批处理任务,但在处理实时数据流时存在一定的局限性。为了克服这些限制,Hadoop 经常与其他实时处理框架(如 Apache Kafka 和 Apache Storm)结合使用。本文将探讨如何利用 Hadoop 结合 Kafka 和 Storm 实现近实时的数据处理,并提供相关的代码示例。
871 0
【MySQL】:分组查询、排序查询、分页查询、以及执行顺序
【MySQL】:分组查询、排序查询、分页查询、以及执行顺序
453 0
实时计算 Flink版操作报错合集之在本地执行代码没有问题,但是在线执行sql命令就会报错,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
208 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问