不变(数学)

在数学中,不变性是数学对象(或一类数学对象)的属性,该属性在某些类型的操作或转换后保持不变。特定的对像类别和转换类型通常由使用该术语的上下文表示。例如,三角形的面积相对于欧几里得平面的异构体是一个不变的。使用“不变”和“变换”的短语“不变”。更一般而言,关于等价关系的不变性是每个等价类别上恒定的属性。
不变性用于数学领域,例如几何,拓扑,代数和离散数学。一些重要的转换类别由它们不变的不变定义。例如,共形图被定义为保留角度的平面的转换。不变的发现是分类数学对象的过程中的重要步骤。
例子
一个简单的不变性示例以我们的计数能力表示。对于任何类型的有限对象集,无论我们计算集合中的对象的顺序如何,我们总是会到达的数字。该数量与集合相关联,并且在计数过程中是不变的。
身份是一个方程,对于其变量的所有值仍然是正确的。当变量的值发生变化时,也存在不平等现象。
通过将相同数量添加到两个数字上,没有更改数字线上两个点之间的距离。另一方面,乘法没有相同的属性,因为在乘法下距离并不不变。
在尺度,旋转,翻译和反射下,距离的角度和比率是不变的。这些转换会产生相似的形状,这是三角学的基础。相反,在不均匀的缩放比例(例如拉伸)下,角度和比率并不不变。在上述所有操作下,三角形的内角(180°)的总和是不变的。作为另一个例子,所有圆圈都是相似的:它们可以相互转化,并且圆周与直径的比率不变(用希腊字母π( PI )表示)。
一些更复杂的例子:
- 在复杂的共轭下,复杂数的实际部分和绝对值是不变的。
- 在变量的线性变化下,多项式的程度是不变的。
- 拓扑对象的维度和同源组在同构中是不变的。
- 在许多数学操作下,动态系统的固定点的数量是不变的。
- 在正交转换下,欧几里得距离是不变的。
- 欧几里得区域是在具有决定符±1的线性图下不变的(请参见EgiarealMap§线性变换)。
- 一些投射转换的一些不变性包括三个或更多点的共线性,三个或更多线的并发,圆锥形部分和交叉比例。
- 线性内态的决定因素,痕量,特征向量和特征值在基础的变化下是不变的。换句话说,矩阵的频谱在基础的变化下是不变的。
- 张量的主要不变性不会随坐标系的旋转而变化(请参阅张量的不变性)。
- 矩阵的单数值在正交转换下是不变的。
- Lebesgue度量在翻译下是不变的。
- 概率分布的方差在实际线的翻译下是不变的。因此,在添加常数后,随机变量的方差不变。
- 转换的固定点是在转换下不变的域中的元素。根据应用程序,它们可能相对于该转换而被称为对称。例如,具有翻译对称性的对像在某些翻译下是不变的。
- 积分
高斯曲率
二维Riemannian歧管
在Riemannian度量的变化下是不变的
。这是高斯 - 邦纳特定理。
MU难题
MU拼图是一个逻辑问题的一个很好的例子,在这种情况下,确定不变的用于不可能证明。该难题要求一个人从单词MI开始,然后将其转换为单词MU,在以下每个转换规则中,使用了一个:
- 如果字符串以i结尾,则可能会附加u( x i→ x iu)
- M之后的字符串可以完全重复(M X →M XX )
- 任何连续的i(iii)都可以用单个u替换( x iii y → x u y )
- 任何两个连续的U都可以删除( X UU Y → XY )
一个示例推导(带有指示应用规则的上标)是
- MI→ 2 MII→ 2 MIIII→ 3 MUI→ 2 MUIUI→ 1 MUIUIU→ 2 MUIUIUIUIUIUI→ 4 MUIUIIUIUIU→... ...
鉴于此,人们可能会怀疑仅使用这四个转换规则,是否可以将MI转换为MU。人们可以花很多时间将这些转换规则应用于字符串。但是,发现所有规则不变的属性可能会更快(即没有任何规则),并证明进入MU是不可能的。通过从逻辑的角度查看难题,人们可能会意识到,摆脱我任何我的唯一方法是连续三个i在字符串中。这使得以下不变型要考虑:
- 字符串中的i的数量不是3个倍数.
这是对问题的不变性,如果对于每个转换规则,则以下规则所规定:如果在应用该规则之前持有的不变性,则在应用程序后也将保留。查看对I和U的数量应用规则的净效应,所有规则实际上都可以看到:
规则 #是 #我们 对不变的影响 1 +0 +1 我的数量没有变化。如果持续存在,它仍然可以。 2 ×2 ×2 如果n不是3的倍数,则2× n也不是。不变仍然存在。 3 −3 +1 如果n不是3的倍数,则n -3也不是。不变仍然存在。 4 +0 −2 我的数量没有变化。如果持续存在,它仍然可以。
上表清楚地显示了不变的每个可能的转换规则,这意味着,如果i的数量在应用该规则之前,i的数量不是三个,则在任何状态下选择哪个规则,那么它不会之后是。
鉴于启动字符串MI中有一个i,而不是三个中的一个i )。
不变套装
映射t : u → u的域u的子集u是映射下的不变设置请注意,即使集合S在U的功率集中固定, S的元素也不是固定的。 (一些作者使用术语术语不变的术语,而不是点不变,以区分这些情况。此外,圆锥形表面是在同一个空间下的集合。
在t下,据说一组不变的操作t也稳定。例如,在群体理论中如此重要的正常亚组是那些在环境组内部自动形态下稳定的亚组。在线性代数中,如果线性变换t具有特征向量V ,则通过0和V的线是t下的不变设置,在这种情况下,特征向量跨越了一个不变的子空间,该子空间在t下稳定。
当t是螺钉位移时,螺钉轴是一条不变的线,尽管螺距是非零的, t没有固定点。
正式声明
不变性的概念在数学方面以三种不同的方式形式化:通过小组动作,演示和变形。
在小组行动下没有变化
首先,如果一个组在数学对象(或一组对象) x上作用于x,则可以询问一个点x在组动作下或组的元素g下的“不变”,“不变”。
通常,一个组会在集合X上作用,这会留下一个以确定相关集f ( x )中的哪些对像是不变的。例如,围绕某个点的平面旋转使其旋转的点保持不变,而平面中的翻译不会留下任何点不变的,而是留下所有线路平行于平移的平移方向,将其作为线路不变。正式地,将平面p中的一组线定义为l ( p );然后,平面的刚性运动将线路划到线上 - 一组刚性动作作用在一组线上 - 可能会问哪些线不变。
更重要的是,一个人可能会在集合上定义一个函数,例如“平面中的圆圈半径”,然后询问此函数在组动作(例如刚性运动)下是否不变。
不变的概念的双重偶数是共同变量的,也称为轨道,它正式化了一致性的概念:可以通过小组行动彼此采取的对象。例如,在平面的刚性运动组下,三角形的周长是一个不变的,而与给定三角形一致的三角形组合是共同的。
这些连接如下:不变性在共同变量上是恒定的(例如,一致的三角形具有相同的外围),而在一个不变的值中同意的两个对象可能是一致的(例如,两个三角形与相同的两个三角形)不必一致)。在分类问题中,人们可能会寻求找到一组完整的不变式,以便如果两个对象具有这组不变性的值相同的值,那么它们是一致的。
例如,三角形使所有三个侧面均等在刚体的动作下都是一致的,因此通过SSS一致性,因此所有三个边的长度构成了三角形的完整不变性。三角形的三个角度度量在刚性运动下也是不变的,但由于不一致的三角形可以共享相同的角度度量,因此并未形成完整的集合。但是,如果除了刚性运动之外允许缩放,则AAA相似性标准表明这是一组完整的不变性。
独立于演讲
其次,可以根据数学对象的某些表示或分解来定义函数。例如,细胞复合物的欧拉特征定义为每个维度中单元格数的交替总和。一个人可能会忘记细胞复杂的结构,并且仅查看基础拓扑空间(歧管) - 不同的细胞复合物给出了相同的基础歧管,一个人可能会询问该函数是否独立于演示文稿的选择,在这种情况下,它是本质上的定义不变。 Euler特征就是这种情况,定义和计算不变性的一般方法是为给定的演示定义它们,然后证明它们独立于演示文稿的选择。请注意,从这个意义上讲,没有一个小组行动的概念。
最常见的例子是:
在扰动下没有变化
第三,如果一个人正在研究一个家庭变化的对象,那么在代数几何和差异几何形状中很常见,则可能会询问该属性在扰动下是否不变(例如,如果一个物体在家庭中不变或在变化下不变的对像是恒定的公制)。
计算机科学不变的
在计算机科学中,一个不变的是逻辑上的断言,在执行计算机程序的一定阶段始终是正确的。例如,循环不变是在循环的每一个迭代的开头和结束时都正确的条件。
当推理计算机程序的正确性时,不变性特别有用。优化编译器的理论,合同设计的方法以及确定程序正确性的正式方法,都在很大程度上依赖不变性。
程序员经常在其代码中使用断言,以使不变性明确。某些面向对象的编程语言具有特殊的语法,用于指定类不变性。
在命令程序中自动检测
抽象解释工具可以计算给定的命令计算机程序的简单不变性。可以找到的属性取决于所使用的抽象域。典型的示例属性是单个整数变量范围,例如0<=x<1024
,诸如0<=ij<2*n-1
类的几个变量之间的关系,以及y%4==0
之类的模量信息。学术研究原型还考虑了指针结构的简单特性。
通常必须手动提供更复杂的不变性。特别是,在使用Hoare演算验证命令程序时,必须为程序中的每个循环手动提供一个循环不变的,这是大多数程序通常不切实际的原因之一。
在上述MU拼图示例的上下文中,目前尚无通用自动化工具可以检测到仅使用规则1-4,从MI到MU的派生是不可能的。但是,一旦从字符串到其“ i”的数量的抽像是手工制作的,例如,引导到以下C程序,抽象的解释工具将能够检测到ICount%3
无法为0,因此“ while” - 环永远不会终止。
void MUPuzzle(void) {
volatile int RandomRule;
int ICount = 1, UCount = 0;
while (ICount % 3 != 0) // non-terminating loop
switch(RandomRule) {
case 1: UCount += 1; break;
case 2: ICount *= 2; UCount *= 2; break;
case 3: ICount -= 3; UCount += 1; break;
case 4: UCount -= 2; break;
} // computed invariant: ICount % 3 == 1 || ICount % 3 == 2
}