一阶逻辑前束范式全解:量词前移、变换步骤与推理应用

一阶逻辑前束范式全解:量词前移、变换步骤与推理应用

我教逻辑学这些年,每次讲到“前束范式”,教室里都会出现一阵微妙的安静。公式从一行变成三行,规则从三条变成八条,不少同学会在心里嘀咕:把量词全都赶到最前面,除了让式子变得又长又怪,到底图什么?这个问题其实问到了点子上。前束范式不是一个孤零零的“考试知识点”,它是整个谓词逻辑通往自动化推理、模型论和数学分析形式化的中间站。这篇就把前束范式彻底讲透:它是什么、怎么把一个五花八门的公式规规矩矩地化过去、每一步为什么必须这样做、常见错误有哪些,以及做完之后下一步往哪走。适合正在学一阶逻辑的大学生、自学逻辑的读者,以及需要快速捡起这块内容的考研党。

1. 为什么逻辑学反复强调“把量词赶到前面去”

1.1 前束范式不是“化简”,而是把结构摊开

前束范式(Prenex Normal Form)的定义并不难,难的是理解它为什么要存在。一个一阶逻辑公式,如果它的形状是:

Q₁x₁ Q₂x₂ … Qₙxₙ Φ

其中每个 Qᵢ 是 ∀ 或者 ∃,xᵢ 是变元,后面的 Φ 是一个不含量词的公式,那么这个公式就是前束范式。前面这一长串量词叫前缀(prefix),后面这个无量词部分叫母式,有时也翻译成“矩阵”(matrix)。

举个例子:∀x∃y(¬P(x)∨Q(x,y)) 就是前束范式,因为两个量词都在最前面,母式里没有任何量词。而 ∀x(P(x)∧∃y Q(x,y)) 就不是前束范式,因为 ∃y 埋在括号里面,没有待在最外层。这里还有一个容易忽略的边界情况:如果公式本来就不含量词,比如 P(x)∧Q(y),它也可以看成量词个数 n=0 的前束范式。这种统一约定在后面的算法流程里很有用。

为什么说不应该是“化简”?因为化前束范式的过程往往会让公式变长,特别是碰到等价联结词的时候,子公式会被复制,公式长度可能翻倍。所以从信息量的角度看,前束范式不是压缩,而是把量词和联结词交错纠缠的结构“摊平”,让所有量词一次性暴露在公式最前端。这样做的收益是:量词之间的相对顺序一目了然,谁依赖谁、谁在前面谁在后面,全部清清楚楚。

还有一个逻辑学中非常重要的定理:任何一个一阶逻辑公式,都存在一个与之逻辑等值的前束范式。这句话意味着化前束范式不是“运气好才能化”,而是必然能做到的算法过程。后面讲的操作步骤,本质上就是对这个定理的构造性证明。

1.2 量词顺序不是形式游戏:连续与一致连续的区别

很多人觉得前束范式抽象,是因为看不到量词顺序有什么实际意义。这里用一个几乎所有理工科学生都熟悉的例子:数学分析里的连续性和一致连续性。

函数 f 在某一点 a 连续,用 ε-δ 语言可以写成这样的骨架:

∀a ∀ε>0 ∃δ>0 ∀x (|x−a|<δ → |f(x)−f(a)|<ε)

而 f 在定义域上一致连续则是:

∀ε>0 ∃δ>0 ∀x ∀y (|x−y|<δ → |f(x)−f(y)|<ε)

两句话长得非常像,但性质完全不同。关键在于:连续性的 δ 是在 a 和 ε 都选定之后才选的,所以 δ 可以依赖 a 和 ε;一致连续性的 δ 在 x 和 y 出现之前就选定了,所以它只依赖 ε,不能依赖具体的点。

如果把它们写成一阶逻辑的量词前缀,连续就是 ∀a∀ε∃δ 的结构,一致连续是 ∀ε∃δ 的结构。量词在前的变量可以先选,量词在后的变量可以依赖前面的变量。这就是量词顺序的语义内容:顺序决定依赖关系。有了这个直觉,你就会明白,把量词全部提到最前面并不是形式主义的怪癖,而是把“谁依赖谁”这个深层结构直接摆到桌面上来。

2. 化归前束范式的四步套路,每一步都解释为什么

2.1 先把蕴涵和等价“拆掉”

