热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

[离散数学]命题逻辑

这里是离散数学第一篇学习笔记qwq,也是我尝试使用Markdown记课上笔记的开始,离散数学是一门研究离散量的科学,是数据结构、算法设计的基础,这里不仅有有趣的逻辑与集合,还会有“

这里是离散数学第一篇学习笔记 qwq,也是我尝试使用 Markdown 记课上笔记的开始,离散数学是一门研究离散量的科学,是数据结构、算法设计的基础,这里不仅有有趣的逻辑与集合,还会有“超级好玩”的群论和图论等待你去探索。就让我们一起畅游这“魔法”的世界吧!

由于离散数学的知识较多,这里是数理逻辑部分的笔记 qwq。

本笔记采用在课上简记,课后完善的模式,有可能因时间不够停更,并且作者认为比较简单的证明和定义会简写甚至略去,并且几乎不会举例子。同时还总是希望尽量不全部按照书上写的定义而通过自己语言来叙述,虽然很多时候最后还是感觉自己表述的不清楚而写的书上的定义。

本学科为 28 课时讲课 + 4 课时实验 (office 315)

似乎没有找到可以显示出课本上所印刷的 “不可兼析取” 符号的 LaTeX 公式,所以使用 \oplus(即 \(\oplus\))来代替。


\[\newcommand{\l}{\leftarrow}

\newcommand{\r}{\rightarrow}

\newcommand{\u}{\uparrow}

\newcommand{\d}{\downarrow}

\newcommand{\L}{\Leftarrow}

\newcommand{\R}{\Rightarrow}

\newcommand{\lr}{\leftrightarrow}

\newcommand{\Lr}{\Leftrightarrow}

\newcommand{\xl}{\xleftarrow}

\newcommand{\xr}{\xrightarrow}

\rule{750px}{1px}

\]

首先给出命题的概念:能表达判断且有确切的真值陈述句。命题的真值只有两种即 True 和 False,但悖论这种自相矛盾的陈述句不是命题,因为它不可能有确切的真值。

我们可以根据命题的描述复杂程度将命题分为原子命题和复合命题,原子命题是一种不可分解为更简单语句的陈述句,复合命题是由若干原子命题通过联结词构成的命题。

为了便于数学的符号化表示,我们需要对联结词进行明确规定并给出其符号表示,下面是一些基本的联结词:(按照优先级排序)





































名称符号意义
否定\(\lnot\)取反
合取\(\and\)
析取\(\or\)可兼或
条件\(\r\)若…则…
双条件(同或)\(\lr\)当且仅当

对于条件句,我们总是遵循善意的推并,即当前件(前提)为假时,无论后件(结论)真值为何,我们总是认为条件句的真值为真。并且在条件句和双条件句中,我们并不要求它们的前件与后件有实际的联系。

有了以上的概念,我们就可以将现实生活中的一些可以被视为命题的陈述句翻译为我们的数学语言了,下文给出了翻译的大致方法:



  1. 找到原语句中包含的原子命题;



  2. 将原语句中的关联词翻译成适当的逻辑联结词;



  3. 将其用数学的符号写出。



值得注意的一点是,关联词 ”只有…才…“ 是条件句。A if B 为 \(B \r A\),A only if B 为 \(A \r B\),A if and only if B 为 \(A \lr B.\)

命题常量为表示确定命题的符号,命题变元为表示任意命题的符号,但其不是命题,原子变元为表示原子命题的命题变元,给命题变元指定值的操作叫做指派。

命题公式采用递归(下文中 1. 称为基础,2. 3. 称为归纳,4. 称为界限)的定义,规定为:



  1. 单个命题变元本身为命题公式;

  2. 如果 \(P\) 为合法的命题公式,则 \(\lnot P\) 也为合法的命题公式;

  3. 如果 \(P, Q\) 为合法的命题公式,则 \((P \and Q), (P \or Q), (P \r Q), (P \lr Q)\) 均为合法的命题公式。

  4. 当且仅当通过若干个命题变元和联结词通过法则 1. 2. 3. 进行有限次的拼接所形成的字符为命题公式。

