Category Archives: C.J. Date

Just For The Fun Of It: A Quibble With C.J. Date

In the previous post, I said “I get the funny feeling that for him [C.J. Date] a sentence or expression functions normally at first, but when he stares at it too long it suddenly loses its transparency….”  Here I want to unpack that doubtlessly cryptic statement a bit.  I am doing this as a kind of finger-exercise, mainly for the fun of it, and not necessarily because it will help resolve some important issue.

In “SOME OPERATORS ARE MORE EQUAL THAN OTHERS”, the second chapter of his LOGIC AND DATABASES:  THE ROOTS OF RELATIONAL THEORY, C.J. Date introduces the names NAME(‘TRUE’) and NAME(‘FALSE’) to use as symbols for BOOLEAN(NAME(‘TRUE’) ) and BOOLEAN(NAME(‘FALSE’)).  He doesn’t use, of course, the selectors I am using (to avoid ambiguity); instead, he mentions the names.  That is to say, he is talking about the symbols TRUE and FALSE.  All  page references will be to LOGIC AND DATABASES:

If p is a proposition, it has a truth value.  For the purposes of  this chapter, if p is true, I’ll denote its truth value by TRUE; it it’s false, I’ll denote its truth value by FALSE.  In computing terms, we might say we have a data type called BOOLEAN that contains just these two truth values, and the literal representations of those values are TRUE and FALSE, respectively.

(p. 42)

Then for a moment, he uses the symbols to talk about the truth values themselves.  For a moment, the symbols stop being the things seen, and function transparently as windows through which we see the things denoted.  But, feeling conflicted,  he immediately labels his use of the symbols as a kind of perhaps-understandable confusion:

We might also say, more simply but less accurately, that the legal values of type BOOLEAN just are TRUE and FALSE; strictly speaking, however, TRUE and FALSE aren’t values as such — rather, they’re literals, or symbols, that denote certain values, just as, e.g., the numeral 3 isn’t a number as such but rather a literal, or symbol (more colloquially, a digit or numeral) that denotes a certain number.

(p. 42)

But no, when ‘TRUE’ and ‘FALSE’ are being used to denote truth values, it is perfectly accurate to say that the legal values of type BOOLEAN just are TRUE and FALSE.  Likewise, when ‘3’ is being used to denote a number, 3 is a number as such.  It is as if Date were peering through the symbol-as-window, so to speak, letting it perform its function of letting us see the thing the symbol denotes….when, all of a sudden, the window going all milkily opaque on him, all he sees is the now suddenly non-transparent glass.  It is as if he said, first, ‘Cleopatra was a Ptolemaic ruler of Egypt’, but then immediately felt the need to correct himself and say, ‘Well, this is a bit inaccurate, since the name ‘Cleopatra’ wasn’t a Ptolemaic ruler of Egypt’.

Similarly, Date is brought up short when he sees the expressions x + 4 and 2x – 1 in the equation x + 4 = 2x – 1:

But the trouble is, we use the symbol “=” to mean other things as well — other things, that is, in addition to identity as such….  By way of illustration, consider the following equation:

x + 4 = 2x -1

The symbol x here is meant to denote some number, and it’s easy to see by solving the equation that the number in question is five.  But the expressions on the two sides of the “=” symbol are self-evidently not identical:  that is, the “=” symbol here does not denote identity.  Rather, it is the values denoted by the expressions on the two sides of the “=” symbol that are identical.

(p. 45)

