Syntax 使用Coq等式定义
我有一个平等的定义:Syntax 使用Coq等式定义,syntax,coq,Syntax,Coq,我有一个平等的定义: Definition reglang_eq := forall (A : Set) (r1 r2 : RegularLanguage A), (forall xs : List A, EvalInRegLang A r1 xs <-> EvalInRegLang A r2 xs) -> r1 = r2 . 当我尝试应用或重写reglang\u eq时,我得到一个错误。如果我理解正确,这应该只是因为我不知道正确的语法,但我越来越沮丧
Definition reglang_eq :=
forall (A : Set)
(r1 r2 : RegularLanguage A),
(forall xs : List A,
EvalInRegLang A r1 xs <-> EvalInRegLang A r2 xs)
-> r1 = r2
.
当我尝试应用或重写reglang\u eq
时,我得到一个错误。如果我理解正确,这应该只是因为我不知道正确的语法,但我越来越沮丧,因为我无法找到我能理解的文档。(尽管有多少个月我一直在跌跌撞撞地证明关于正规语言的东西。)
感谢您的帮助。如果Concat确实是一个常规的语言构造函数,您将无法证明您的目标。这里有两个问题:
谢谢,很抱歉回复晚了。因此,如果我理解正确,我不能说
EvalInRegLang A r1 xs EvalInRegLang A r2 xs
意味着r1=r2
,因为Coq不会接受它<代码>=只能用于构造性相等。在这种情况下,我想我的问题是,是否有某种方法可以证明集合相等?因为集合不需要构造成相同的,所以它们必须是相同的。(我猜?)这应该是一个新问题吗?@user2063685这取决于你所说的“Set”是什么意思。我认为这很有趣,值得提出自己的问题,我很乐意回答:)
Concat A (EmptyStr A) r = Concat A r (EmptyStr A)
(* note: Concat is a RegularLanguage constructor *)