对于一个命题公式中分量真值的各种指派所形成的各种组合所汇列成表,即为命题公式的真值表。

当给两个命题公式任意一组真值指派,它们的真值始终相等,则两个命题公式等价。我们如果想要证明两个问题中,两个命题公式是否等价,可以通过分别列出其真值表,而由 \(n\) 个命题变元所组成的命题有 \(2^n\) 种不同的真值指派,所以如果要依靠真值表证明,显然过于繁琐。我们可以通过一些法则来化简它们,在下文的推理理论部分会整合此类公式,所以这里先不列出公式。

子公式为一个命题公式的一部分,且这一部分本身是一个合法的命题公式。如果一个命题公式的子公式被其等价的命题公式置换,置换后得到的命题公式与原命题公式等价。

如果一个命题公式,无论对其分量做什么指派,其真值永为真,则称该命题公式为重言式(也称永真式)。如果存在一种对其分量的指派使得命题公式真值可以为真,则称命题公式为可满足的。显然重言式是特殊的可满足式。如果一个命题公式不可满足,则称其为矛盾式(或永假式)。如果 \(A \and B\) 为矛盾式,则称 \(A\)\(B\) 是不相容的。

容易注意到,当且仅当 \(P \lr Q\) 为重言式时,有 \(P \Lr Q\)

我们定义当 \(P \r Q\) 为重言式时,我们称 \(P\) 蕴含 \(Q\),记作 \(P \R Q\)。注意 \(P \r Q\)\(Q \r P\) 并不等价,通过真值表验证,我们有:


\[(P \rightarrow Q) \Leftrightarrow (\lnot Q \rightarrow \lnot P) \\

(Q \rightarrow P) \Leftrightarrow (\lnot P \rightarrow \lnot Q)

\]

其中对 \(P \r Q\) 来说,\(Q \r P\) 称为其逆换式,\(\lnot P \r \lnot Q\) 称为其反换式,\(\lnot Q \r \lnot P\) 称为其逆反式。

如果要证 \(P \R Q\),只需证当 \(P\) 为 1 时,\(Q\) 的真值为 1,或者当 \(Q\) 为 0 时,\(P\) 的真值为 1。这两种情况均可说明 \(P \R Q.\)

\(P \Lr Q\) 当且仅当 \(P \R Q\)\(Q \R P.\)

下面介绍对偶和范式的概念,对偶是指在给定的命题公式中将 \(\and\) 换成 \(\or\)\(\or\) 换成 \(\and\),将 \(\mathbf{T}\) 换为 \(\mathbf{F}\),则改变后的命题公式和原公式互为对偶。命题公式 \(A\) 的对偶式记为 \(A^*\)。我们容易发现,如果 \(A\) 是由 \(n\) 个命题变元 \(P_1, P_2, \cdots, P_n\) 组成(记作 \(A(P_1, P_2, \cdots, P_n)\)),则有:


\[\lnot A(P_1, P_2, \cdots, P_n) \Lr A^*(\lnot P_1, \lnot P_2, \cdots, \lnot P_n)

\]

根据上述结论,我们有一个推论:若 \(A \Lr B\),则 \(A^* \Lr B^*\)

合取范式是形如:


\[A_1 \and A_2 \and \cdots \and A_n \, ,(n \geq 1)

\]

其中 \(A_i \, (1 \leq i \leq n)\) 为由命题变元或其否定所组成的析取式。

析取范式的定义形式和合取范式类似,不再赘述。

容易发现与一个命题公式等价的析取范式有许多个,为了方便,我们希望找到一个较为规范的析取范式,使得每个命题公式只对应一个这样规范化的析取范式。考虑到对于几个等价的命题公式,它们的真值表一定是唯一的,所以我们就希望找到一种将真值表中的值 “翻译” 成命题公式的方法,于是就有了小项。