But the “=”, rather, MATH_CONSTANT(‘=’), does denote identity, because the expressions are being used to denote the number that each expression resolves to, given the expression on the other side.  The expressions are not being mentioned — for example, the author of the equation is not talking about the fact that each expression contains the symbol ‘x‘ and references at least one number.   ‘x + 4′ names a quantity when made resolvable by equating it with ‘2x – 1′, and vice versa.   MATH_VARIABLE(‘x’) MATH_OPERATOR(‘+’) NUMBER(NUMERAL(‘4’)) MATH_CONSTANT(‘=’) NUMBER(NUMERAL(‘2’)) MATH_OPERATOR(‘*’) MATH_VARIABLE(‘x) MATH_OPERATOR(‘-‘) NUMBER(NUMERAL(‘1’)).  The quantity named by the one expression is identical with the quantity named by the other expression.  The hermeneutical principle of charity compels us to interpret the expressions this way:  otherwise, we don’t get a symbol “=” that means something other than identity; instead, we simply get a blatantly false statement when there is an absurdly easy path to getting a true statement.

Not so, then, that “…we use the symbol ‘=’ to mean other things as well — other things, that is, in addition to identity as such…”  It is used to mean just identity. It would continue to denote identity even if, perversely, we chose to mention the expressions instead of using them, for we would end up with, not a true statement that relied on a different meaning of ‘=’, but with a false statement using ‘=’ to denote identity.  Notice that I am not exercising enough control here to avoid vacillating between using single quotation marks and double quotation marks to indicate I am talking about the symbol for the equals constant.

In spite of saying a number of false things on the way towards his conclusion, it’s hard to argue with that conclusion:   But saying this does not commit me to asserting that nothing is subtly wrong with it. I am too lazy now to try to dig and see if there is a subtle, non-obvious but not necessarily unimportant way in which Date is going wrong here; and anything I came up with would probably seem rather scholastic anyhow.

To sum up:  Equality means identity.  An expression of the form x = y is almost always shorthand for one of the form value_of(x) = value_of(y).

(p. 47)

Except I would add that even in the case of expression(x) = expression(y) — for example, ‘2x -1′ = ‘2x – 1′, equality also means identity.

We can perhaps forgive Date for using (with whatever qualms) one moment the symbol as a window through which he sees the thing denoted, but seeing the next moment nothing but a window become thoroughly milky and completely opaque.  For ordinary language can start out using a name, then shift mid-stream to mentioning the same occurrence of the name by the time one gets to the middle of the sentence.  I think the example is Quine’s:

Giorgione was so called because of his size.

And on that note, I will show one of Giorgione’s paintings:


and since we are now on the topic of beauty, I will go all Plato’s SYMPOSIUM on my few (0, 1, 2…) readers:


Maganda si Brad Pit.  Being that gorgeous should be illegal.  I will attempt to say that in Tagalog this way:  Dapat ilegal ang magiging ganoong maganda, but that is almost certainly either ungrammatical or unidiomatic (hindi pangwikian).  Perhaps someone with better Tagalog may correct me.

Update:  12/18/2012:  Made various corrections.


Semantic vs. Syntactic Arguments

In a previous post, playing the role of a would-be ordinary-language philosopher working in Tagalog (which language, to the the total consternation and perplexity of the Spanish grammarians during the 1600s, lacks the verb ‘to be’), I tried to provoke the suspicion that there is no single relation IS that could be pictured as follows:

IS (0)
CAR( NAME(‘Car With Serial Number 1235813’) ) PROPERTY( NAME(‘Red’) )
FLOWER( NAME (‘Rose With Barcode 3185321’) ) PROPERTY( NAME(‘Beautiful’) )
MINERAL_ITEM( NAME(‘Grain Of Salt Mentioned By Hegel’) ) PROPERTY( NAME(‘Cubical’) )
MINERAL_ITEM( NAME(‘Grain Of Salt Mentioned By Hegel’) ) PROPERTY( NAME(‘White’) )

Contra John Duns Scotus, for example, there is no single relation ‘contracts’ holding between a universal existing as always-already contracted into a particular. (To back up for a moment, the property denoted by NAME(‘three-sided’)is the universal denoted by NAME(‘three-sidedness’)existing as already contracted into a particular triangle.) Nor is there any other single relation which we can identify with the verb ‘is’. Or … letting my Tagalog ordinary-language suspicions run wild for the moment … so I will suppose.

