Glauber


Glauber is a scientific discovery method written in the context of computational philosophy of science. It is related to machine learning in artificial intelligence.
Glauber was written, among other programs, by Pat Langley, Herbert A. Simon, G. Bradshaw and J. Zytkow to demonstrate how scientific discovery may be obtained by problem solving methods, in their book Scientific Discovery, Computational Explorations on the Creative Mind.
Their programs simulate historical scientific discoveries based on the empirical evidence known at the time of discovery.
Glauber was named after Johann Rudolph Glauber, a 17th-century alchemist whose work helped to develop acid-base theory. Glauber rediscovers the law of acid-alkali reactions producing salts, given the qualities of substances and observed facts, the result of mixing substances. From that knowledge Glauber discovers that substances that taste bitter react with substances tasting sour, producing substances tasting salty.
In few words, the law:
Glauber was designed by Pat Langley as part of his work on discovery heuristics in an attempt to have a computer automatically review a host of values and characteristics and make independent analyses from them. In the case of Glauber, the goal was to have an autonomous application that could estimate, even perfectly describe, the nature of a given chemical compound by comparing it to related substances. Langley formalized and compiled Glauber in 1983.
The software were supplied with information about a variety of materials as they had been described by 17-18th century chemists, before most of modern chemical knowledge had been uncovered or invented. Qualitative descriptions like taste, rather than numerical data such as molecular weight, were programmed into the application. Chemical reactions that were known in that era and the distinction between reactants and products were also provided. From this knowledge, Glauber was to figure out which substances were acids, bases, and salts without any quantitative information. The system examined chemical substances and all of their most likely reactions and correlates the expected taste and related acidity or saltiness according to the rule that acids and bases produce salts.
Glauber was a very successful advance in theoretical chemistry as performed by computer and it, along with similar systems developed by Herbert A. Simon including Stahl and DALTON, helped form the groundwork of all current automated chemical analysis.

The Glauber method

Information representation (data structures)

Glauber uses two predicates: Reacts and Has-Quality, represented in Lisp lists as follows:
For their experiment the authors used the following facts:
Discovering the following law and equivalence classes:
The modern notation with strings like: NaOH, HCl, etc., is used just as short substance names. Here they do not mean the chemical structure of the substances, which was not known at the time of the discovery; the program works with any name used in the 17th century like aqua regia, muriatic acid, etc.

Procedures

Glauber is based in two procedures: Form-Class and Determine-Quantifier.
The procedure Form-Class generalize the Reacts predicates by replacing the substance names by variables ranging on equivalence classes determined by a quality whose value distinguishes the substances in each class.
In the experiment designed by its authors, the substances are partitioned in three classes based in the value of the taste quality according on their value: Acids, Alkalis and Salts.

Glauber main procedure

  1. If there are no more substance names in the Reacts predicates then finish
  2. process the Reacts predicates with the Form-Class procedure
  3. process the result of the previous step with Determine-Quantifier
  4. go to step 3

    Form-Class

  5. Count the number of occurrences of each quality in the Has-Quality predicates
  6. Select the quality value with the largest number of occurrences, which substances are in the Reacts predicates
  7. Create a name for the class
  8. Generate a new Has-Quality predicate set removing all the predicates in Has-Quality with the selected quality and adding the predicate to the Class predicates where class-name is the name obtained in step 3
  9. Generate a new Reacts predicate set by replacing the name of the substance in the class formed in the step 2 by the name created in step 3
  10. Create a new class extension by associating the name generated on step 3 with the set of all substances on the class selected on step 2

    Determine-Quantifier

  11. Universally quantify the rule to determine the class
  12. : =>
  13. Generate Reacts predicates replacing each substance in the new class for its class-name in the Reacts predicates
  14. if all the predicates generated in the previous step are contained in the original set
  15. : then quantify universally
  16. : else quantify existentially