化前束范式的第一步是消去 → 和 ↔,只保留 ¬、∧、∨ 三种联结词。用到的基本等值式是:

原公式

替换为

A→B

¬A∨B

A↔B

(¬A∨B)∧(¬B∨A)

A↔B

(A∧B)∨(¬A∧¬B)

为什么要先做这一步?因为前束范式的母式是“任意布尔组合”没错,但量词移动的规则在 ∧ 和 ∨ 面前最干净,在 → 面前则需要额外记忆“前件翻转”的规则。你可以选择保留 → 再用专门规则,但那样容易混。我的建议是:先把 → 和 ↔ 全部消掉,把界面单一化,减少后续出错概率。

消去 ↔ 时要有点心理准备:等价会把子公式复制一份,公式长度立刻翻倍。比如处理 ∃xP(x)↔∀yQ(y) 时,它会变成 (∃xP(x)→∀yQ(y))∧(∀yQ(y)→∃xP(x)),量词也跟着出现了两次。这是正常现象,后面用量词前移规则时再逐个处理即可。

这一小节易错的地方是括号。像 A→(B→C) 必须先看成 A→(¬B∨C),再化成 ¬A∨(¬B∨C),不能脑内省略括号。强烈建议在草稿纸上把每步的括号都完整写出来,不要跳步。

2.2 否定词往内挤,量词跟着翻转

第二步是把所有否定词往内层挤,一直挤到原子公式前面。这一步的核心等值式有:

双重否定:¬¬A ⇔ A

德摩根律:¬(A∧B) ⇔ ¬A∨¬B,¬(A∨B) ⇔ ¬A∧¬B

量词否定:¬∀xA ⇔ ∃x¬A,¬∃xA ⇔ ∀x¬A

很多人卡在量词否定上。直觉很简单:¬∀xP(x) 的意思是“并非所有 x 都满足 P”,也就是“存在某个 x 不满足 P”,所以是 ∃x¬P(x)。同理,¬∃xP(x) 是“不存在 x 满足 P”,等价于“所有 x 都不满足 P”,所以是 ∀x¬P(x)。可以这样记:否定词越过量词时,量词要翻跟头——∀ 变 ∃,∃ 变 ∀。

这一步要做到什么程度?理论上说,否定词可以停留在任意位置,不一定要挤到原子公式前面。但如果不挤到底,后面量词前移时,带有否定词的子公式很容易把规则用错。把否定词彻底内移后,整个公式就只剩下“原子公式及其否定”通过 ∧、∨ 组合而成的结构,处理起来非常机械。

实际操作时,公式里可能有多层否定交错。比如 ¬(∀x∃yR(x,y)∧S(z)),要一层层处理:先对 ∧ 用德摩根变成 ¬∀x∃yR(x,y)∨¬S(z),再对 ¬∀ 变成 ∃x¬∃yR(x,y)∨¬S(z),再处理 ¬∃ 变成 ∃x∀y¬R(x,y)∨¬S(z)。每一步都要写出来,不要心算。

2.3 换名:给约束变元腾地方

第三步是换名,也叫约束变元改名。这一步经常被跳过,但它是避免最后公式一团乱麻的关键。

为什么要换名?看一个简单例子:∀xP(x)∨∃xQ(x)。如果你不换名,直接把两个量词都往前提,就会得到 ∃x∀x(P(x)∨Q(x)),一个变元被两个量词同时约束,语义彻底混乱。更隐蔽的问题在这里:∀xP(x)→Q(x) 这个公式中,前一个 x 被全称量词约束,后一个 x 是自由的。如果你直接想把量词提到整个公式最前面,得到 ∀x(P(x)→Q(x)),那原本自由的 x 就被“卷进”了量词辖域,公式含义发生了改变。

换名的规则有两条:只能改约束变元,不能改自由变元;新名字不能与辖域内任何已有变元同名。比如 ∀xP(x) 可以改成 ∀yP(y),因为 y 没有出现过;但如果辖域里已经有自由变元 y,比如 ∀xR(x,y),就不能改成 ∀yR(y,y),那会把自由 y 也吞进来。

具体做法:先用括号或者下标把每个量词的辖域划清楚,再给每个约束变元分配一个“不撞车”的新名字。尤其是当一个公式里有多个不同量词却用了同一个变元名时,我会建议把后出现的那个改名,比如 ∀xP(x)∨∃xQ(x) 改成 ∀xP(x)∨∃yQ(y)。这样后面量词前移时,每个量词的变元都互不干扰。