There is no semantic relation (we are supposing) between the particular thing and the particular property.  But there is a syntactic relation between two names, pictured as follows;

IS (0)
NAME(‘3’) NAME(‘Prime’)
NAME(‘Car With Serial Number 1235813’) NAME(‘Red’)
NAME(‘Rose With Barcode 3185321’) NAME(‘Beautiful’)
NAME(‘Grain Of Salt Mentioned By Hegel’) NAME(‘Cubical’)
NAME(‘Grain Of Salt Mentioned By Hegel’) NAME(‘White’)

Voila:  here is the distinction between semantic vs. syntactical arguments to a verb aka predicate that puzzled me in an earlier post.  NAME(‘3’) and NAME(‘Prime’) are syntactic predicates to the verb/predicate ‘is’.  NUMBER( NAME(‘3’) ) and PROPERTY( NAME(‘Prime’) ) are the semantic predicates to the verb ‘is’ — or would be if there were such a verb ‘is’ that took semantic arguments.

In the spirit of ‘let’s see how long I can get away with this’, let me propose the following chain of events for verbs such as eats that do take semantic arguments.  Consider a relation like the one pictured here:

EATS (0)
NAME(‘Joe’) NAME(‘This egg’)
NAME(‘Khadija’) NAME(‘This souffle’)
NAME(‘Juan’) NAME(‘This fajita’)
NAME(‘Kha’) NAME(‘This bowl of Pho’)
NAME(‘Cliff’) NAME(‘This plate of Thai food with a 5-star Thai-spicy rating’)

When used in ordinary discourse, rather than mentioned as sentences with whatever syntactic properties, these tuples with their syntactic arguments get transformed into the following tuples with their semantic arguments:

EATS (0)
PERSON( NAME(‘Joe’) ) FOOD_ITEM( NAME(‘This egg’) )
PERSON( NAME(‘Khadija’) ) FOOD_ITEM( NAME(‘This souffle’) )
PERSON( NAME(‘Juan’) ) FOOD_ITEM( NAME(‘This fajita’) )
PERSON( NAME(‘Kha’) ) FOOD_ITEM( NAME(‘This bowl of Pho’) )
PERSON( NAME(‘Cliff’) ) FOOD_ITEM( NAME(‘This plate of Thai food with a 5-star Thai-spicy rating’) )

If we think of the intransitive and transitive verbs ‘eats’ as really being the same verb on the semantic level (though it is not clear to me that they are the same), ‘Joe eats’ would be ‘Joe eats something’.  We can derive the corresponding tuple from  the EATS relation first by projecting on the attribute PERSON_EATING:

PERSON( NAME(‘Joe’) ) FOOD_ITEM( NAME(‘This egg’) )
PERSON( NAME(‘Khadija’) ) FOOD_ITEM( NAME(‘This souffle’) )
PERSON( NAME(‘Juan’) ) FOOD_ITEM( NAME(‘This fajita’) )
PERSON( NAME(‘Kha’) ) FOOD_ITEM( NAME(‘This bowl of Pho’) )
PERSON( NAME(‘Cliff’) ) FOOD_ITEM( NAME(‘This plate of Thai food with a 5-star Thai-spicy rating’) )

Then by doing a RESTRICT on Joe:

PERSON( NAME(‘Joe’) ) FOOD_ITEM( NAME(‘This egg’) )
PERSON( NAME(‘Khadija’) ) FOOD_ITEM( NAME(‘This souffle’) )
PERSON( NAME(‘Juan’) ) FOOD_ITEM( NAME(‘This fajita’) )
PERSON( NAME(‘Kha’) ) FOOD_ITEM( NAME(‘This bowl of Pho’) )
PERSON( NAME(‘Cliff’) ) FOOD_ITEM( NAME(‘This plate of Thai food with a 5-star Thai-spicy rating’) )

The existence of verbs that are sometimes transitive, sometimes intransitive  is what motivated Santorini’s distinction between semantic and syntactic arguments to a verb.

