计算机中人们所说的“不变性”到底是什么?

              
luda 15-06-12

计算机中人们所说的“不变性”到底是什么?
起初指的是2 = 1 + 1这样的事情;起初指的是往气球里面充1立方米空气,只要气球不漏气全部放出来应该还是1立方米。指的这样的不变性。
起初如果指的是上面那样的不变性,现在指的应该还是那样的不变性。因为任何一个词汇无论如何演化只要能够存留下来的话一定都不违反原来的本意。小明(群友贴了一段话的截图,群猪一眼就识别出来那是小明说的)不一定理解了不变性是什么,帖子和回复之间的不变性也是有的,只要愿意识别出来就有,不愿意识别出来就没有。比如这样的不变性:一个回复如果是回复的某个帖子,回复对象(post对象)的SubjectId属性值已经指向了subject1了就不能变成指向主帖2了,这不是业务上要求的不变性吗?如果post1的SubjectId指向的那条subject记录不存在了,那么这条回复记录在业务上就是非法的了,也就是说回复记录的生命周期不能长过主贴记录的生命周期,这种A > B,或者A包含B这种不等式是永远不变的,这不是不变性吗?

不变性的本质可能是数学式子。凡是可以用数学式子表述出来的东西表达的都是不变性,因为数学式子中没有“时间”概念。整个数学世界中都没有“时间”概念,没有时间概念就是不变的。比如如下的数学式子:
y = f(x);
g(x) > h(y);
这里面不存在时间概念(如果说你把x理解为t的话那么这个数学式子已经被物理化了),只要不违反数学定律就可以把上面的式子随便变形,但是这种变形在数学上是不经过任何时间的,因为不经过任何时间也就是说根本没变,因为如果变就必须经过时间,因为时间=变。之所以我们可以使用数学定律去变形数学式子可能正是因为它根本没变。

前一段时间在jdon上看到banq贴的关于对象和类型的内容,上面好像说每一个对象都是一个命题,对象上的每个字段的每一个取值都是命题。
Post post = new Post{SubjectId = '123456'};
上面那行中有这样一个命题:post对象的SubjectId指向的标识为'123456'的Subject类型的对象一定存在。这个命题必须是真命题,如果不是真命题就违反了业务。计算机中的每一个动作每一块数据都是命题,但不一定都是真命题,但是业务逻辑描述的都是真命题。有了不变性才能推理。

1