查找定义和符号,如++;在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