Coq error: Unable to unify "true" with "is_true (0 < a - b - 3)"
Coq error: Unable to unify "true" with "is_true (0 < a - b - 3)"
不确定我做错了什么,但我认为 reflexivity
应该在下面工作,但事实并非如此。
a, b : nat
H : (1 <=? a - b - 3) = true
______________________________________(1/7)
is_true (0 < a - b - 3)
我也尝试 apply leb_complete in H.
结果是:
a, b : nat
H : (1 <= a - b - 3)%coq_nat
______________________________________(1/7)
is_true (0 < a - b - 3)
但在这两种情况下,Coq 都会给我一个错误提示 Unable to unify "true" with "is_true (0 < a - b - 3)"
应该没那么复杂吧?我在这里遗漏了什么吗?
首先,“它不应该很复杂”是错误的问题。
reflexivity
是一种从不使用假设的策略,它试图以非常具体的方式证明目标。对于“简单”的纯数字目标 p,您可以使用 lia。
它只能证明目标可转换为形状 R a1 a2
其中 R 是自反关系(如相等)并且 a1 和 a2 是可转换的。如果将两个项简化为标准形式给出“相同”的结果(模数 eta-expansion 的一些并发症),则两个项是可转换的。
例如,自反性可以证明2 + 2 + 0 = 4,或者0 + n = n。但是不能证明n+0=n(可以用lia证明),因为n+0是范式
不确定我做错了什么,但我认为 reflexivity
应该在下面工作,但事实并非如此。
a, b : nat
H : (1 <=? a - b - 3) = true
______________________________________(1/7)
is_true (0 < a - b - 3)
我也尝试 apply leb_complete in H.
结果是:
a, b : nat
H : (1 <= a - b - 3)%coq_nat
______________________________________(1/7)
is_true (0 < a - b - 3)
但在这两种情况下,Coq 都会给我一个错误提示 Unable to unify "true" with "is_true (0 < a - b - 3)"
应该没那么复杂吧?我在这里遗漏了什么吗?
首先,“它不应该很复杂”是错误的问题。
reflexivity
是一种从不使用假设的策略,它试图以非常具体的方式证明目标。对于“简单”的纯数字目标 p,您可以使用 lia。
它只能证明目标可转换为形状 R a1 a2
其中 R 是自反关系(如相等)并且 a1 和 a2 是可转换的。如果将两个项简化为标准形式给出“相同”的结果(模数 eta-expansion 的一些并发症),则两个项是可转换的。
例如,自反性可以证明2 + 2 + 0 = 4,或者0 + n = n。但是不能证明n+0=n(可以用lia证明),因为n+0是范式