# How to conceptually represent attributes (characteristics) of an object in logics?

I am reading about/working on the knowledge representation using OpenCog framework http://wiki.opencog.org/w/OpenCog_Framework which essentially is special kind of probabilistic logic (s.c. PLN - Probabilistic Logic Networks) that smoothly generalizes crisp logic (by assigning strength and confidence to the crisp truth value).

My question is - how to represent attributes in logic (in OpenCog or in any other logic). E.g. I want to express the statement 'An apple #1 has price 1$' (#1 is Apple; #1.price=1$). How can I do this in any logic?

My current solution is that I need to define 3 entities: apple a1, price p1, 1$_value v1 and enter those entities into whole-part relationships: whole_part_relation(a1, p1), whole_part_relation(p1, v1). Those relations are for instances and apparently similar relations can be formed for classes (concepts) as well. Is my representation of attributes by whole-part-relationships acceptable? OpenCog has list of all supported types of terms (s.c. Atoms) and their relationships (e.g. Links) http://wiki.opencog.org/w/Category:Atom_Types but one can see that attribute link/relationship is not first class citizen in this logic as it is not in many other logics as well. So - my question is - how to represent attributes in the logics in which attributes are not first class citizens? There is need to formalize software development, to mode real world, to create knowledge bases for e.g. robotics and therefore the conceptualization of notion of attribute (characteristic) is important! ## 1 Answer For this discussion, I'll use classical first-order logic. I'll interpret your term "first-class citizens" to mean those objects which can be quantified over or passed as arguments to predicates and functions. The examples provided below are toy examples, purely for expository purposes. Have a look at the leading AI textbook which gives a much more extensive, proper introduction to this subject. There are often many ways to formalize a given statement in logic. Let's consider your example 'An apple #1 has price 1$'. There are some naive ways that come to mind:

price(apple1) this is a function which yields the price
Price(apple1,80) this is a predicate

As for your question, "Is my representation of attributes by whole-part-relationships acceptable?", it at least raises eyebrows. Generally, whole-part relationships should reflect the notion that the part is part of the object structure itself, not some attribute of the object. So while has-part(apple,stem), has-part(apple,skin), has-part(apple,seed) seem reasonable, has-part(apple,price) does not.

Now for your main question, "how to represent attributes in the logics in which attributes are not first class citizens?" you can use either functions or predicates. Examples are given under the paragraph above describing some ways one can formalize a given statement in logic.