当前位置: 首页 > news >正文

编程的实践理论 第九章 交互

第九章 交互

根据状态的初始值和终止值,我们已经描述了计算。一个状态变量的声明如下:
var x: T· S   =   ∃x, x′: T· S

它说的是一个状态变量有两个数学变量,一个是初始值,一个是终止值。在这个
声明的作用域内,x和x'是在规格S中可用的。当这是一个依赖性的组合时,有
中间的变量值,但是这种中间值对于依赖性的组合的定义是本地化的。
P. Q   =   ∃x′′, y′′, ...·  〈x′, y′, ...→P〉 x′′ y′′ ...  ∧  〈x, y, ...→Q〉 x′′ y′′ ...
考虑  (P. Q)  || R 。 在独立的组合中,在P和Q之间的中间值是隐藏的,
对于 R是不可见的,所以它们不能够用于进程的交互。

一个变量仅是初始值和终止值是可见的,叫做一个边界变量,一个变量的
所有的值都是可见的,叫做交互变量。所以,我们的变量都是边界的变量。
现在我们引入了交互变量,它的中间值对并行进程是可见的。这些变量用于
描述和推理人和计算机之间的交互,还有一个计算过程中的进程之间的交互。

9.0 交互的变量

令记号  ivar x: T· S 声明x为一个类型为T,作用域为S的交互变量。
它的定义如下:
ivar x: T· S   =   ∃x: time→T· S
时间是域的时间,或者是扩展的整数或者是扩展的实数。一个交互的变量
是一个时间的函数。变量x的值在时间t处是x t。

假定a和b是边界变量,x和y是交互变量,t是时间。对于独立的组合,我们
分区了所有的状态变量,边界变量和交互变量。假定 a 和 x 属于P,b和y 
属于Q。
P||Q =   ∃tP, tQ·      〈t′→P〉 tP  ∧  (∀t′′· tP≤t′′≤t′ ⇒ xt′′=x(tP))
∧  〈t′→Q〉 tQ  ∧  (∀t′′· tQ≤t′′≤t′ ⇒ yt′′=y(tQ))
∧  t′ = max tP tQ

新的部分说,当短的进程被完成了,它的交互变量保留不变,直到长的进程完成了。

在如同之前的图,使用相同的进程和变量,赋值语句 x:= a+b+x+y  在进程P中,变量x
赋值为四个变量的和。因为a和x是进程P的变量,它们的值由进程P赋值最新的值,如果
没有进程P给这些变量赋值,这些变量保持初始值。因为b是进程Q的边界变量,它的值
在进程P中可以看到它的初始值,无论Q是否给它赋值。因为y是进程Q中一个交互变量,
它的值在进程P中可以看到,是由进程Q赋值的最新的值,或者是Q没有赋值的初始值,
或者是不知道。因为x是一个交互变量,它的新值在所有的并行的进程中可以看到。
表达式a+b+x+y 是一个有混淆的记号,因为a和b是数值,x和y 是从时间到数值的函数,
数值实际上被赋值为 a+b+xt+yt,但是当上下文清楚时,我们忽略了实际参数t。
我们将相似的写着x' 意味着 xt' ,x''意味着xt''。

ok的定义说边界变量和时间没有改变。所以之前的两个图中,在进程P中,
ok   =   a′=a  ∧  t′=t

当含义是xt'=xt ,因为t'=t, 我们不需要说 x'=x。我们没有提及b和y ,
因为它们不是进程P的变量。

对交互变量的赋值,不能被实例化,因为它是时间来区别它的值。
在一个进程中,当一个边界变量是a和b,交互变量是x和y,

x:= e   = a′=a  ∧  b′=b  ∧  x′=e  ∧  (∀t′′· t≤t′′≤t′ ⇒ y′′=y)
∧ t′ = t+(要求评估和存储  e的时间 )

在对x的赋值其间,交互式变量y保留不变。在赋值期间关于x的值没有说。

如果我们愿意的话,对一个边界变量的赋值可以实例化。如果我们选择了对
时间的计量,我们必须说在赋值期间,所有的交互式变量都保持了不变。

依赖性的组合隐藏了边界变量和时间变量的中间值,只有交互式变量的中间
值是可见的。在边界变量a和b,交互式变量x和y,时间t, 我们定义
P. Q   =   ∃a′′, b′′, t′′·  〈a′, b′, t′→P〉 a′′ b′′ t′′  ∧  〈a, b, t→Q〉 a′′ b′′ t′′

规格定律和推导定律的绝大部分,保留了交互式变量的可加性,但是很可惜的是,
替换定律不再是有效的。