小项即指 \(n\) 个命题变元的合取式,其中每个命题变元或其否定在式中恰好出现一次,且不与其否定同时出现。显然对于 \(n\) 个命题变元的小项,其有以下性质:



  1. 一个小项的真值为真当且仅当命题变元的真值指派与小项中命题变元的出现形式一一对应;

这里的对应是指,例如对于 3 个命题变元,\(P, Q, R\),我们讨论的小项为 \(P \and \lnot Q \and R\),则当且仅当将 \(P, R\) 指派为 1,\(Q\) 指派为 0,此时该小项的真值才为 1。也就是说对应关系是指将在小项中出现其本身的命题变元指派为 1,出现其否定的命题变元指派为 0。所以我们也可以使用二进制来表示小项,如上文的小项记作 \(m_{101}.\)



  1. 任意两个不同小项的合取为矛盾式;

  2. 所有小项的析取为重言式;

  3. 小项的总数为 \(2^n\) 个。

主析取范式即为仅由小项的析取组成的命题公式,由小项的性质可知,其反映了命题公式的真值表。所以我们很容易得出,一个命题公式所有在真值表中为 \(\mathbf{T}\) 的指派所对应的小项组成的析取为该命题公式的主析取范式。我们同样可以通过逻辑推理将命题公式转化为主析取范式。

我们主要通过以下几步利用逻辑推理将命题公式转化为主析取范式:



  1. 求与命题公式等价的析取范式;

  2. 去除式中为矛盾式的子公式,合并相同的子公式;

  3. 使用同一律补项,结合律展开,使之变为小项的析取式,对小项去重后即得到主析取范式。

对于主析取范式,我们借助了小项的概念,而对于主合取范式,我们则要借助大项的概念。

大项即指 \(n\) 个命题变元的析取式,其中每个命题变元或其否定在式中恰好出现一次,且不与其否定同时出现。我们可以仿照小项的性质,发现大项的以下性质:



  1. 一个大项的真值为假当且仅当命题变元的真值指派与小项中命题变元的出现形式一一对应(对应形式与小项相反,如仍对于 3 个命题变元组成的一个大项 \(P \or \lnot Q \or R\),我们记为 \(M_{010}\));

  2. 任意两个不同大项的析取为重言式;

  3. 所有大项的合取为矛盾式;

  4. 大项的总数为 \(2^n\) 个。

同样我们也有:

主合取范式为仅由大项的合取组成的命题公式,由大项的性质可知,其反映了命题公式的真值表。所以我们很容易得出,一个命题公式所有在真值表中为 \(\mathbf{F}\) 的指派所对应的大项组成的合取为该命题公式的主合取范式。显然我们可以也仿照求主析取范式的方法求主合取范式,方法不再赘述。

我们发现,若全集 \(U = \{0, 1, \cdots, 2^n - 1\}\)\(S\) 为一个命题公式主析取范式中所有小项的下标所组成的集合,则主析取范式与主合取范式的关系为,(这里 \(\sum\) 为析取,\(\prod\) 为合取):


\[\sum_{i \in S} m_i \Leftrightarrow \prod_{i \in \overline{S}} M_i

\]

有了前面的各种铺垫,我们发现,我们当要通过一些已知的前提推理一些结论时,我们可以通过符号式的表达将结论推理出来。当然这里的推理仅是对命题中假设的真值和联结词的转化。为了方便,我们常常将前提的真值设为真。

我们对有效结论给出一个符号化的定义:如果 \(A, C\) 两个命题公式有 \(A \R C\),则称 \(C\)\(A\) 的有效结论,更普遍的如果 \(n\) 个命题公式 \(H_1, H_2, \cdots, H_n\) 满足 \(\prod_{i = 1}^n H_i \R C\),则称 \(C\) 为前提 \(H_1, H_2, \cdots, H_n\) 的有效结论。

我们判定有效结论的过程为论证的过程。我们会分别介绍几种证法:



  • 真值表法

