Tôi có thư viện để viết các loại được lập chỉ mục mà không cần phải chỉ rõ chỉ mục. Điều này dẫn đến các loại cấp cao hơn sạch hơn bằng cách ẩn đi hệ thống ống nước không liên quan. Nó đi một cái gì đó như thế này:Đối số ngầm định trong một loại được tính trong Coq
Section Indexed.
Local Open Scope type.
Context {I : Type} (T : Type) (A B : I -> Type).
Definition IArrow : I -> Type :=
fun i => A i -> B i.
Definition IForall : Type :=
forall {i}, A i.
End Indexed.
Notation "A :-> B" := (IArrow A B) (at level 20, right associativity).
Notation "[ A ]" := (IForall A) (at level 70).
Tuy nhiên Coq lờ yêu cầu của tôi để làm cho lượng hóa phổ được giới thiệu bởi IForall
ngầm như chứng minh bởi:
Fail Definition id {A : nat -> Type} : [ A :-> A ] := fun a => a.
Definition id {A : nat -> Type} : [ A :-> A ] := fun (n : nat) a => a.
Có cách nào cho tôi để có được Coq để thực sự làm cho đối số này tiềm ẩn?
Tôi đã không thử nó, nhưng nếu chúng ta định nghĩa một ký hiệu như thế này: 'Notation ": vui vẻ var => body ": = (vui vẻ n var => body) (ở mức) .', sau đó' Định nghĩa id {A: nat -> Loại}: [A: -> A]: =: fun a = > a.' nên hoạt động. Không chắc chắn nếu đây là những gì bạn đang tìm kiếm. –
Nhưng đôi khi tôi không muốn ràng buộc bất cứ điều gì. Ví dụ. Tôi muốn 'ứng dụng định nghĩa (f: [A: -> B]) (a: [A]): [B]): = f a.' để làm việc ra khỏi hộp. – gallais