2.4 量词前移:两张规则表

四步套路里最核心的是量词前移。这里需要记住两张规则表。

第一张:∧ 和 ∨ 的情况

设 x 不在 B 中自由出现,则有:

规则

∀xA∧B ⇔ ∀x(A∧B)

∀xA∨B ⇔ ∀x(A∨B)

∃xA∧B ⇔ ∃x(A∧B)

∃xA∨B ⇔ ∃x(A∨B)

反过来,如果 x 不在 A 中自由,也可以把 x 从 B 那侧提出来,公式形状对称。这些规则的本质是:量词只是“作用于 A 内部的 x”,并不会碰到 B,所以可以把量词提升到包含 A 和 B 的整个合取式或析取式前面。

第二张:蕴含的情况

如果坚持先消去 →,这张表可以不用背。但很多题目里,量词直接出现在蕴含的前件或后件,这时候用速记规则会快很多:

规则

条件

(∀xA)→B ⇔ ∃x(A→B)

x 不在 B 中自由

(∃xA)→B ⇔ ∀x(A→B)

x 不在 B 中自由

A→(∀xB) ⇔ ∀x(A→B)

x 不在 A 中自由

A→(∃xB) ⇔ ∃x(A→B)

x 不在 A 中自由

注意看:量词在蕴含前件时,提出后符号翻转;量词在蕴含后件时,提出后符号不变。原因很简单:前件在消去蕴含后会被否定,全称被否定变存在,存在被否定变全称。这个“前件翻转、后件不变”的口诀,是化前束范式时最容易考到的细节。

量词前移的顺序也有讲究。如果公式里有多个量词,建议从左到右一个一个提,不要试图一次性把所有量词都“抓”出来。这样做的原因是保持原有的依赖顺序。从第1节已经知道,量词顺序本质上反映变量依赖关系,乱调顺序会改变公式的语义。

3. 三个完整例题:跟着走一遍就不会再慌

3.1 基础例:蕴含式中的全称量词变成存在量词

题目:化 ∀xP(x)→∃yQ(y) 为前束范式。

第一步,消去蕴涵:

¬∀xP(x) ∨ ∃yQ(y)

第二步,否定词内移,全称变存在:

∃x¬P(x) ∨ ∃yQ(y)

第三步,检查变元:x 和 y 没有冲突,不用换名。

第四步,量词前移。从左侧开始,先提 ∃x:

∃x(¬P(x) ∨ ∃yQ(y))

再提 ∃y,注意 y 在 ¬P(x) 中不出现,满足规则:

∃x∃y(¬P(x) ∨ Q(y))

最终结果就是 ∃x∃y(¬P(x)∨Q(y))。

这道题几乎必考,而且坑非常固定:很多人会把结果写成本来就有的 ∀x∃y,忘了原来的 ∀x 是被否定后才变成 ∃x 的。因为蕴含前件里的全称量词,在消去蕴含后会被否定,最后提出来时全称就变成了存在。做这类题时,每做一步都回头看一眼量词符号有没有跟着变化。

3.2 非教条例:量词在内外层不同位置的处理

题目:化 ∀x(P(x)→∃yR(x,y)) 为前束范式。

这个公式的难点在于,∃y 藏在蕴含的后件里,外层还有一个 ∀x。可以按部就班:先消去内层蕴含:

∀x(¬P(x) ∨ ∃yR(x,y))

然后处理括号内的量词。在子公式 ¬P(x)∨∃yR(x,y) 中,y 不出现在 ¬P(x) 里,所以把 ∃y 提出来:

∀x∃y(¬P(x) ∨ R(x,y))

这就是前束范式,结果是 ∀x∃y(¬P(x)∨R(x,y))。

再来看一个加强版变体:∀x∃yR(x,y)→∃zS(z)。

先消去蕴含:

¬∀x∃yR(x,y) ∨ ∃zS(z)

否定词内移,注意连续两个量词,需要一层层处理:

∃x∀y¬R(x,y) ∨ ∃zS(z)

现在公式从左到右的量词是 ∃x、∀y、∃z。前件量词经历了“翻转”:原来的 ∀x∃y 变成了 ∃x∀y。因为它们本来是一个整体,翻转后依然保持从左到右的相对位置,不能写成 ∀y∃x。接着依次提出:

