(下面的 sizeof(A) 表示集合 A 的元素的数。,例如 sizeof({ "a" }) == 1 , sizeof(N ∩ [3, 5]) == 3
各种原因,省略很多东西。
在单个赋值语句内,我们可以考虑字符串都是“确定的”——一个字符串的值只可能是一个。例如
const char a[] = "apple";
const char b[] = "banana";
当然,通过一种变通的方式,我们可以想到这样子去记录:
char a[1024] = "apple";
strcpy(a, "banana");
或者
const char a[][] = { "apple", "banana" };
但这些都没有改变字符串“只有一个值”的情况。我们考虑这个定义:
字符串 a 的值为 ζ 。
显然,如果 sizeof(ζ) == 1 ,也即 ζ 只有一个值,那就是上面说的C语言中的字符串的情况。虽然,如果字符串是可以改变的,那么意味着 ζ 的值可能被“替换”了,但 sizeof(ζ) == 1 。另外,就算我们构造了 { ζ, ζ' } 也没有改变 sizeof(ζ) == 1 。即 ζ 只有一个值。
=============================================================================
我们考虑 sizeof(ζ) >= 1 , 例如 ζ = { "apple", "banana" };
我们的表示不是 a 是一个集合的意思,而是通过集合的记号,说明 a 既是 "apple", "banana" ,即 a 是不确定的。
这在 c 语言中实际上是无法表示的,因为 C 语言的字符串,都是只有一个值。
我们考虑,如果一个字符串 s 的值为 ζ ,而且 sizeof(ζ) === 1 ,我们就说 s 是确定的字符串。否则,我们说 s 是非确定的字符串 。
=============================================================================
考虑我们把非确定的字符串推广到整数上,一个整数 k 的值为 ζ ,例如
ζ = { 1 }
我们就是 k 是一个确定的整数,否则,例如 ζ = { 1, 2 }, 我们就说 k 是一个非确定的整数。
类似的,考虑一个类型为T的数据项 q ,其值为 ζ ,如果
sizeof(ζ) == 1,我们就说 q 是一个确定的值,T是一个确定的数据类型。
否则,例如 sizeof(ζ) >= 1,我们就说 q 是一个非确定的值,T是一个非确定的数据类型。
=============================================================================
我们可以接着定义非确定的数据类型的运算,例如非确定整数的加法。
考虑 k = { 1, 2 }, l = { 3, 4 }
那么, k + l = { 4,5,6 }
类似的,可以考虑非确定整数的减法和乘法等等。
这里考虑非确定的字符串的加法
k = { "hello", "very" }, l = { "apple", "red" }
k + l = { "helloapple", "hellored", "veryapple", "veryred" }
空值是不太重要的,例如 l 扩展到 { "apple", "red", "" },那么
k + l = { "helloapple", "hellored", "veryapple", "veryred", "hello", "very" }
=============================================================================
接着我们可以考虑定义非确定的方程。
例如 k = { "hello", "very" }, l = { "apple", "red" }
k + s + l = { "hello red apple", "very mix red" }
可以解得 s = { " red ", " mix " }
又例如 a = {1, 5, 6} b = {18, 20 },考虑 X 是整数。
aX = b
那么 X = { 18, 20, 4, 3 }
=================================================================
最后还推广到代数,考虑非确定的群。
已知一个三元组 (G, +, e) ,其中:
G 是一个非确定的集合;
e 是一个非确定的数据项,而且 e ∈ G;
对于 G的元素 a , b, c,总是有 a + b ∈ G; (a + b) + c = a + (b + c);
对于 G的元素 u ,总是有 u+e=e+u=u, u+w = w+u
我们称三元组 (G, +, e) 为一个非确定的群。
===
(这个思想推广自一个计算机文献)
--
修改:LTaoist FROM 36.102.208.*
FROM 36.102.208.*