0

I can prove the following lemma:

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

however, if I use bound variables, the proof does not work.

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"]

Inserting the ∀ quantifier into the pos_le_divide_eq changes the data type so that is not possible. How can I solve lem2?

creator22
  • 9
  • 1

1 Answers1

2

In the current reading of lem2 the first and the last assumption talk about different c, i.e. ∀c. c > 0 could also be written as ∀d. d > 0, whereas in lem1 both c refer to the same variable.

So, if c in the first formula should always be positive, there should be just one assumption ∀a b c. (a::real) ≤ b / c ∧ c > 0. Alternatively, if any value is expected to be positive, the second assumption needs to clarify what is the type of c similar to the way it is specified in the first assumption: ∀c. (c :: real) > 0.

After applying either change lem2 can be proved by auto without using pos_le_divide_eq[of "c" "a" "b"].

Alexander Kogtenkov
  • 5,770
  • 1
  • 27
  • 35