\chapter{Details of the Genex I Program}

\section{Data Structures}

The primary data structure in  {\sc Genex I} was a
two-element list whose first element was an atom representing the
physical structure of the operon being examined and whose second
element represented the product of the operon (i.e. the protein coded
for by the structural genes).  Properties of the structure and gene
product were attached to the property list of the corresponding
element.  This representation was chosen purely for the sake of
expediency.

One property of the operon structure that {\sc Genex I} used is its sequence.
{\sc Genex I} stored the sequence of only one strand (preferably the one that
is transcribed, if this is known) since the sequence of the
complementary strand can easily be obtained from the known sequence.
The sequence was stored as a list of characters (either A, T, G, or C).
The reason for storing the sequence as a list rather that as a single
multi-character atom (i.e. as ``(A T T G C)'' rather than as ``ATTGC'') was
to facilitate access to and manipulation of the individual nucleotides
of the sequence.

The structure property list also contained the properties 
\verb=INDUCIBLE= (which has value {\it t} if the operon is inducible) and,
similarly, \verb=REPRESSIBLE=.  The identity of the inducer or
corepressor was stored under the property \verb=INDUCER= or \verb=COREPRESSOR=.

Other properties of the operon which might have been stored on its structure
property list include its tertiary structure (e.g. the location of any
hairpin loops or cloverleaves), the location of any AT-rich or GC-rich
segments, and the location of any repeat sequences.

Properties of the gene product that {\sc Genex I} used are its purpose (i.e.
the function it serves for the organism, usually either synthesis or
digestion), its substrates, its end-product (if the gene product is
used in a synthesis reaction), and whether production of the gene
product is influenced by the presence of some other substance in the
cell (either proportionally or inversely).    This information was used
to determine the control structure of the operon--if it is inducible
or repressible, what the inducer or co-repressor is, whether or not it
is subject to attenuation.  Not all these properties are applicable
to all operons.

If the program determined that it should examine the regulatory gene
of the operon, it constructed a representation for the regulatory
gene.  This was very similar to the representation of an operon.  It
was a list with the form ({\it operon-name}\verb=-REGULATORY-GENE=
{\it operon-name}\verb=-REGULATORY-PROTEIN=).  The sequence of the
regulatory gene could be stored and used in the same way as that of an
operon.  The original {\sc Genex} did not use any properties of the
regulatory protein. In any case, they would not have been the same
properties as those used for the operon product.  The latter were used
to determine control structure, and since regulatory genes are not
themselves regulated, those properties do not apply.  A property of
the regulatory protein which might have been used would be some aspect
of its quaternary structure (e.g.  monomeric or dimeric).  This would
have assisted the program in determining how the regulatory protein
interacts with the operator.

\section{System Variables}

Before running the  {\sc Genex I} program, the user had to
set up certain variables that the program used.  First, the program
had to be given the operon, in the form of a two-element list as
described above.  Any properties of the operon discussed above might
also have been given.  The variable \verb=THINGS-PRESENT=, which is a list of
the substances present in the medium, was set.  Finally, the user ran
the {\tt INITIALIZE} program.  This asked the user if the gene product was
made and whether there were any known mutations.  It used the
responses to set the following global variables:

\verb=PROTEIN-MADE=. This has value {\it t} if the operon's
product is made, otherwise it has the value {\it nil}.

\verb=INCREASED-AMOUNT-PROTEIN=, \verb=DECREASED-AMOUNT-PROTEIN=.  If
\verb=PROTEIN-MADE= is {\it t}, the user is asked if it is made in a
greater or lesser amount than normal.  If made in a greater amount,
\verb=INCREASED-AMOUNT-PROTEIN= is set to {\it t}.  If lesser,
\verb=DECREASED-AMOUNT-PROTEIN= is set to {\it t}, but
\verb=PROTEIN-MADE= is set to {\it nil}, since the causes of a
decrease in amount made are, in general, the same as the causes of no
production at all.

\verb=KNOWN-MUTATION=. This has value {\it t} if there is a
known mutation in the operon or regulatory gene, {\it nil} if it is
definitely known that there is no mutation, and has the value \verb=unknown=
otherwise.

\verb=MUTATION-LOCATION=. If \verb=KNOWN-MUTATION= is {\it t}, this can
be set to indicate a mutation in the promoter, operator, or
transcribed region of the operon, a mutation in the operon whose exact
location is unknown (a ``{\it linked}'' mutation), or a mutation in the
regulatory gene (an ``{\it unlinked}'' mutation).

Finally, if the system was told about the behavior of
pseudodiploids,\footnote{A pseudodiploid is an operon of which some
parts are represented twice.} it used this information to help
determine whether the system is under positive or negative control.
Having determined this, the {\tt INITIALIZE} program could set the
variables \verb=PC= (positive control) or \verb=NC= (negative control)
or both to {\it t}.

\section{Control Structure of the Genex I Program}

All of the procedures described below are called with one argument,
which is the operon being examined, unless otherwise stated.

The user started up the system by invoking the {\tt genex} program.
This program passed control to one of the procedures {\tt
XPLN-NO-PROTEIN} (if \verb=PROTEIN-MADE= is {\it nil} or if
\verb=DECREASED-AMOUNT-PROTEIN= is {\it t}) or {\tt XPLN-INC-PROTEIN} (if
\verb=PROTEIN-MADE= is {\it t}).

{\tt XPLN-NO-PROTEIN} divided the solution of the problem into three
parts, corresponding to the procedures it called:
transcription-related causes (examined in the procedure {\tt XC-BUG}),
translation-related causes (examined in {\tt XL-BUG}), and
post-translational causes \footnote{{\sc Genex} had no information
about post-translational control, but this could have been added in a
new procedure at some later date, and it would have been called from
the {\tt XPLN-NO-PROTEIN} procedure.}.  {\tt XPLN-INC-PROTEIN}
considered two possible ways to explain the behavior of the operon,
one in terms of transcription (again using the procedure {\tt
XC-BUG}), and the other in terms of attenuation, using the procedure
{\tt ATTENUATOR-BUG}.

{\tt XC-BUG} checked to see if the behavior of the operon could be
explained by some mechanism of transcription.  It called the two
procedures {\tt INITIATION-BUG} and {\tt CHECK-ATTENUATION}.  

The {\tt CHECK-ATTENUATION} procedure encoded the knowledge that the
system had about attenuation of transcription.  If the sequence of the
operon was not given, the procedure could go no further than
suggesting the possibility of attenuation in operons involved in the
synthesis of amino acids.  If the leader sequence was given, however,
a procedure called {\tt FIND-ATTEN-REG} was called by {\tt
CHECK-ATTENUATION}.  This procedure translated the nucleotide sequence
into amino acids and could identify a likely attenuator, if one
exists.  The criterion used for an attenuator was the occurrence of
five codons for the end product amino acid in a sequence of eight
adjacent codons following a start codon.  This procedure would
correctly identify the attenuator region in five of the six known
attenuated operons  \footnote{It would not recognize the {\it trp}
attenuator, which contains only two adjacent {\it trp} codons.
However, tryptophan is a rare amino acid, usually occurring only once
in every 100 amino acids.  An improved version of this procedure 
would take into account the relative frequencies of the amino
acid residues when deciding how many adjacent residues constitute an
attenuator.}.

The {\tt ATTENUATOR-BUG} procedure called by {\tt XPLN-INC-PROTEIN}
used the {\tt FIND-ATTEN-REG} procedure to check whether the increased
protein production might be due to a deleted attenuator region.  It
did this by comparing the original sequence with the mutated sequence
of the operon.