如果P和Q是并行的,它们有不同的变量。再假定边界变量a和交互式变量x是进程P
的变量,边界变量b和交互式变量y是Q进程的变量。在规格P中,输入是a,b,xt,yt'',
条件是 t<=t''<t'。在规格P中,输出是a' 和 xt'' ,规格P是可实现的,条件如下:
∀a, b, X, y, t· ∃a′, x, t′·  P  ∧  t≤t′  ∧  ∀t′′· t<t′′≤t′  ∨  x t′′=X t′′

正如之前的,P必须被满足,没有非减时间,新的部分说,P必须不包括t到t'之间外的
交互式变量。我们不需要知道一个进程的规格的上下文,来检查它的可实现性;变量
b 和 y 仅出现在通用量词之外。

练习448号是一个例子,它有相同的变量,a,b,x,y,t。假定时间是一个扩展的整数,每
一次赋值花费时间 为1.

(x:= 2.  x:= x+y.  x:= x+y) || (y:= 3.  y:= x+y)     x是左边进程的变量,y是右边进程的变量 
                                                                      a在左边进程,b是右边进程
=    (a′=a ∧ xt′=2 ∧ t′=t+1. a′=a ∧ xt′= xt+yt ∧ t′=t+1. a′=a ∧ xt′= xt+yt ∧ t′=t+1)
||  (b′=b ∧ yt′=3 ∧ t′=t+1.  b′=b ∧ yt′= xt+yt ∧ t′=t+1)
=    (a′=a ∧ x(t+1)=2 ∧ x(t+2)= x(t+1)+y(t+1) ∧ x(t+3)= x(t+2)+y(t+2) ∧ t′=t+3)
||  (b′=b ∧ y(t+1)=3 ∧ y(t+2)= x(t+1)+y(t+1) ∧ t′=t+2)
=     a′=a ∧ x(t+1)=2 ∧ x(t+2)= x(t+1)+y(t+1) ∧ x(t+3)= x(t+2)+y(t+2)
∧  b′=b ∧ y(t+1)=3 ∧ y(t+2)= x(t+1)+y(t+1) ∧ y(t+3)=y(t+2) ∧ t′=t+3
=     a′=a ∧ x(t+1)=2 ∧ x(t+2)=5 ∧ x(t+3)=10
∧  b′=b ∧ y(t+1)=3 ∧ y(t+2)=y(t+3)=5 ∧  t′=t+3

因为我们每一个赋值花费时间为1,例子给出了锁步骤的同步的样子。
更加现实的是,不同的赋值花费不同的时间,可能规定了不确定性
的上界和下界。我们决定了时间策略,是确定性还是不确定性,是
离散的还是连续的,定义和理论保持不变。当然了,复杂的时间
导致了非常复杂的表达式,用来描述所有的可能的交互过程。如
果关于可能的行为,我们要知道仅仅是一部分事,而不是所有的事,
我们能用推导来代换方程,弱化了简化目的。编程有其它的方式:
我们开始于一个期望行为的规格,加强了编程的必要性。

相关文章:

编程的实践理论 第九章 交互

第九章 交互 根据状态的初始值和终止值&#xff0c;我们已经描述了计算。一个状态变量的声明如下&#xff1a; var x: T S ∃x, x′: T S 它说的是一个状态变量有两个数学变量&#xff0c;一个是初始值&#xff0c;一个是终止值。在这个 声明的作用域内&#xff0c;x和x…...

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题&#xff1a;《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日&#xff0c;由湖北省人民政府指导&#xff0c;湖北省发展改革委、国家信息中心联合主办&#xff0c;中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络&#xff08;BSN&#xf…...

8.4 IP地址与端口号

目录 IP地址 IP地址及编址方式 IP 地址及其表示方法 点分十进制记法举例 IP 地址采用 2 级结构 分类的 IP 地址 分类的 IP 地址 多归属主机 各类 IP 地址的指派范围 ​编辑 一般不使用的特殊的 IP 地址 ​编辑 分类的 IP 地址的优点和缺点 划分子网 无分类编址 CIDR 无…...

day56_springmvc

今日内容 零、 复习昨日 零、 复习昨日 一、JSON处理【重点】 springmvc支持json数据交互,但是自己本身没有对应jar,使用的是第三方Jackson,只需要导入对应依赖,springmvc即可使用 如果需要换用到FastJson 导入依赖配置文件中指定json转换的类型为FastJson本次课程没有替换,用的…...

SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;下载与安装 1. 下载 &#xff08;1&#xff09;下载地址 &#xff08;2&#xff09;SSMS对操作系统的要求 2. 安装 &#xff08;1&#xff09;存放下载好的安装包 &#xff08;2&#xff09; 双击进入安…...

