【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明

2024-06-24 00:44

本文主要是介绍【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 💬 写在前面:所有编程语言都是通过归纳法定义的。因此,虽然编程语言本身是有限的,但用该语言编写的程序数量是没有限制的,本章将学习编程语言研究中最基本的归纳法。本章我们继续讲解归纳法,介绍归纳假设和结构性归纳法。

目录

0x00 归纳假设 (IH) 和结构归纳法

0x01 归纳假设的证明


0x00 归纳假设 (IH) 和结构归纳法

归纳法是一种用于证明归纳定义的集合中的元素所具有性质的方法。

假设存在一个通过归纳法定义的集合 S,为证明集合 S 中的所有元素 x 都满足某个性质 P(x)

需证明以下两点:

① 若 x 是 S 的基本元素,则直接证明 P(x) 。

② 若 x 是利用 S 中的其他元素 y_1, y_2,..., y_n 归纳定义出来的,那么:

P(y_1),P(y_2),...P(y_n)

并假设它们都成立,然后利用这些假设来证明 P(x) 成立。

.

在这种情况下,P(y_1),P(y_2),...P(y_n) 被称为 归纳假设 (induction hypothesis, IH) 。

这种证明方法称为 结构归纳法 (structural induction)。

当集合 S 是自然数集时,这种方法就称为 数学归纳法 (MI),是结构归纳法的一种特殊情况。

0x01 归纳假设的证明

举个例子,假设集合 S 是通过以下推理规则定义的集合:

让我们用结构归纳法来证明这样定义的集合 S 中的所有元素都能被 3 整除。

首先证明基本元素的情况。如果 x 等于 3,那么显然 x 能被 3 整除。

接下来,我们证明归纳生成的元素的情况,假设元素是按照以下规则生成的:

归纳假设 (induction hypothesis, I.H.) 如下:

x 和 y 能被 3 整除

根据归纳假设,设 x = 3k_1,\, y = 3k_2,需要证明的是:

x + y 能被 3 整除

证明如下:

x+y=3k_1+3k_2   ··· 归纳假设

=3(k_1+k_2)

.

我们再举个例子,将集合 S 定义为通过以下推理规则所定义的集合:

并且当 x\in S 时,设 l(x) 和 r(x) 分别表示 x 中包含的左括号和右括号的数量。

它们如下通过归纳法定义:

现在,我们来证明对于集合 S 的所有元素 x,左括号和有货好的数量是对等的。

我们可以如下表示将要证明的命题:

对于  \forall x\in Sl(x)=r(x)

可以通过 结构归纳法 进行如下证明:

基础元素是 x=0,根据函数 l 和 r 的定义,成立 l(x)=1=r(x)

归纳生成的情况有以下两种:

.

规则一 的情况下,归纳假设如下:

l(x)=r(x)

需要证明的是 l\big(\, (x)\, \big)=r\big(\, (x)\, \big),证明如下:

.

规则二 的情况下,归纳假设如下:

l(x)=r(x),\, \, \, \, \, l(y)=r(y)

需要证明的是 l(xy)=r(xy),证明方式如下:

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.23
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

- R. Neapolitan, Foundations of Algorithms (5th ed.), Jones & Bartlett, 2015.

- T. Cormen《算法导论》(第三版),麻省理工学院出版社,2009年。

- T. Roughgarden, Algorithms Illuminated, Part 1~3, Soundlikeyourself Publishing, 2018.

- J. Kleinberg&E. Tardos, Algorithm Design, Addison Wesley, 2005.

- R. Sedgewick&K. Wayne,《算法》(第四版),Addison-Wesley,2011

- S. Dasgupta,《算法》,McGraw-Hill教育出版社,2006。

- S. Baase&A. Van Gelder, Computer Algorithms: 设计与分析简介》,Addison Wesley,2000。

- E. Horowitz,《C语言中的数据结构基础》,计算机科学出版社,1993

- S. Skiena, The Algorithm Design Manual (2nd ed.), Springer, 2008.

- A. Aho, J. Hopcroft, and J. Ullman, Design and Analysis of Algorithms, Addison-Wesley, 1974.

- M. Weiss, Data Structure and Algorithm Analysis in C (2nd ed.), Pearson, 1997.

- A. Levitin, Introduction to the Design and Analysis of Algorithms, Addison Wesley, 2003. - A. Aho, J. Hopcroft, and J. Ullman, Data Structures and Algorithms, Addison-Wesley, 1983.

- E. Horowitz, S. Sahni and S. Rajasekaran, Computer Algorithms/C++, Computer Science Press, 1997.

- R. Sedgewick, Algorithms in C: 第1-4部分(第三版),Addison-Wesley,1998

- R. Sedgewick,《C语言中的算法》。第5部分(第3版),Addison-Wesley,2002

这篇关于【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088728

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel