提示重写无法推断参数
Hint Rewrite Cannot Infer Parameter
我正在尝试为我编写的矩阵库创建提示重写数据库。但是当我写
Hint Rewrite kron_1_r : M_db
我收到以下错误:
Cannot infer the implicit parameter m of kron_1_r whose type is "nat".
kron_1_r
的类型是forall {m n : nat} (A : Matrix m n), A ⊗ Id 1 = A
,所以 m 和 n 应该在调用 autorewrite 时根据上下文推断出来。我不确定为什么它需要一个参数,或者如何告诉它推迟。
您 运行 了解 最大插入隐式参数 和普通隐式参数之间的区别。不同之处在于当您使用定义而不给出任何参数时,就像您在 Hint Rewrite kron_1_r
中的方式一样。一种解决方案当然是使用 @kron_1_r
,它给出没有任何隐式参数的标识符。
不幸的是,在创建定义时没有语法来为其提供非最大插入的隐式参数;你只能使用 {m : nat}
。相反,您需要在创建 kron_1_r
之后使用 Arguments kron_1_r [m n] _.
来更改前两个参数的隐式行为(如上面 Anton Trunov 所建议的)。
使用 About
通常很有帮助,它报告隐式参数的状态(您也可以使用 Print
获得这些参数,但是打印定理时通常会得到太多输出,因为证明项很大)。
我正在尝试为我编写的矩阵库创建提示重写数据库。但是当我写
Hint Rewrite kron_1_r : M_db
我收到以下错误:
Cannot infer the implicit parameter m of kron_1_r whose type is "nat".
kron_1_r
的类型是forall {m n : nat} (A : Matrix m n), A ⊗ Id 1 = A
,所以 m 和 n 应该在调用 autorewrite 时根据上下文推断出来。我不确定为什么它需要一个参数,或者如何告诉它推迟。
您 运行 了解 最大插入隐式参数 和普通隐式参数之间的区别。不同之处在于当您使用定义而不给出任何参数时,就像您在 Hint Rewrite kron_1_r
中的方式一样。一种解决方案当然是使用 @kron_1_r
,它给出没有任何隐式参数的标识符。
不幸的是,在创建定义时没有语法来为其提供非最大插入的隐式参数;你只能使用 {m : nat}
。相反,您需要在创建 kron_1_r
之后使用 Arguments kron_1_r [m n] _.
来更改前两个参数的隐式行为(如上面 Anton Trunov 所建议的)。
使用 About
通常很有帮助,它报告隐式参数的状态(您也可以使用 Print
获得这些参数,但是打印定理时通常会得到太多输出,因为证明项很大)。