计算理论编程实践与探索
1 面向学生的计算理论之旅
踏上计算理论的学习之旅,“理论”二字或许会让人觉得这门学科艰涩、枯燥且令人望而生畏。以往,形式语言和自动机理论的教学往往局限于纸笔演算,学生们需要在纸上设计机器和文法,然后撰写关于它们性质的定理。这与我们日常编程实践中通过解释器、编译器和测试来获取即时反馈的方式大相径庭。
实际上,形式语言和自动机理论本质上就是编程。机器和文法是使用 API 表示的程序,它们不仅可以被实现,而且应该被实现。通过测试验证程序的正确性后,我们就可以对其进行形式化推理并撰写定理。
在这个过程中,我们使用嵌入在 Racket 中的特定领域语言 FSM(Functional State Machines)来编写程序。FSM 允许我们实现所设计的机器和文法,对设计进行测试,并可视化机器的执行过程。这样,我们可以在提交作业评分和撰写证明之前对设计进行调试。此外,我们还可以将设计的算法作为构造性证明的一部分来实现。
这一学习过程不仅能提升编程能力,还能帮助我们区分哪些问题可以解决,哪些问题无法解决。例如,判断一个给定程序 P 在输入 w 时是否会停止,这是一个极具挑战性的问题,我们将在后续的学习中探寻其答案。
2 面向教师的教学建议
对于教授高年级本科生或研究生形式语言和自动机理论课程的教师来说,这一教学方式既包含传统的数学推导,又有显著的不同。我们鼓励学生在撰写证明之前先实现并测试他们的设计。有时候,学生的设计可能难以理解或存在错误,通过将机器、文法和构造性算法以程序的形式呈现,可以缓解这一问题,并为与学生讨论解决方案的设计提供框架。
除了对语言进行形式化推理,学生还需要对他们设计的机器和
计算理论编程实践指南
超级会员免费看
订阅专栏 解锁全文

1499

被折叠的 条评论
为什么被折叠?