go 错误 异常

自定义错误 Go语言中 错误使用内建的 error 类型表示&#xff0c; error类型是一个接口类型&#xff1a;定义如下&#xff1a; error 有一个 Error() 的方法‘所有实现该接口的类型 都可以当做一个错误的类型&#xff1b;Error()方法输入具体错误描述&#xff0c;在打印错误时…...

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术&#xff0c;智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗&#xff0c;打电话人员抽烟等违规行为&#xff0c;灭火器未正确摆放&#xff0c;明火和烟雾等异常状态&a…...

LiangGaRy-学习笔记-Day22

1、shell工具-tput 这个是tput bash工具 具体的操作如下&#xff1a; tput clear&#xff1a;清屏tput cup Y X 第Y行&#xff0c;第X列的位置 tput bold&#xff1a;字体加粗tput sgr0 &#xff1a; 重置命令tput setaf n n&#xff1a;代表数字0-7 0黑色1红色2绿色3黄色4蓝…...

数据库横表和竖表有什么区别

横表和竖表是描述数据库表结构的两种形式&#xff0c;它们之间的主要区别在于数据的组织方式和用途。 横表&#xff08;宽表&#xff09;&#xff1a; 横表是一种常见的表结构&#xff0c;其特点是每一行数据包含所有相关属性&#xff0c;字段通常作为列出现。横表中的每行代表…...

哈希表--day1--基本理论介绍

文章目录 哈希表哈希函数哈希碰撞拉链法线性探测法 常见的三种哈希函数数组setmap 总结 哈希表 Hash table是根据关键码的值来直接进行访问的数据结构。 其实直白来讲其实数组就是一张哈希表&#xff0c;不过其索引是十分简单的&#xff0c;我们通过0来访问num[0]&#xff0c…...

基于OpenMV的疲劳驾驶检测系统的设计

一、前言 借助平台将毕业设计记录下来&#xff0c;方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。 本文主要从两个方面介绍毕业设计&#xff1a;硬件&#xff0c;软件&#xff08;算法&#xff09;。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区…...

chatgpt赋能python:使用Python来寻找两个列表不同元素的方法

使用Python来寻找两个列表不同元素的方法 在编写Python程序时&#xff0c;我们经常需要比较两个列表的元素&#xff0c;找出它们之间的不同之处。在搜索引擎优化&#xff08;SEO&#xff09;方面&#xff0c;这种比较对于找出两个网站内容的差异也非常有用。在这篇文章中&…...

简单学生管理系统

简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501 转载请注明出处&#xff0c;尊重作者劳动成果。 目录 前期准备&#xff1a; 数据库的连接&#xff1a; 用户账号类&#xff1a;…...

图像金字塔

​ 图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的&#xff0c;最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到&#xff0c;图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低…...

Springboot整合Camunda工作流引擎实现审批流程实例

环境&#xff1a;Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…...

PHP设计模式21-工厂模式的讲解及应用

文章目录 前言基础知识简单工厂模式工厂方法模式抽象工厂模式 详解工厂模式普通的实现更加优雅的实现 总结 前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 学会好设计模式&#xff0c;能够对我们的技术水平得到非常大的提升。同时也会让我们的代码写的非常…...

【玩转Docker小鲸鱼叭】理解Docker的核心概念

Docker核心概念 Docker有三大核心概念&#xff1a;镜像&#xff08;Image&#xff09;、容器&#xff08;Container&#xff09;、仓库&#xff08;Repository&#xff09; 1、镜像&#xff08;Image&#xff09; Docker镜像 是我们创建和运行Docker容器的基础&#xff0c;它…...

Eureka 心跳和服务续约源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月25日 🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力! 文章目录 分布式系统的心跳机制心跳机制的实…...

代码随想录二刷 530 二叉搜索树的最小绝对差 98. 验证二叉搜索树 700. 二叉搜索树中的搜索

530 二叉搜索树的最小绝对差 代码如下 func getMinimumDifference(root *TreeNode) int { var pre *TreeNode res : math.MaxInt var traverse func(root * TreeNode) traverse func(root * TreeNode) { if root nil { return } traverse(root.Left) …...

Docker安装——CentOS7.6(详细版)

ps:docker官网 在 CentOS 上安装 Docker 引擎 |官方文档 &#xff08;&#xff09; 一、确定版本&#xff08;必须是7以上版本&#xff09; cat /etc/redhat-release 二、卸载旧版本&#xff08;或者之前装过&#xff0c;没有安装过就不用管了&#xff09; &#xff08;root用…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...