Although I have labored over making this distinction for an embarrassing amount of time, it becomes quite easy to make once one has the notion of a SELECTOR available as a conceptual tool.

I’d like to mention as a final note that possibly we should think of the arguments of eats as always already nested inside the selectors PERSON and FOOD_ITEM; in other words, the names are always transparent, so to speak, letting us see through them the persons and food items, the semantic arguments, named.  It is only under special circumstances — say when the transparent denoting function of the sentence breaks down … maybe one has been staring at the sentence for too long — that the selectors PERSON and FOOD_ITEM get stripped away and we see the names, the syntactic arguments, doing the denoting.  (The sentences always seem to be breaking down this way for C.J. Date in his article “SOME OPERATORS ARE MORE EQUAL THAN OTHERS” in his LOGIC AND DATABASES:  THE ROOTS OF RELATIONAL THEORY.  I get the funny feeling that for him a sentence or expression functions normally at first, but when he stares at it too long it suddenly loses its transparency and becomes an opaque relation between names.  See pages 42 and 45, and see if you get the same impression.)  This final note has been brought to you by the balefully compromised spirit of Martin Heidegger, which was nagging me as I wrote the above.

And now, in the spirit of Plato’s SYMPOSIUM, I would like to picture something a little less dry than the pictures of Relations shown above.  Today it is Kellan Lutz who is serving as my stepping stone, first, to the Relational Algebra, then, finally, to the form of Beauty itself:


(Rapturous sigh.  How can one live in this world when there is so much beauty in it?)

Update 12/16/2012:  Corrected some errors in the names of some of the Relations; tried to improve the flow of the writing.

The Predicate Returns A Relation

We have seen that the predicate:

x is to the left of y

is mapped to the truth value TRUE when Charles is substituted for x and Genghis Khan is substituted for y.  The Relation TO_THE_LEFT_OF comprises all true propositions and only true propositions that get generated when values are substituted for x and y.  So the predicate is a function whose range is the truth value TRUE for every proposition that is included in the relation, and FALSE for every proposition that is not included in the relation.

I think, however, that we would get a slightly simpler account if we see the predicate as a function returning Relations comprising the single proposition TRUE, or the single proposition FALSE.  In the Relational Algebra, we would get a relation comprising the single tuple (and therefore proposition) TRUE if, after doing the Restriction that gives us:

Charles is to the left of Genghis Khan.

we then projected on the null set of attributes (“columns”).  We would then end up with Chris Date’s TABLE_DEE, that is, the Relation with cardinality 0 (o attributes, that is, 0 “columns”) and a single tuple.  TABLE_DEE is the Relation that corresponds to (I guess I should say ‘is identical with’) the weird classical logic proposition TRUE.  The predicate returns the proposition TRUE wrapped in the Relation TABLE_DEE when the Charles and Genghis Khan substitution is made.

Correspondingly, when John is substituted for x and Genghis Khan is subsituted for y, so that we get:

John is to the left of Genghis Khan.

the Restriction selects no tuple in the Relation TO_THE_LEFT_OF.  We then have a Derived Relation with a cardinality of 2 (i.e., the Relation has 2 “columns”) holding the null set of tuples.   If we then project on the null set of attributes, we end up with a Relation of cardinality 0 comprising 0 tuples.  Chris Date calls this Relation TABLE_DUM, and it holds the tuple, that is to say, the proposition FALSE.  The predicate returns the proposition FALSE wrapped in the Relation TABLE_DUM when the John and Genghis Khan substitution is made.

Thinking of the predicate as returning either TABLE_DEE or TABLE_DUM simplifies things a bit, because it means we never have to leave the Relational Algebra when modeling the predicate.  Everything gets explained in terms of just one set of operations, the operations of the Relational Algebra.




The Relational Algebra Gives Us Something (Or Somebody, Or At Least Someone)

Now onto trying to show how the Relational Algebra gives us ‘something’, ‘somebody’, ‘someone’, and so on.

When I talk about database relations in the following, I am, unless I state otherwise, talking about the abstract object, not those relations concretely realized in an RDBMS.

A brief explanation of the Relational Algebra:  Posit a world all of whose people are members of the set {John, Cliff, Charles, Genghis Khan, Leon Trotsky}.  Moreover, suppose that currently, the predicate:

 x is standing to the left of y

generates the Database Relation pictured below when all the members of this set are substituted for the parameters x and y:

Charles Genghis Khan
Dan Leon Trotsky
Cliff Genghis Khan

(The above picture, by the way, is just that — a picture of the Relation.  It is not the Relation itself.)  As indicated by the number 0 in the name, this Relation is a base Relation, i.e., what we have before any operations are applied to it.

The Relational Algebraic operation RESTRICT is a function that takes the Relation pictured above as input and produces another Relation as output.  For example, the following RESTRICTion, expressed in Tutorial D:

TO_THE_LEFT_OF where PERSON_ON_THE_LEFT = ‘Charles’;  (Yes, I’ve suddenly gone from the flesh and blood Charles as member of a set to the name ‘Charles’; God only knows what confusions this sudden shift will introduce.)

generates the Relation pictured below:

Charles Genghis Khan
Dan Leon Trotsky
Cliff Genghis Khan

The operation RESTRICT has given us a Relation comprising a single proposition expressed by the sentence ‘Charles is standing to the left of Genghis Khan.’  As indicated by the number 1, this is a Derived Relation, produced as output from a function that took as input the Base Relation.  The charcoal-grayed out portions of the picture are meant to convey that the derived relation is tied to the base relation in a way in which I will discuss later.

As with RESTRICT, the Relational Algebraic operation PROJECT takes the Base Relation as input and generates a Derived Relation as output.  The following RESTRICT and PROJECT operations, expressed in Tutorial D:


generates the Relation pictured below:

Charles Genghis Khan
Dan Leon Trotsky
Cliff Genghis Khan

whose body is the set containing the tuple or proposition expressed by the sentence “Charles is to the left of somebody.”

But wait — all we see in this picture is the value Charles.  (Or, more precisely, the name ‘Charles’ appearing as a set of black pixels on a screen.)  Isn’t this a tuple in a one-place relation?  And if it is, wouldn’t it be a proposition belonging to one-place relation, a proposition such as “Charles laughs”, or “Charles runs”, or “Charles eats”?

Well, if it were such, it could be any proposition belonging to a one-place relation.  The only way to constrain which proposition this tuple is to just one proposition is to place it in its context, the source from which it is derived, i.e., the base relation TO_THE_LEFT_OF.  By performing the Projection, we are for the moment blacking-out the identity of Genghis Khan, the person to whom Charles is to the left, so that we can focus on the identity of Charles.  But we haven’t forgotten that we are working with the relation TO_THE_LEFT_OF, so we know that Charles is to the left of somebody.  We haven’t suddenly switched to the relations LAUGHS, or RUNS, or EATS.

To turn for the moment for relations concretely implemented in an RDBMS running in some stuff made out of the same substance as the red paint on the Golden Gate Bridge, complete chaos would ensue, the world would become a topsy-turvey place, objects would start falling up, if, say, a Projection on EMPLOYEE_NAME in the EMPLOYEE (select EMPLOYEE_NAME from EMPLOYEE) would result, not in the set of people employed by the company (more precisely, the set of propositions ‘John, employee of Widgets_R_US’, ‘Jesse, employee of Widgets_R_US’, and so on), but the set of people designated to live on Mars one moment, the set of ambassadors to Vietnam the next moment, and the set of of Pulitzer Prize winners the third moment.

So the meaning of a Projection on an attribute (“column”) of a relation is constrained by the relation from which it is standing out (“projecting”), so to speak.  The derived relation never ceases to, well, derive its meaning from the base relation.  It never ceases to be a derived relation.  Charles never ceases to be one member of a pair whose member on his right is being ignored or blacked-out for the moment.

