模块错误类型在Coq中有所不同

时间:2013-03-27 09:51:18

标签: coq

我很难弄清楚如何编写此代码。

例如,我有一个签名A,一个仿函数Ca: A作为参数,为了能够使用C,我定义了一个模块{{ 1}}实现签名B

A

并支持我输入Require Import String. Module Type A. Parameter toto : string -> nat. End A. Module C (Import a : A). ... End C. Module B <: A. Definition toto (s: string) := foo s. End B. (* COQ error *)

然后在foo: string -> string list-> nat.处,End B.发出错误说{} {}}

或另一种方式:

Coq

我会在signature components for label toto do not match: types differ.

处收到同样的错误

我理解这个问题是因为我没有在Module B. Definition too (s : string) := foo s. End B. Module Export D := C B. 的定义中提供D参数。

所以我的问题是我不知道如何在这种情况下提供参数string list

在我的真实代码中,我使用totostring list类型而不是Section

Record

然后我打开Module

Record A : Type := mkA { too : string -> nat}.

您能否帮我写一下或了解如何才能正确地在模块中编写仿函数Section?有没有办法在模块中定义/声明变量Section B. Variable l: string list. Definition too (s: string) := foo s l. Definition A := mkA too. End B. ?在B中定义后,我会将其提取到string list

1 个答案:

答案 0 :(得分:1)

你可以随时这样做:

Require Import String.

Parameter foo: string -> list string -> nat.

Module Type A.

  Parameter toto : string -> nat. 

End A.

Module B <: A.

  Variable (* or Parameter, or Axiom *) ls : list string.

  Definition toto (s: string) := foo s ls.

End B.

但据我所知,只会使ls成为公理......另一种解决方案是延迟提供ls:

ModuleType HasListString.

  Parameter ls : list string.

End HasListString.

Module B(LS: HasListString) : A.

  Definition toto (s: string) := foo s LS.ls.

End B.

这可能不是你需要的。没有背景,很难给你更好的建议。