首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么行为亚型不可判定?

为什么行为亚型不可判定?
EN

Software Engineering用户
提问于 2015-12-05 12:04:45
回答 2查看 1.2K关注 0票数 13

Liskov在这方面的工作主要集中在行为子类型上,除了本文讨论的类型系统安全性外,还要求子类型保留某些契约中的超级类型所保证的所有不变量,3.这种子类型的定义通常是不可判定的,因此不能由类型检查器来验证。

来自:http://www.wikiwand.com/en/Subtyping#/Function_类型

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2015-12-05 12:11:40

让操作o ( T类型)的合同对所有输入停止。现在决定子类型o的操作S <: T是否满足这个契约:您刚刚解决了停止问题。

更普遍地说,S::o必须计算与T::o相同的函数,如果是S <: T的话。判定两个程序是否计算相同的函数称为函数问题,相当于解决停止问题。

通常,静态地决定任何非平凡的运行时属性几乎总是等同于停止问题。

票数 24
EN

Software Engineering用户

发布于 2015-12-05 12:26:03

因为几乎每一个关于程序行为的问题都是无法确定的。通过赖斯定理,表格中的任何决策问题:

一些程序计算具有此属性的函数,另一些程序计算不具有此属性的函数。给定程序P,由P计算的函数是否具有上述性质?

是无法判定的。因此,例如,不能总是区分计算输入平方的代码和不计算输入平方的代码。虽然在简单的情况下,通常可以证明一个函数确实或不这样做,但是没有一个通用的过程对所有程序都有效。

几乎任何有趣的行为不变式都属于Rice定理的范畴,因为这些语句很少(如果有的话)讨论方法内部的样子,只讨论它返回的内容,以及它对某些输入造成的副作用。

票数 12
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/304335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档