Effects which occur at the time of initiation of transcription were
divided by the {\tt INITIATION-BUG} procedure into an enumeration of
promoter-related control (in the procedure {\tt PROMOTER-BUG}),
operator-related control (in the procedure {\tt OPERATOR-BUG}),
control due to the presence or absence of the small molecule (examined
in the procedure {\tt CHECK-REPRESSOR}), and solutions which could be
attributed to some positive control element (examined in the procedure
{\tt POSITIVE-CONTROL-BUG}.

The {\tt XL-BUG} procedure was responsible for reporting the possible
effects of mutations in the translated region of the operon (or, if
the system was examining the regulatory gene, mutations in that gene).
If the sequence of the operon was known, the {\tt CHECK-XL-MUTATION2}
procedure was called which compared the original sequence with the
mutated sequence, looking for nonsense and missense mutations.  

The system examined the regulatory gene when the variable {\tt
MUTATION-REGION} was set to {\it unlinked}, or when the variable {\tt
KNOWN-MUTATION} was set to \verb=unknown=.  The procedure {\tt
REG-GENE-MUTATION}, which was called by {\tt XL-BUG} and {\tt
XPLN-INC-PROTEIN}, examined the effect of regulatory gene mutations on
the production of the regulated protein.

{\tt CHECK-REPRESSOR}, which was called by {\tt INITIATION-BUG} as
noted above, in turn called the procedures {\tt INDUCIBLE?} and {\tt
REPRESSIBLE?} which determined if an operon is inducible or
repressible, and {\tt INDUCER?} and {\tt COREPRESSOR?} which determined
whether a given substance is the inducer or corepressor of the operon.
If the inducer or corepressor of the operon was not given by the user,
{\tt CHECK-REPRESSOR} attempted to determine what the inducer or
corepressor is, using the procedures {\tt FIND-INDUCERS} and {\tt
FIND-COREPRESSORS}.  

{\tt CHECK-REPRESSOR} also called the procedure {\tt
MUTATED-REPRESSOR}.  This procedure recursively invoked
{\sc Genex} using the regulatory gene as the argument.  {\tt
CHECK-REPRESSOR} reset many of the system variables to maintain
consistency during the recursive call.  The variable {\tt
protein-made}, which referred to the operon's product before the call,
was stored in the variable {\tt regulated-protein-made} for the
duration of the recursive call, while {\tt protein-made} referred to the
regulatory protein, the product of the regulatory gene.  Since the
system did not know whether or not the regulatory protein was made,
{\tt CHECK-REPRESSOR} called {\tt GENEX} twice, once with {\tt
protein-made} set to {\it t} and once with it set to {\it nil}.  {\tt
mutation-location}, which previously held the value {\it unlinked},
indicating a mutation outside the physical boundaries of the object
under consideration, was reset to {\it linked}, indicating a mutation
in the object currently being examined.  There was no chance of {\tt
CHECK-REPRESSOR} getting caught in an infinite loop since regulatory
genes are not themselves represented as having regulatory genes.

The procedure {\tt POSITIVE-CONTROL-BUG} examined two mechanisms of
positive control: the cAMP-CAP complex, using the procedure {\tt
CAP-BUG}; and activators, using the procedure {\tt CHECK-ACTIVATOR}.
{\tt CHECK-ACTIVATOR} was very similar to {\tt CHECK-REPRESSOR}, and
called all the same procedures.

\section{Knowledge Encoding in Genex I}

This section gives some examples of how the information presented in
the previous chapter was encoded into the  {\sc Genex I} program.  

\subsection{Mutations}

{\sc Genex I} was guaranteed to give a correct solution only for
problems involving a single mutation in the operon or its regulatory
gene \footnote{By ``single mutation,'' I do not mean a point mutation,
but rather a mutation in one region of the operon.  Thus {\sc
Genex I} cannot reason about the combined effect of mutations in both
the regulatory gene and the operator, for example.}.

There are several aspects of a mutation that are important with regard
to its effect on gene expression.


\begin{itemize}
\item
Is the mutation located in the operon itself or in its regulatory
gene?

\item
If the mutation is in the operon, in what region--promoter,
operator, transcribed region, or translated region?

\item
Does the mutation increase or decrease gene expression?

\item
Is the mutant dominant or recessive in a diploid?
\end{itemize}

{\sc Genex I} used this information to help build a model of the operon's
behavior.  Of course, not all this information is always available to
the program.

{\sc Genex I} had rules (encoded as decision trees) to help it model the
behavior of the operon when a mutation is present.  For example, it
had a rule that says that dominant operator mutants cause constitutive
synthesis in PC systems and are uninducible in NC systems.

If the nucleotide sequence of the operon was given, {\sc Gene I} gave a
very specific analysis of the cause of the operon's behavior.  It would
identify a mutation in the leader sequence that affects attenuation.
If the mutation was in the promoter, {\sc Genex I} would compare the mutated
sequence and normal sequence with the template sequence, checking for
the better match (since promoter strength correlates with how well the
promoter matches the template).  If it determined that the mutation was
in the translated region of the gene, the {\tt CHECK-XL-MUTATION}
procedure would compare the mutated sequence with the normal one to find
any nonsense or missense mutation.



\subsection{Determining Positive and Negative Control}

Since most known operons function under negative control, {\sc Genex
I} assumed that the input operon is subject to negative control and
tried to model the behavior using that assumption.  It had rules for
recognizing when an operon is also under positive control: if the
operon codes for enzymes to digest a sugar other than glucose (in
which case it is under the control of the cAMP-CAP complex), or if the
deletion of the regulatory gene makes the protein uninducible.  The
behavior of pseudodiploids could also cause the program to consider
positive control.

\section{Another Example}

{\bf
{\it Bacterium pedantia} produces a protein, sporulin,
that makes other bacteria sporulate...Sporulin synthesis is inducible
by chalk.  In the absence of chalk a repressor produced by the gene
{\it spoR} prevents expression of the Sporulin structural gene {\it
spoS}.}

{\it This is what the program has been told about the Sporulin gene:}

\begin{verbatim}

spo
(SPO-GENE SPORULIN) 

(plist 'spo-gene)
(INDUCER CHALK INDUCIBLE T)
\end{verbatim}

{\bf Two {\it spoR} mutations are available.  Strains
carrying the mutation {\it spoR}1 secrete sporulin whether or not
chalk is present.  Strains carrying {\it spoR}2 fail to produce
Sporulin even when chalk is present.  One of the two mutations is
known to be missense, and the other is known to be nonsense.  Which
mutation is the missense one, and why?}

{\it First give {\sc Genex I} the phenotype of the spoR1 mutation.}

\begin{verbatim}

(initialize spo)
is SPO-GENE product made? YES
in what amount?  (increased or decreased) INCREASED
is there a mutation in SPO-GENE? (yes, no, unknown) NO
is there an unlinked mutation? (yes, no, unknown) YES
was diploid constructed? NO
DONE 

(GENEX spo)
is SPO-GENE a regulatory gene? NO
assuming no misfunction at SPO-GENE promoter
assuming SPO-GENE can be repressed
examining SPO-GENE-REGULATORY-GENE
Is the regulatory protein made? (yes, no, unknown) UNKNOWN
assume SPO-GENE-REGULATORY-PROTEIN is not made
possible mutation at SPO-GENE-REGULATORY-GENE promoter preventing RNA
        Pol from binding
operon cannot be switched off without SPO-GENE-REGULATORY-PROTEIN
QED
\end{verbatim}

{\it {\sc Genex I} claims that if the regulatory protein is not made, i.e. if
spoR1 is a nonsense mutation, the operon cannot be switched off,
which explains the constitutive behavior of the Sporulin gene.

Now give the phenotype of the spoR2 mutation.}

\begin{verbatim}

(setq things-present '(arabinose lactose chalk))
(ARABINOSE LACTOSE CHALK)
\end{verbatim}

{\it We tell it that chalk is present since strains with the {\bf
spoR}2 mutation don't produce sporulin even in the presence of the
inducer.}

\begin{verbatim}

(initialize spo)
is SPO-GENE product made? NO
is there a mutation in SPO-GENE? (yes, no, unknown) NO
is there an unlinked mutation? (yes, no, unknown) YES
was diploid constructed? NO
DONE 

(genex spo)

is SPO-GENE a regulatory gene? NO
assuming no misfunction at SPO-GENE promoter
assuming SPO-GENE can be repressed
SPO-GENE is active in presence of CHALK
examining SPO-GENE-REGULATORY-GENE
Is the regulatory protein made? (yes, no, unknown) UNKNOWN
assume SPO-GENE-REGULATORY-PROTEIN is not made
now assuming SPO-GENE-REGULATORY-PROTEIN is made
possible mutation in SPO-GENE-REGULATORY-GENE  promoter causing 
        superpromoter
possible structural mutation in SPO-GENE-REGULATORY-PROTEIN preventing
        inducer from binding
done examining SPO-GENE-REGULATORY-GENE
\end{verbatim}

{\it {\sc Genex I} found no reasons for Sporulin not to be made if the
regulatory protein is not made (implying that the mutation cannot be
nonsense).  It found two types of mutations in spoR that might
cause Sporulin to be made in decreased amounts or not at all.  One is
a missense mutation that prevents the repressor from binding the
inducer (possibly by eliminating the inducer binding site) which
would prevent the repressor from attaining an inactive conformation.
The other mutation it proposes is in the spoR promoter causing
greater amounts of the regulatory protein to be made (a so-called
``superpromoter'' because it has a higher affinity for RNA polymerase).
This would generally not be an explanation for the observed phenomenon
unless there was only a limited amount of inducer present.

The rest of the examination revealed no other possible explanations and
is omitted.}

\newpage

\chapter{Genex II Program Listing}

\input{code}