∃x(∀y¬R(x,y) ∨ ∃zS(z))

∃x∀y(¬R(x,y) ∨ ∃zS(z))

∃x∀y∃z(¬R(x,y) ∨ S(z))

最终结果是 ∃x∀y∃z(¬R(x,y)∨S(z))。这道加餐题非常适合检验自己有没有真正掌握“前件量词翻转但顺序不变”这个要点。

3.3 综合例:等价联结词带来的双份量词与换名冲突

题目:化 ∃xP(x)↔∀yQ(y) 为前束范式。

等价联结词会让公式长度翻倍,所以这道题最能暴露问题。第一步消去等价:

(∃xP(x)→∀yQ(y)) ∧ (∀yQ(y)→∃xP(x))

第二步消去每个蕴含:

(¬∃xP(x) ∨ ∀yQ(y)) ∧ (¬∀yQ(y) ∨ ∃xP(x))

第三步否定内移:

(∀x¬P(x) ∨ ∀yQ(y)) ∧ (∃y¬Q(y) ∨ ∃xP(x))

到这里开始乱了吗?左边的 ∀x 和右边的 ∃x 撞名了,左边的 ∀y 和右边的 ∃y 也撞名了。如果现在直接前移,最后会得到一个变元在不同量词之间反复纠缠的式子,极难读也极容易操作失误。所以先换名。把右边的 ∃y 改成 ∃w,把右边的 ∃x 改成 ∃u:

(∀x¬P(x) ∨ ∀yQ(y)) ∧ (∃w¬Q(w) ∨ ∃uP(u))

然后各自处理。先处理左边析取式,从左到右提出量词:

∀x∀y(¬P(x) ∨ Q(y))

再处理右边析取式:

∃w∃u(¬Q(w) ∨ P(u))

现在整个公式变成:

∀x∀y(¬P(x) ∨ Q(y)) ∧ ∃w∃u(¬Q(w) ∨ P(u))

两边的变元集合完全不重叠,x、y 在左侧,w、u 在右侧。最后从左到右把所有量词提到整个合取式前面:

∀x∀y∃w∃u[(¬P(x)∨Q(y)) ∧ (¬Q(w)∨P(u))]

这就是其中一个正确的前束范式。

如果你在第三步没有换名,而选择硬提,可能也能得到某个语义上等价的公式,但中间非常容易把变元搞混。所以我的习惯是:只要公式里出现同一个变元名被两个不同量词约束的情况,就立刻换名,不要犹豫。另外,等价式不是只有一种展开方式,你如果展开成 (A∧B)∨(¬A∧¬B),会得到另一个形状完全不同的前束范式。前束范式不唯一,这是很正常的事,只要每一步都满足逻辑等值即可。

4. 最容易踩的坑:顺序、改名与结果检验

4.1 量词顺序到底能不能换,要看依赖关系

前面用连续和一致连续的例子说明了量词顺序的意义。这里再从做题角度说清楚:绝大多数情况下,量词顺序不能随便交换。

看这个经典例子:∀x∃yR(x,y) 和 ∃y∀xR(x,y) 逻辑等价吗?答案是不等价。设论域是至少包含两个元素的集合,R(x,y) 解释为“x≠y”。那么 ∀x∃yR(x,y) 是真的,因为任取一个 x,总能找到一个 y 不等于它;而 ∃y∀xR(x,y) 是假的,因为如果 y 固定了,取 x=y 时,“x≠y”就为假。

但有时候交换又是安全的。比如 ∀xP(x)∨∃yQ(y) 化成 ∀x∃y(P(x)∨Q(y)),也可以化成 ∃y∀x(P(x)∨Q(y)),两者逻辑等值。原因在于 P(x) 不依赖 y,Q(y) 不依赖 x,两个量词的辖域互不相交、互不干涉。所以安全交换的条件是:两个量词分别作用在互不包含对方自由变元的子公式上。

稳妥的做题策略是:不冒交换的险,永远从左到右按原顺序提。只有当两个量词本来就在互不嵌套的并列子公式里,且你确实需要调整结果形状时,才考虑交换。

4.2 改名只能动约束变元,自由变元一点都不能碰

