我可以证明以下问题:
lemma lem1: assumes "(a::real) ≤ b / c" and "c > 0" shows "a * c ≤ b"
using assms
using pos_le_divide_eq[of "c" "a" "b"] by auto
但是,如果我使用绑定变量,则证明不起作用。
lemma lem2: assumes "∀a b c. (a::real) ≤ b / c" and "∀c. c > 0" shows "∀a b c. a * c ≤ b"
using assms
using pos_le_divide_eq[of "c" "a" "b"]
将∀量词插入pos_le_divide_eq会更改数据类型,这是不可能的。我该如何解决lem2?
答案 0 :(得分:2)
在lem2
的当前读数中,关于不同c
的第一个和最后一个假设,即∀c. c > 0
也可以写为∀d. d > 0
,而在{{1}两个lem1
都引用相同的变量。
因此,如果第一个公式中的c
应始终为正数,则应该只有一个假设c
。或者,如果预期任何值为正,则第二个假设需要阐明∀a b c. (a::real) ≤ b / c ∧ c > 0
的类型与第一个假设中指定的方式类似:c
。
应用任何更改∀c. (c :: real) > 0
后,lem2
可以在没有auto
的情况下进行验证。