[
Lists Home |
Date Index |
Thread Index
]
[Miles Sabin]
>
> I disagree.
>
> Actually, I'll go further. Even full first-order logic is too
> restrictive to express many trivial inferences straightforwardly. For
> example,
>
> There's a 5% surcharge on primary coloured widgets
> x is a red widget
> red is a primary colour
>
> therefore,
>
> There's a 5% surcharge on x
>
> This is easy to express in second-order logic, or in first-order logic
> plus set theory (the "plus set theory" bit means that you can forget
> about decidability). Not so easy in plain first-order logic.
>
Hmm, it depends on your definition of FOL, I suppose, and it also depends on
how you model things. I assumed that FOL includes types and your "plus set"
stuff (but a set of individuals is a kind of quantifier over individuals, is
it not?). I take it that in FOL, quantifiers range over individuals while
in second order logic, quantifiers can range over predicates and relations.
Is that what you understand?
Applying this to your example, if you used Red(widget), then your statement
would be about the predicate (ie., Red), and therefore second order, right?
But the redness can be modeled in other ways.
For example, we could say Color(x,red) and IsPrimaryColor(red). Then your
example could be stated something like this -
{for all x,y| Widget(x) and Color(x,y) and IsPrimaryColor(y)}==>
Surcharge(x,5%)
{Widget(x) and Color(x,red)}
{IsPrimaryColor(red)}
Now we are only making statements about the arguments, and they are
individuals, not predicates or relations. So it is FOL, right? And an SQL
query could extract the surcharge from a database.
OK, I have to admit, second order logic can make things more compact and
readable, and if you are getting into statements about types (which are
second order) you probably need it.
> Expressive power, decidablity ... pick one.
>
Yes ...
Cheers,
Tom P
|