簡體   English   中英

在Coq中鍵入封裝

[英]Type encapsulation in Coq

有沒有一種方法可以在Coq模塊中定義類型但是封裝構造函數?

我希望模塊的客戶端能夠使用該類型但不能構造該類型的成員,類似於OCaml中可以使用抽象類型完成的操作。

是。 您可以在模塊中定義類型並為其分配模塊類型:

Module Type FOO.

Variable t : Type.

End FOO.

Module Foo : FOO.

Inductive typ :=
| T : typ.

Definition t := typ.

End Foo.

(* This fails *)
Check Foo.T.

另一種可能性是將您的模塊類型聲明為依賴記錄,並通過合適的實現參數化您的開發,例如

Record FOO := { t : Type }.

Section Defs.

Variable Foo : FOO.

(* Code ... *)

End Defs.

(* Instantiate FOO *)

Definition Foo := {| t := nat |}.

嚴格來說,這並不會隱藏類型的構造函數,但只要您的客戶端只使用接口編寫其定義,它們就無法引用您的具體實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM