在类型分辨率发散后,停留在“Retracting buffer”

时间:2018-02-03 16:28:21

标签: coq

使用类型类时,Coq有时会发散。当在Proof General下发生这种情况时,Emacs也会挂起。

我知道恢复的最好方法是中断emacs(C-g)并重启Coq(C-c C-x)。但是,这不仅仅是杀死Coq进程,而是让我处于一种模式,其中Emacs再次被挂起,显示“缩回缓冲区...”很长一段时间(有时这么长,我放弃了,只是开始一个全新的emacs !)。

为什么呢?

有更好的方法吗? (并且:当发生这种情况时,是否有一个简单的第一步来查看首先发生的分歧?)

4 个答案:

答案 0 :(得分:2)

如果emacs挂起除垃圾收集以外的任何内容,通常可以使用{ "type": "Microsoft.KeyVault/vaults/accessPolicies", "name": "[concat(parameters('keyVaultSettings').name, '/add')]", <!-- notice the "/add" --> "apiVersion": "2015-06-01", "properties": { "mode": "Incremental", "accessPolicies": [ { "tenantId": "[reference(concat(resourceId('Microsoft.Web/sites', parameters('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').tenantId]", "objectId": "[reference(concat(resourceId('Microsoft.Web/sites', parameters('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]", "permissions": { "secrets": [ "get", "list" ] } } ] } } 中断它。如果C-g / C-c C-x不起作用,您可以使用C-c C-c从进程管理器/命令行中删除coqtop进程。

这是因为coqtop有一些循环,它不检查中断,或者不经常检查,因此它不能及时捕获来自PG的中断。

此外,正如其他答案所述,pkill coqtop会在Set Typeclasses Debug*response*缓冲区中为您提供非常详细的类型类分辨率记录。

答案 1 :(得分:1)

我不知道这实际上是否有效,但有时我发现如果我按C-c C-c几次,Proof General会中断Coq。

关于第二个问题,您可以在调用有问题的行之前将Set Typeclasses Debug.添加到脚本中。然后Coq将在Emacs的*response*缓冲区中打印其实例搜索的跟踪。如果您的脚本正在循环,请确保在触发循环后立即点击C-c C-c,因为跟踪可以非常快地跟踪

答案 2 :(得分:0)

最后一点,我提醒自己

  

设置Typeclasses Debug。

答案 3 :(得分:0)

奇怪:我真的不确定emacs是否卡在最后或是否是显示错误:似乎如果我切换到另一个屏幕然后切换回来我发现 coq已退出我期待的消息,马上。