Variables and Quantifiers in First-Order Logic - Artificial intelligence:
Now suppose that we wanted to say that there is a meal at the Red Lion which costs only three pounds. If we said that cost_of(meal, red_lion) = three_pounds, then this states that a specific meal (a constant, which we've labelled meal) costs three pounds. In fact, this does not capture what we wanted to say. For starting, it implies that we know exactly which meal it is that costs three pounds, and moreover, the landlord at the Red Lion decide to give this the bizarre name of "meal". And also, it doesn't express the fact that there may be more than 1 meal which costs three pounds.
Instead of using constants in our translation of the sentence "there is a meal at the Red Lion costing 3pounds", we should have applied variables. If we had replaced meal with something which reflects the fact that we are talking just a generic, rather than a specific meal, then things would have been clearer. When a predicate relates something that could vary (as like our meal), we call these variables and represent them using uppercase word or letter.
So, we should have begun with something like
meal(X)∧ cost_of(red_lion,X) = three_pounds,
which reflects the fact that we are talking regarding some meal at the Red Lion, rather than a specific one. However, this is not quiteenough specific. We have to tell the reader of our translated sentence something more regarding our conviction concerning the variable X In this particular case, we have to tell the reader that we believe there exists such an X. There is a particular symbol in predicate logic which we utilize for this purpose, called the 'exists symbol'. This is written: . If we put it around our pair of predicates,then we get a completly formed sentence in first-order logic:
∃X (meal(X) ∧cost_of(red_lion, X) = three_pounds)
This is read as "there is something called X, where X is a meal and X costs 3 pounds at the Red Lion".
But what now if we want to say that all meals at the Red Lion cost 3 pounds. In this type of case, we have to use another symbol, which we call the 'forall' symbol. This states that the predicates concerning the variable to which the symbol applies are right for every possible example of that variable. So, what would happen if we replaced exists symbol above by our new forall symbol? We would get this:
∀X (meal(X) ∧ cost_of(red_lion, X) = three_pounds)
Is this really what we wanted to say? Aren't we saying something regarding all meals in the universe? Well, we're actually saying something regarding every object in the Universe: everything is a meal which you can buy from the Red Lion. For 3 pounds! What we actually wanted to say should have been described more like this:
∀X (meal(X)-> cost_of(red_lion, X) = three_pounds)
This is read as:if X is a meal,for all objects X then it costs 3 pounds in the Red Lion. We are still not there, though. This implies that every meal can be brought at the Red Lion. May be we should throw in another predicate: serves(Meal, Pub) which states that Pub serves the Meal. We can now at last write what we wanted to say:
∀X (meal(X) ∧ serves(red_lion, X)-> cost_of(red_lion, X) = three_pounds)
This may be read as: for_ all objects X, if X is a meal and X is served in the Red Lion, then X costs three pounds. The act of making ourselves clear regard a variable by introducing an exists or a for_ all sign is called quantifying the variable. The for_ all andexists sign are likewise called quantifiers in first-order logic.
Substituting a ground term for a variable is frequently called "grounding a variable", "performing an instantiation" and "applying a substitution" or an example of instantiation is: turning the sentence "All meals are 5 pounds" into "Spaghetti is 5 pounds" - we have grounded the value of the variable meal to the constant spaghetti to give us an instance of the sentence.