这个坑几乎每个入门者都会踩一次。拿 ∀xP(x)→Q(x) 来说,很多人图省事,直接想把 ∀x 提到整个蕴含式前面,得到 ∀x(P(x)→Q(x))。这是错的。因为在原公式里,Q(x) 中的 x 是自由的,不在 ∀x 的辖域内;提到前面后,它被强制变成了约束变元,公式的语义就变了。

正确姿势是:先对约束变元换名,把 ∀xP(x) 改成 ∀yP(y),整个公式变成 ∀yP(y)→Q(x)。然后再用前件量词翻转规则,得到 ∃y(P(y)→Q(x))。注意,最后的 Q(x) 里 x 依然是自由的。

判断一个变元是约束还是自由,就要看它是否落在某个量词的辖域里。同一个变元名可以在一个公式里同时有约束出现和自由出现。遇到这种情况,第一反应不是去改自由变元,而是给约束变元换一个全新的名字。换名时的新名字,一定不能和辖域内已有任何变元同名,否则产生新的捕获。

4.3 用“原路返回”验证逻辑等值是否被破坏

做完整道题之后,怎么确认没有错?我改作业时发现,很多同学宁愿重新从头算一遍也不愿意做反向检查,其实反向检查快得多。

方法一:原路返回。把你得到的前束范式,按照变换的逆步骤往回推一步,看看能不能回到原公式。如果每一步都严格可逆,也就是每一步都用了逻辑等值式,那结果基本就对了。

方法二:小论域验证。构造一个只有两个元素 a、b 的论域,给所有谓词符号随机指定一组解释,手工或写小程序求原公式和结果公式的真值,多试几组解释。如果任何一组解释下两者真值不同,说明中间某步破坏了逻辑等值。对于量词不超过三个、谓词不复杂的公式,这个方法十几分钟就能完成,特别适合拿不准的时候做交叉验证。

方法三:检查自由变元集合。前束变换不应该改变公式的自由变元集合。原公式里哪些变元自由,化完之后仍然应该自由;原公式里没有的自由变元,不该在结果里凭空出现。这是最快速的“体检指标”。

方法四:数一数量词和括号。如果公式很短却出现了大量括号失衡,或者量词个数与原子谓词中变元出现次数完全对不上,多半是前面某一步漏了换名或抄错了公式。

4.4 前束范式不唯一,别为了“唯一答案”钻牛角尖

很多初学者喜欢问:标准答案到底是什么?前束范式没有唯一标准答案。同一个公式,因为等价式展开方式不同、量词前移顺序不同,可能得到多个逻辑等值但形状不同的前束范式。比如 ∀xP(x)∧∀yQ(y),既可以化成 ∀x∀y(P(x)∧Q(y)),也可以化成 ∀y∀x(P(x)∧Q(y)),两者都正确。

判卷时真正看的是:所有量词是否都在最前面,母式是否无量词,变换过程是否每一步都逻辑等值。只要这三点满足,形状略有差异不算错。但自己练习时建议固定一种套路,我推荐“从左到右、换名前置、∧∨优先”,这样批改和复盘都方便。

5. 前束范式不是终点:Skolem范式与子句集

5.1 Skolem化:用常项和函数“打发走”存在量词

前束范式的一个重要下游应用是 Skolem 化。Skolem 化的目标是把母式里的存在量词全部消去,变成所谓的 Skolem 范式。做法分两种情况。

如果存在量词不在任何全称量词的辖域之内,比如 ∃xP(x),就直接用一个新的常项 c 代替 x,得到 P(c)。这里的 c 必须是从未出现过的新符号,否则可能改变语义。

如果存在量词处在某些全称量词的辖域之内,比如 ∀x∃yR(x,y),那么 y 的选择可能依赖于 x,这时候不能用常项代替,而要用一个新的函数符号 f 来代替 y,得到 ∀xR(x,f(x))。这个函数 f 就叫 Skolem 函数。存在量词前面有 n 个全称量词,Skolem 函数就取 n 个参数。

这里必须强调一个关键区别:Skolem 化保持的只是可满足性等价,不是逻辑等值。∀x∃yR(x,y) 和 ∀xR(x,f(x)) 并不在所有解释下同真同假,但前者有模型当且仅当后者有模型。这个“弱化”的性质对于自动定理证明中的不可满足性判定已经足够了。

如果前面没有前束范式把量词全部整齐地排好,Skolem 化时你甚至很难判断某个存在量词到底应该依赖哪些全称量词。前束范式把这种依赖关系从错综复杂的嵌套结构中解放出来,所以它才成为 Skolem 化必不可少的输入。