直接将前提和结论中所有的命题变元列真值表,对应确定所有真值的可能性,看是否有 \(\prod_{i = 1}^n H_i \R C.\)



  • 直接证法

直接证法使用推理规则使用已知的等价公式或蕴含公式推出结论,其中有两个规则:

P 规则:前提在推导的过程中都可以引入推导过程。

T 规则:在推导过程中,如果有一个或多个公式与前提或已推导出的命题公式所蕴含或等价,则其可以引入推导过程。

我们在此列出一些常用的蕴含公式:





























































标号内容标号内容
$$I_1$$$$P \and Q \R P$$$$I_9$$$$P, Q \R P \and Q$$
$$I_2$$$$P \and Q \R Q$$$$I_{10}$$$$\lnot P, P \or Q \R Q$$
$$I_3$$$$P \R P \or Q$$$$I_{11}$$$$P, P \r Q \R Q$$
$$I_4$$$$Q \R P \or Q$$$$I_{12}$$$$\lnot Q, P \r Q \R \lnot P$$
$$I_5$$$$\lnot P \R P \r Q$$$$I_{13}$$$$P \r Q, Q \r R \R P \r R$$
$$I_6$$$$Q \R P \r Q$$$$I_{14}$$$$P \or Q, P \r R, Q \r R \R R$$
$$I_7$$$$\lnot (P \r Q) \R P$$$$I_{15}$$$$A \r B \R (A \or C) \r (B \or C)$$
$$I_8$$$$\lnot (P \r Q) \R \lnot Q$$$$I_{16}$$$$A \r B \R (A \and C) \r (B \and C)$$

一些常用的等价公式:















































































标号内容标号内容
$$E_1$$$$\lnot (\lnot P) \Lr P$$$$E_{12}$$$$R \or (P \and \lnot P) \Lr R$$
$$E_2$$$$P \and Q \Lr Q \and P$$$$E_{13}$$$$R \and (P \or \lnot P) \Lr R$$
$$E_3$$$$P \or Q \Lr Q \or P$$$$E_{14}$$$$R \or (P \or \lnot P) \Lr \mathbf{T}$$
$$E_4$$$$(P \and Q) \and R \Lr P \and (Q \and R)$$$$E_{15}$$$$R \and (P \and \lnot P) \Lr \mathbf{F}$$
$$E_5$$$$(P \or Q) \or R \Lr P \or (Q \or R)$$$$E_{16}$$$$P \r Q \Lr \lnot P \or Q$$
$$E_6$$$$P \and (Q \or R) \Lr (P \and Q) \or (P \and R)$$$$E_{17}$$$$\lnot (P \r Q) \Lr P \and \lnot Q$$
$$E_7$$$$P \or (Q \and R) \Lr (P \or Q) \and (P \or R)$$$$E_{18}$$$$P \r Q \Lr \lnot Q \r \lnot P$$
$$E_8$$$$\lnot (P \and Q) \Lr \lnot P \or \lnot Q$$$$E_{19}$$$$P \r (Q \r R) \Lr (P \and Q) \r R$$
$$E_9$$$$\lnot (P \or Q) \Lr \lnot P \or \lnot Q$$$$E_{20}$$$$P \lr Q \Lr (P \r Q) \and (Q \r P)$$
$$E_{10}$$$$P \or P \Lr P$$$$E_{21}$$$$P \lr Q \Lr (P \and Q) \or (\lnot P \and \lnot Q)$$
$$E_{11}$$$$P \and P \Lr P$$$$E_{22}$$$$\lnot (P \lr Q) \Lr P \lr \lnot Q$$


  • 间接证法(反证法,CP 规则)

有时候我们通过直接证法证明命题过于困难,我们可以将这个问题通过某种方式转化:

