如何用计算机代码检查一个无穷集在加法下是否闭合

How to check whether an infinite set is closed under addition with a computer code?

本文关键字:无穷集 是否 一个 代码 计算机 何用 检查      更新时间:2023-10-16

给定k正整数a1<a2<a3<lt;ak,以及所有大于ak的整数,我们要检查集合a={ai:i∈[1,k〕}∈{n:n>ak,n∈ℕ } ={a1,a2、a3…,ak+1,ak+2,…}在加法下闭合。这意味着:

1≤i≤kai*bi∈a,对于任何非负整数bi

例如,{2,4,6,7,8,…}在加法下是闭的。

有什么简单的方法可以做到这一点吗?我们可以在Mathematica或Matlab中使用什么函数?

如果集合的小于k的不连续部分不大,我相信你可以直接这样处理:

a = {2, 4, 6};
Tr /@ Subsets[a, {2}];
TakeWhile[%, # < Last@a &];
Complement[%, a] === {}

一个平庸的观察结果:任何具有操作数>= a_k的和都是A的成员,因此您只需要关注两个操作数都来自集合B = {a_1 .. a_(k-1)}的和。伪代码中的朴素解决方案:

for i from k-1 down to 1
  for j from i down to 1
    if (a_i + a_j < a_k) and (a_i + a_j is not in B) then
      return false
return true

你最近对这个问题的修改让它变得荒谬。我注意到:

  • a_1a_k都是严格正整数
  • 集合的其余成员严格大于a_k,因此也是严格的正整数

因此,集合的所有成员都是严格正整数

∑a_i*n_i ∈ A显然不适用于所有非负整数n_i

具体来说,它不适用于n_i = 0,因为和为零,并且零不是严格的正整数,因此不是集合的成员。

现在,这是"闭集"的一个非常奇怪的定义,而不是通常接受的用法。但根据您的定义,对于任何k > 0,该集合都不是闭合的。