(Compare this argument with C.J. Date’s argument in LOGIC AND DATABASES, pp. 387-391.)

Let’s trace then what happens, in this relational model, when we plug in Charles to replace x in the predicate:

Person x, to the left of somebody

The ‘somebody’ is not a parameter — no argument gets plugged into it — but it along with the x indicate that the base relation we are dealing with is TO_THE_LEFT_OF.  It tells us that one of the ‘central participants in the situation’ is some person to the right.  The relevant Relational Algebra Operations — the relevant RESTRICT and the relevant PROJECT — are then performed to generate the proposition:

Charles, to the left of somebody.

According to the Closed World Assumption, a Relation contains all and only those tuples — those propositions — those states of affairs — that obtain, and for which plugging in arguments to the parameters of the predicate defining the Relation results in a true sentence.  Therefore, each tuple in the Relation is paired with the truth value TRUE, and of course, within the Range comprising the two truth values, only the truth value TRUE.

So the set of tuples in a Relation and the set of Truth Values is a function.  So, finally — if I may end this string of ‘therefores’ and ‘so’s’ (“Feel free to come to the point when you finally decide what it is, I hear someone say”), when a single tuple is selected, as was done when the RESTRICT and PROJECT were performed on the Relation TO_THE_LEFT_OF, we can see this as the application of the function on that tuple, an application which returns TRUE.  So (this really is the final ‘so’ — I promise) plugging in the argument ‘Charles’ into the parameter x in the predicate:

x is to the left of somebody

triggers a RESTRICT and PROJECT on the Relation TO_THE_LEFT_OF, which in turn constitutes a selection of a single tuple in that relation, which in turn returns TRUE, which lets us regard the predicate as a function returning TRUE when ‘Charles’ is plugged into the parameter marked by x.

Just so, when the RESTRICT and PROJECT fail to select a tuple, as it does when we substitute ‘John’ for x (John is standing to the right of everyone else, including Genghis Khan), FALSE is returned.

Voila!  We now we have somebody (or, as the case may be, nobody).

It is clear that the predicate:

x is to the left of y

can be treated the same way.

Treating verbs aka predicates relationally this way — that is, as functions implemented by Relations and operations on Relations — has two advantages over simply seeing them as functions in the way described by Kroch and Santorini.  First, we get a semantics for ‘somebody’, ‘something’, etc.  Second, we have a way of conceptualizing in terms of operations of the Relational Algebra the select that occurs when, to use the verb laughs as our example, Luke is selected and the truth value TRUE is returned.  The notion of select is no longer a primitive.


Updated on 05/10/2012 to correct an obvious oversight.

The Predicate As A Truth Valued Function

So far we have been modeling sentences in which nothing is left unspecified.  Chris invites AndrewLukas laughs.  How could we model, however, sentences such as Chris invited someone, Someone invited Andrew, Someone invited someone, Joe ate something, Someone laughed … sentences in which at least one of the “central participants in a situation” is left unspecified?  We can model these sentences, I think, by applying the Relational Algebra to them — or, more precisely, to the propositions that underlie them.  In this post, I start laying the groundwork for showing how we can use the Relational Algebra to model sentences containing ‘someone’, ‘anyone’, and the like.

Let me begin by outlining the key premise behind Relational Database Theory: 

Predicates generate propositions which are either true or false.  A given Database Relation comprises all and only the true propositions generated by a given predicate.  (This is the Closed World Assumption.)  We can apply various operations of the Relational Algebra to the propositions contained in a Database Relation.

The key premise in Relational Database Theory talks about predicates.  What, then, is a predicate?

