Skip to Content.
Sympa Menu

maude-help - [Maude-help] LIST{X} question

maude-help AT lists.cs.illinois.edu

Subject: Maude-help mailing list

List archive

[Maude-help] LIST{X} question


Chronological Thread 
  • From: Scott Christley <schristley AT mac.com>
  • To: maude-help AT peepal.cs.uiuc.edu
  • Cc:
  • Subject: [Maude-help] LIST{X} question
  • Date: Thu, 20 Apr 2006 19:20:28 -0400
  • List-archive: <http://maude.cs.uiuc.edu/pipermail/maude-help>
  • List-id: Maude help list <maude-help.maude.cs.uiuc.edu>

Hello,

I recently downloaded Maude, read through the tutorial and documentation,
and am trying to write some modules. I wanted to do a simple biological
example for DNA transcription to RNA; a tricky part is that DNA and RNA
share the bases A, C, and G but DNA has T while RNA has U. So I created a
module for nucleotides:

fmod nucleic is
sorts Nucleotide .

ops A C G : -> Nucleotide .
endfm


Then I wanted sequences of DNA and RNA to be lists so that I could easily
concatenate bases, e.g. (A T G T C C) for DNA or (A U G U C C) for RNA. I
want Maude to recognize one as DNASequence and the other as RNASequence thus
not allow U's in DNA nor allow T's in RNA. So I defined these modules:


fmod DNA is
protecting nucleic .
sorts DNANucleotide .
subsort Nucleotide < DNANucleotide .

op T : -> DNANucleotide .
endfm

view DNA from TRIV to DNA is
sort Elt to DNANucleotide .
endv

fmod DNASequence is
protecting LIST{DNA} * (sort NeList{DNA} to DNASequence) .
endfm


fmod RNA is
protecting nucleic .
sorts RNANucleotide .
subsort Nucleotide < RNANucleotide .

op U : -> RNANucleotide .
endfm

view RNA from TRIV to RNA is
sort Elt to RNANucleotide .
endv

fmod RNASequence is
protecting LIST{RNA} * (sort NeList{RNA} to RNASequence) .
endfm


Lastly I make a module which is the transcription machinery, and there is
where the problem comes in.


fmod transcription is
protecting DNASequence .
protecting RNASequence .

op translate : DNASequence -> RNASequence .

var aSequence : DNASequence .

eq translate(A) = A .
eq translate(C) = C .
eq translate(G) = G .
eq translate(T) = U .
eq translate(A aSequence) = A translate(aSequence) .
eq translate(C aSequence) = C translate(aSequence) .
eq translate(G aSequence) = G translate(aSequence) .
eq translate(T aSequence) = U translate(aSequence) .
endfm


When I load up this module, I get advisories:


Advisory: "transcription.maude", line 7 (fmod transcription): operator nil
has
been imported from both "prelude.maude", line 939 (fmod LIST) and
"prelude.maude", line 939 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator __ has
been imported from both "prelude.maude", line 940 (fmod LIST) and
"prelude.maude", line 940 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator append
has been imported from both "prelude.maude", line 948 (fmod LIST) and
"prelude.maude", line 948 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator head
has
been imported from both "prelude.maude", line 953 (fmod LIST) and
"prelude.maude", line 953 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator tail
has
been imported from both "prelude.maude", line 956 (fmod LIST) and
"prelude.maude", line 956 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator last
has
been imported from both "prelude.maude", line 959 (fmod LIST) and
"prelude.maude", line 959 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator front
has been imported from both "prelude.maude", line 962 (fmod LIST) and
"prelude.maude", line 962 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator occurs
has been imported from both "prelude.maude", line 965 (fmod LIST) and
"prelude.maude", line 965 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator
reverse
has been imported from both "prelude.maude", line 969 (fmod LIST) and
"prelude.maude", line 969 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator
$reverse
has been imported from both "prelude.maude", line 973 (fmod LIST) and
"prelude.maude", line 973 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator size
has
been imported from both "prelude.maude", line 977 (fmod LIST) and
"prelude.maude", line 977 (fmod LIST) with no common ancestor.
Advisory: "transcription.maude", line 7 (fmod transcription): operator $size
has been imported from both "prelude.maude", line 981 (fmod LIST) and
"prelude.maude", line 981 (fmod LIST) with no common ancestor.


And the reduce doesn't work:

reduce in transcription : translate(A T G T C C) .

Warning: sort declarations for constant nil do not have an unique least sort.
reduce in transcription : translate(A T G T C C) .
rewrites: 0 in 0ms cpu (0ms real) (~ rewrites/second)
result [EmDNASequence,EmRNASequence,NucleotideSequence]: translate(A T G T C
C)



Can anybody tell me what I'm doing wrong?

thanks
Scott




  • [Maude-help] LIST{X} question, Scott Christley, 04/20/2006

Archive powered by MHonArc 2.6.16.

Top of Page