函数参数能否在Coq中自动确定作用域?

函数参数能否在Coq中自动确定作用域?,coq,Coq,假设我在一个经常混合nat和Z的环境中工作 Require Import List ZArith. Import ListNotations. Open Scope Z_scope. Definition f (l : list nat) := l. Compute f [1;3]. Coq告诉我,术语“[1;3]”的类型为“list Z”,而预期的类型为“list nat”。 当然,我可以只写[1;3]%nat,但我想知道是否有更好的方法,因为通常没有歧义 一个相关的问题是:我是否可以避免手

假设我在一个经常混合nat和Z的环境中工作

Require Import List ZArith.
Import ListNotations.
Open Scope Z_scope.
Definition f (l : list nat) := l.
Compute f [1;3].
Coq告诉我,
术语“[1;3]”的类型为“list Z”,而预期的类型为“list nat”。
当然,我可以只写
[1;3]%nat
,但我想知道是否有更好的方法,因为通常没有歧义

一个相关的问题是:我是否可以避免手动确定符号参数的范围

Notation "\\\ l ///" := (f l).
Compute \\\[1;3]///. (* same error as before *)

我本以为
Arguments
命令可以解决您的问题,但它并没有像我预期的那样工作。本节明确指出,给定给函数的作用域不会传播到子项bummer。