反证法,要证 \(\prod_{i = 1}^n H_i \R C\),设 \(S \Lr \prod_{i = 1}^n H_i\),则有 \(S \r C \Lr \lnot S \or C \Lr \mathbf{T}\),则 \(S \and \lnot C\) 为矛盾式,故只需证 \(\prod_{i = 1}^n H_i\)\(\lnot C\) 不相容。

CP 规则, 如果要证 \(\prod_{i = 1}^n H_i \R (R \r C)\),设 \(S \Lr \prod_{i = 1}^n H_i\),则有 \(S \r (R \r C) \Lr (S \and R) \r C \Lr \mathbf{T}\),故只需证 \(\prod_{i = 1}^n H_i \and R \R C.\)

我们下面再介绍一些联结词:不可兼析取(异或),条件否定,与非,或非。

我们定义联结词不可兼析取(异或)记作 \(\oplus\),我们直接使用之前定义过的命题公式定义它:\(P \oplus Q \Lr (P \and \lnot Q) \or (\lnot P \and Q)\),根据其真值表,我们可以将其视为不进位的二进制加法。除定义之外,其还有以下性质:


\[P \oplus Q \Lr Q \oplus P \\

(P \oplus Q) \oplus R \Lr P \oplus (Q \oplus R) \\

P \and (Q \oplus R) \Lr (P \and Q) \oplus (P \and R) \\

P \oplus Q \Lr \lnot (P \lr Q) \\

P \oplus P \Lr \mathbf{F}, \mathbf{F} \oplus P \Lr P, \textbf{T} \oplus P \Lr \lnot P

\]

我们定义联结词条件否定记作 \(\xr{c}\),与非记作 \(\u\),或非记作 \(\d\),我们仍然用之前的命题公式定义它们:


\[P \xr{c} Q \Lr \lnot (P \r Q) \\

P \u Q \Lr \lnot (P \and Q) \\

P \d Q \Lr \lnot (P \or Q)

\]

我们可以看到与非或非的一些性质:


\[P \u P \Lr \lnot P \\

(P \u Q) \u (P \u Q) \Lr P \and Q \\

(P \u P) \u (Q \u Q) \Lr P \or Q \\

P \d P \Lr \lnot P \\

(P \d Q) \d (P \d Q) \Lr P \or Q \\

(P \d P) \d (Q \d Q) \Lr P \and Q

\]

我们根据 \(P, Q\) 的真值表可能的真值情况(一共有 \(2^4 = 16\) 种),推断出不需要新的联结词。

而由等价公式可知,一些联结词总是可以被另外一些联结词的公式等价替换。我们有时希望命题公式中出现联结词的种类尽可能少,但又不可以太少,以至于我们不能表达所有命题公式。所以我们给出最小联结词组的概念:即对于一个由联结词组成的集合,如果任意命题公式都可以等价转化成只使用这个集合中联结词组成的命题公式,且这个集合的任意真子集不具有这个性质,那么就称这个集合为最小联结词组。



至此,本部分的知识已经更新完毕,感觉这一章充满了数学中逻辑的味道,终于明白了我们证明问题其实在描述什么。其中引出主析取范式的想法,即 “使用某种方法让命题公式可以直接描述真值表” 的想法着实让我眼前一亮。我个人比较喜欢证明和研究定义为何是良定义,大概也因为会时不时看到这种让我感觉到精彩的思路。

数学真的可以被称作是一门魔法,它就在我们身边,却又将看似不可能的东西联系起来。我也要尽快学习,成为一个有一定资质的魔法师 qwq!醒醒,你是计算机专业的(逃



推荐阅读
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 无线认证设置故障排除方法及注意事项
    本文介绍了解决无线认证设置故障的方法和注意事项,包括检查无线路由器工作状态、关闭手机休眠状态下的网络设置、重启路由器、更改认证类型、恢复出厂设置和手机网络设置等。通过这些方法,可以解决无线认证设置可能出现的问题,确保无线网络正常连接和上网。同时,还提供了一些注意事项,以便用户在进行无线认证设置时能够正确操作。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
author-avatar
缕足迹_124
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有