You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Coq模块Foo2中Search "foo"无结果?如何让foo可被搜索?

问题原因与解决方法

为什么Foo2内Search "foo"无结果?

当在Foo2中执行Include (Foo mt)时,虽然foo可以在当前模块中直接引用,但Coq的Search命令默认不会索引通过这种方式导入的参数化模块实例中的定义。这是因为Include参数化模块实例的行为是将实例内容"内联"到当前模块,但这些导入的定义并未被加入Search默认搜索的全局索引,也没有被标记为可被名称搜索到的顶层定义。

让foo对Search可见的方法

方法1:显式实例化并导入模块

将参数化模块Foo实例化后绑定到一个本地模块名,再导入该模块,这样Search就能索引到其中的定义:

Module Foo2 (mt : MT).
  Module F := Foo mt.
  Import F.

  (* 此时会输出:foo: 1 + 1 = 2 *)
  Search "foo".
End Foo2.

方法2:在Foo模块中添加导出声明

修改Foo模块,添加Export Foo.声明,让模块内容在被Include时自动被标记为可搜索:

Module Foo (mt : MT).
  Export Foo.

  (* prints: mt.f_thm: forall x : nat, mt.f x x *)
  Search "f_thm".

  Lemma foo : 1 + 1 = 2. Proof. reflexivity. Qed.

  (* prints: foo: 1 + 1 = 2 *)
  Search "foo".
End Foo.

Module Foo2 (mt : MT).
  Include (Foo mt).

  (* 此时会输出:foo: 1 + 1 = 2 *)
  Search "foo".
End Foo2.

内容的提问来源于stack exchange,提问作者andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:33:26