Regex 如何证明(或发现)两个正则表达式是否相同或等价?
例如,在给我的一个作业中,我们被要求找出两个正则表达式是否相等Regex 如何证明(或发现)两个正则表达式是否相同或等价?,regex,finite-automata,regular-language,equivalence,Regex,Finite Automata,Regular Language,Equivalence,例如,在给我的一个作业中,我们被要求找出两个正则表达式是否相等 (a+b+c)* and ((ab)**c*)* 我的问题是一个人应该怎么做?如果我为两个TG绘制转换图,然后通过它运行几个字符串,并显示两个TG都能够接受它,这是一个充分的证据吗?如果没有,我该怎么做?有没有一种数学/公理化的方法 提前谢谢 编辑:还有一件事我想澄清,这与这个问题有关。下图所示的两个FAs是否相同 i、 e.上图中的(1)和(2)是否相同 假设 插入空格以进行说明 ((ab)**c*)*实际上是((ab)**
(a+b+c)* and ((ab)**c*)*
我的问题是一个人应该怎么做?如果我为两个TG绘制转换图,然后通过它运行几个字符串,并显示两个TG都能够接受它,这是一个充分的证据吗?如果没有,我该怎么做?有没有一种数学/公理化的方法
提前谢谢
编辑:还有一件事我想澄清,这与这个问题有关。下图所示的两个FAs是否相同
i、 e.上图中的(1)和(2)是否相同 假设
((ab)**c*)*
实际上是((ab)**c*)*
*^
和$
包装abccabcc
将不匹配(a+b+c)*
但将匹配((ab)*c*)*
我是怎么找到这个的
当我仔细观察这些模式时,我发现了两件事
{1,}
。所以总是有a序列和b序列并排出现。与aaaabb、aabbbbb等类似,但在第二种模式中,a和be将与单个实例并排出现。像ab,阿巴巴,阿巴巴,等等它们是不同的,这很容易用量词来区分。要使第一个表达式匹配任何内容,它必须包含
c
。第二种方法显然不需要c
。(还有很多不同之处,但这应该让你开始了)
如果语言
由R(即正则表达式生成的字符串集)定义
R) 等于T.定义的语言,以证明
正则表达式,我们使用集合论的包含证明。那个
是,如果S1是由正则表达式R生成的字符串集,并且
S2是正则表达式T生成的字符串集,我们必须
证明S1⊆ S2和S2⊆ S1。两个方向都需要证明
集合的相等性
--从CSc 4340 GSU Fall 09(Raj Sunderraman博士)的课堂讲稿中,有一种算法可以确定它们是否相等:
编辑:是的,这些DFA是相同的。第一个只是第二个的简写符号。因为这是家庭作业,我不会给你完整的答案,但我会告诉你一个你需要知道的关键事实:对于给定的有限状态语言,用最少状态数识别它的DFA是唯一的
顺便说一句,我不相信你的教授会在不教你怎么做的情况下布置家庭作业。离开互联网,阅读你的课堂讲稿和/或课本。((ab)^^c^)^=(a^b^c^)^=(a+b+c)^为什么表达式中有空格?我想是手工的吧?如何通过编程实现这一点是众所周知的,但我认为(我不太了解相关算法)手工完成整个过程相当复杂。
((a b)**c*)*
是错误的@谢谢你的回复。是的,空间是多余的。我已经编辑了这个问题。是的,但由于这两种语言的大小都是无限的,这无助于证明任何事情。请尽量避免将代码作为答案,并尝试解释它的作用和原因。对于没有相关编码经验的人来说,您的代码可能不明显。如果最小DFA是唯一的,为什么我们需要步骤4-6?构建最小DFA并对其进行比较是否不够?