On Aug 6, 2007, at 6:08 PM, John F. Sowa wrote:
There is a very *profound* reason why logic is different:
SB> We suffer from identical syntax and allegedly identical semantics
all the time in data exchange (ISO 10303), so I don't see why
logic should be any different.
Classical Boolean logic was defined in the mid 19th century, and
*every* version since then has had absolutely identical semantics.
The model-theoretic foundation of Boolean logic, which is called
"truth tables", is a subset of the model-theoretic foundation for
full first-order logic (FOL).
Full FOL was independently discovered and published in 1879 by
Gottlob Frege and in a totally different notation by C. S. Peirce
in 1880 and 1885. Despite the fact that their notations were
radically different in appearance and they were working on
different continents with no communication between them,
their semantics was *identical*.
Furthermore, it is a superset of Boole's semantics, which Peirce
was consciously following, while Frege was consciously trying
to avoid. Yet they converged on *identical* semantics.
During the 20th century, many different versions of what is
called classical FOL were invented and written in many different
notations, yet they all have *identical semantics*.
The model-theoretic foundation defined in the ISO standard for
Common Logic is a superset of *all* the previous versions plus
many others. It includes the semantics by Boole, Frege, Peirce,
Tarski, Gentzen, etc., etc., as subsets. It also includes the
semantics of RDF(S), OWL, and many other notations as subsets.
No two programming systems defined by behavioral semantics can
come anywhere close to that result -- even when one is called
an upward compatible version of the other.
SB> Its only when we ground the semantics of the data in the
behaviour of the application/organization that we have any hope
of success, and then only after a long and painful process of
testing. Even in the relatively well specified area of geometry,
it has taken many years of effort and continuous testing to get
a reasonably reliable exchange (though not 100%), and there is
still a considerable amount to do.
As E. W. Dijstra pointed out over 40 years ago, testing the
behavior of programs can only prove the presence of errors,
it can never prove their absence.
Logic can prove both.