Note 1: this sounds like a homework problem, so I'm going to try to give guidance toward the answer instead of just giving an answer outright.
Note 2: writing out the types of all the variables gets messy, so for the purposes of this answer, x
is a variable of type e, p
is a variable of type t, and P
is a variable of type ⟨e,t⟩.
So I would write the denotation of gray in your model as λP.λx.[P(x) ∧ gray(x)]
.
If you want to combine this with be through function application, then one is going to need to be applied to the other. You can either apply be to gray, or apply gray to be. What type would be need in order to apply be to gray? What about to apply gray to be?
The next question is, what do you want the result to look like? It seems like the logical denotation of Julius is gray should be gray(julius)
, right?
Since we know the denotation of Julius is julius
, then in order to get gray(julius)
, the denotation of is gray should be λx.gray(x)
(or just gray
if you prefer).
So, what can be combined with λP.λx.[P(x) ∧ gray(x)]
to create something equivalent to λx.gray(x)
?
Direct hint 1:
You're going to want to apply gray to be, not vice-versa. In other words, gray is the function and be is the argument. This means be should have a denotation of type ⟨e,t⟩.
Direct hint 2:
1 ∧ p
is logically equivalent to p
.
My solution (but try solving it yourself before revealing this):
λx.1