5.2 从母式到子句集的流水线

在谓词逻辑的机器证明中,处理一阶公式的标准流水线是:

原公式 → 前束范式 → Skolem 化 → 删去全称量词 → 母式化合取范式 → 按 ∧ 拆成子句集

一旦完成前束范式,后面几步基本都是机械操作。Skolem 化消掉存在量词后,剩下的量词全是全称量词,因为约定一切变元默认全称量化,量词本身就可以省略不写。这时母式是一个无量词公式,再用分配律把它化成合取范式,然后像剥橘子一样按 ∧ 拆开,就得到了子句集。

子句集是归结原理的操作对象。归结法想要证明一个公式不可满足,就把它的子句集拿出来,不断做归结,直到推出空子句。整个过程里,前束范式承担的是“第一步分拣”的角色:它把所有量词集中到公式最前,让后续的 Skolem 化和子句化有一个干净统一的入口。没有这个入口,自动化证明的每一步都会因为量词位置五花八门而变得不可控。

5.3 前束范式的理论价值:量词前缀的形状有判定的意义

除了工具价值,前束范式在逻辑理论中本身就是一个重要的分类抓手。把公式化成前束范式后,量词的“顺序模式”就被凸显出来了。比如 ∀∃ 前缀和 ∃∀ 前缀表达的是完全不同的性质,这一点在很多数学定义中反复出现。逻辑学家甚至专门研究过:具有某类特定量词前缀的公式,其可满足性问题是否可判定,复杂度是高是低。这些结果全部是在前束范式的基础上讨论的,因为前束范式把复杂的量词嵌套问题还原为简单的前缀模式分析。

所以“把量词赶到前面去”不是一种为了统一而统一的洁癖,而是把一个隐藏在嵌套结构里的难题,转化成一个能够系统分析的对象。理解到这一层,再看前束范式就不会觉得它只是一个枯燥的语法练习了。

我自己的教学体会是:能把前束范式稳稳做对的人,通常不是背规则背得最熟的人,而是做之前会先在草稿纸上把每个量词的辖域用括号标清楚、把同名变元提前换掉的人。这套“先标注、再动笔”的习惯,比任何口诀都重要。最后分享一个小技巧:每次化完前束范式,把结果里出现在母式中的每个变元都对照前缀“点一次名”,确认每一个变元都能找到自己的量词来源。这一步只要花半分钟,却能省下你之后检查大半天的时间。

相关推荐

在不遺失資料的情況下降級 MacOS 的 6 種方法 [過去的補救措施]
有福之“舟” 逐浪争先
趣投必发365

有福之“舟” 逐浪争先

🗓️ 02-23 👁️ 9486
7200 转超薄机械硬盘 vs. 5200 转机械硬盘
365bet提款条件

7200 转超薄机械硬盘 vs. 5200 转机械硬盘

🗓️ 12-04 👁️ 5955
刘翔退役六年了 两次奥运伤退成为一生的痛点
趣投必发365

刘翔退役六年了 两次奥运伤退成为一生的痛点

🗓️ 10-25 👁️ 3822
你们电池能用多长时间?看视频一个小时就得掉10以上,是不是都这样?
揭秘澳埃足球对决:谁将问鼎胜利之巅?
趣投必发365

揭秘澳埃足球对决:谁将问鼎胜利之巅?

🗓️ 08-21 👁️ 6427
轻松解锁Windows:一招教你轻松进入DOS环境
365bet是什么

轻松解锁Windows:一招教你轻松进入DOS环境

🗓️ 09-06 👁️ 1422
白条鱼能长多大,能活多久
365bet提款条件

白条鱼能长多大,能活多久

🗓️ 08-02 👁️ 4424
轻松解锁Windows:一招教你轻松进入DOS环境
365bet是什么

轻松解锁Windows:一招教你轻松进入DOS环境

🗓️ 09-06 👁️ 1422
怎么查手机号码绑定了什么
365bet提款条件

怎么查手机号码绑定了什么

🗓️ 07-29 👁️ 1262
帝企鹅才没有那么“宅”
365bet是什么

帝企鹅才没有那么“宅”

🗓️ 09-20 👁️ 3832
独立基础的类型,构造及绘制方法
365bet提款条件

独立基础的类型,构造及绘制方法

🗓️ 11-29 👁️ 5396