What the database theorist C.J. Date calls a predicate is what Kroch and Santorini call, in the primer on Chomskyan linguistics quoted from in the post below (The Verb Considered As A Function) a verb.  Date explains what a predicate is better than I can, so let him speak (LOGIC AND DATABASES THE ROOTS OF RELATIONAL THEORY, Trafford Publishing, Canada, 2007, p. 11):

A predicate in logic is a truth valued function.

In other words, a predicate is a function that, when invoked, returns a truth value.  Like all functions, it has a set of parameters; when it’s invoked, arguments are substituted for the parameters; substituting arguments for the parameters effectively converts the predicate into a proposition; and we say the arguments satisfy the predicate if and only if that proposition is true.  For example, the argument the sun satisfies the predicate “x is a star,” while the argument the moon does not. 

Let’s look at another example:

x is further away than y

This predicate involves two parameters, x and y.  Substituting arguments the sun for x and the moon for y yields a true proposition; substituting arguments the moon for x and the sun for y yields a false one. 

The key premise mentions Database Relations.  What, then, is a Database Relation?

The concept of a Database Relation is an elaboration on the concept of a Relation as defined in mathematics.  In mathematics, a Relation is defined as the subset of the Cartesian Product of two or more sets.  (What a Cartesian Product is will be obvious from the example.)  For example, in the sets {John, Charles, Cliff, Dan} and {Leon Trotsky, Genghis Khan}, the Cartesian Product is { (John; Leon Trotsky), (John; Genghis Khan), (Charles; Leon Trotsky), (Charles; Genghis Khan), (Cliff; Leon Trotsky), (Cliff; Genghis Khan), (Dan; Leon Trotsky), (Dan; Genghis Khan)}.  If, now, we pick out a subset of this Cartesian Product by seeing who happens to be standing to the left of whom at the moment, we get this Relation:  { (Charles; Genghis Khan), (Cliff; Genghis Khan), (Dan; Leon Trotsky)}. 

In other words, our Relation is what we get when we start with the predicate:

x is standing to the left of y

and plug in values for x from the set {John, Charles, Cliff, Dan} and values for y {Leon Trotsky, Genghis Khan}, throw away all the false propositions that result, and keep all of the true propositions.

Let me go out on a limb, then, and say that a proposition (remember, our key premise mentions propositions) is a tuple, that is to say, an ordered pair (for example, (Charles, Genghis Khan) ) in a Relation.  (Please, pretty please, don’t saw this limb off.) 

This means then that a proposition is a state of affairs ala R.M. Chisholm.  For example, the proposition Charles is standing to the left of Genghis Khan is the state of affairs comprising the flesh and blood Charles standing to the left of the flesh and blood Genghis Khan.  Propositions as states of affairs are the meaning of sentences… But I digress.

Back to Relations. 

A Database Relation, I have said, is an elaboration of a Mathematical Relation.  A Database Relation comprises a Heading consisting of ordered pairs of (Name Of Type; Type) and a Body consisting in a set of ordered pairs (Name Of Type, Value).  A type is a set, for example, the set of integers, the set of words in a given language, the set of people, the set of cities in the world, and so on.  A value of a type is a member of the set identical with that type.  I will leave name undefined. 

A Database Relation is an abstract object;  it is either an object really existing in some Platonic Heaven someplace or it is a fiction, depending upon which theory of abstract objects is the correct one.  Database Relations form the conceptual skeleton of databases concretely implemented by an RDBMS (Relational Database Management System) functioning inside a physical computer, but at least at the moment I am not talking about physical computers and the software they run.  I am talking about the abstract object, something that has the same status as the number 3 or the isoceles triangle. 

Why do I want to talk about Database Relations rather than Mathematical Relations?  It will be easier in the  posts that (hopefully) will follow to illustrate the Relational Algebra operations Projection and Restriction.  I know how to apply these operations to Database Relations; I am not sure how to apply them to Relations simpliciter.   Projection and Restriction are the Relational Algebra operations which, I claim, will give us a model for sentences such as Joe ate something. 

I’ve laid the groundwork for such a model; now let me go on to produce the model.