If I have a general setup like the following, how can I prove I assert (f a)?
A : Type
f : A -> Prop
a : A
...
============================
f a
Specifically, why can't I use any of these tactics, and what do the errors mean?
specialize (f a).
Error: Cannot change f, it is used in conclusion.
apply (f a).
Unable to unify "Prop" with "f a".
You cannot specialise f
because it is used in the conclusion, that is in the goal.
specalize (f a)
replaces your hypothesis f
by its applied version.
If we forget about the goal that would get you f : Prop
afterwards.
However since f
appears in the goal you are not allowed to change its meaning.
Also f a
is a proposition, and certainly not a proof of f a
itself!
The fact that it is named f
doesn't mean it's not a predicate.