查找定义和符号,如++;在Coq中

查找定义和符号,如++;在Coq中,coq,Coq,我们如何获得这些符号的定义/类型,如列表的“+”,或列表的“+” 我尝试过:Search++,Search++,Search(+++), 搜索关于…和 检查(+,检查“++”,检查(++) 但是,它们都不起作用 SearchAbout“++”确实显示了一些信息,但没有显示“++”的定义 Locate "++". 查找符号 然后您可以打印/检查所表示的实际术语。除了前面的答案之外,您还可以使用展开“+”展开其定义,而无需先定位它 例如: Coq < Goal forall A (l : l

我们如何获得这些符号的定义/类型,如
列表的
“+”
,或
列表的
“+”

我尝试过:
Search++
Search++
Search(+++)
搜索关于…
检查(+
检查“++”
检查(++)

但是,它们都不起作用

SearchAbout“++”
确实显示了一些信息,但没有显示
“++”
的定义

Locate "++".
查找符号


然后您可以
打印
/
检查
所表示的实际术语。

除了前面的答案之外,您还可以使用
展开“+”
展开其定义,而无需先定位它

例如:

Coq < Goal forall A (l : list A), l ++ [] = [].
1 subgoal

  ============================
   forall (A : Type) (l : list A), l ++ [] = []

Unnamed_thm < unfold "++".
1 subgoal

  ============================
   forall (A : Type) (l : list A),
   (fix app (l0 m : list A) {struct l0} : list A :=
      match l0 with
      | [] => m
      | a :: l1 => a :: app l1 m
      end) l [] = []
Coq<所有A(l:列表A)的目标,l++[]=[]。
1子目标
============================
对于所有(A:类型)(l:列表A),l++[]=[]
未命名的路径<展开“+”。
1子目标
============================
forall(A:类型)(l:列表A),
(修复应用程序(l0 m:list A){struct l0}:list A:=
将l0与
|[]=>m
|a::l1=>a::应用程序l1 m
完)l[]=[]

Nit:你大概是指
l++[]=l
,而不是
l++[]=[]
?@MarkDickinson,这会使它可证明,是的。:)谢谢,这很有用。但我仍然想知道,在emacs&proof general中是否有一个方便的命令来执行此操作?@Loochen1990在proof general中,默认的快捷方式是检查用的
C-C-a C-C
,打印用的
C-C-a C-p
。如果您使用菜单,它们也在常规菜单中的某个位置。谢谢,但是有“定位”的快捷方式吗?定位的快捷方式是
C-C-a C-n