"Bill Page" <[EMAIL PROTECTED]> writes:

[...]

| >>  Does it apply to all types?
| >
| > Almost -- except function types, which is already weird in
| > all AXIOM systems.
| >
| >> What
| >> happens if I write:
| >>
| >>  x:Polynomial Integer
| >>
| >> without providing any value. Is 'x' evaluated as Symbolic Polynomial
| >> Integer? If not, how is that prevented?
| >
| > the *expression* x evaluates to a Symbolic Polynomial Integer.
| > The type of of the *variable* x remains Polynomial Integer in the
| > evaluation environment.
| >
| 
| It occurs to me that I do not understand how interpreter avoids the message:
| 
|   x is declared as being in Polynomial Integer but has not been given a value
| 
| when used in an expression like the following:
| 
|   p:=x+1
| 
| although experience shows it does and the result is of type
| 'Polynomial Integer'. So this would represent a potentially
| significant change in behavior. If the result will be 'Symbolic
| Polynomial Integer' then I presume that I will have to write something
| like:
| 
|   x:='x
| 
| and then re-evaluate p in order to get 'Polynomial Integer'. Is there
| another way? Or does it get more complicated? I wonder if having two
| "levels" of symbolic expressions such as in this case, might sometimes
| lead to confusion.

There are various shortcuts in bottomUpIdentifier.  The one you are
looking for is this (existing unmodified OpenAxiom):

  -- 1. declared mode but no value case
  (m := getMode t) =>
    m is ['Mapping,:.] => throwKeyedMsg('"S2IB0003",[getUnname t])

    -- hmm, try to treat it like target mode or declared mode
    if isPartialMode(m) then m := resolveTM(['Variable,id],m)
    -- if there is a target, probably want it to be that way and not
    -- declared mode. Like "x" in second line:
    --   x : P[x] I
    --   y : P[x] I
    target and not isSub and
      (val := coerceInteractive(objNewWrap(id,['Variable,id]),target))=>
        putValue(t,val)
        [target]
    -- Ok, see if we can make it into declared mode from symbolic form
    -- For example, (x : P[x] I; x + 1)
    not target and not isSub and m and
      (val := coerceInteractive(objNewWrap(id,['Variable,id]),m)) =>
        putValue(t,val)
        [m]
    -- give up
    throwKeyedMsg('"S2IB0004",[id,m])

I thought a systematic rule was better that one with lot os special
cases.  If people feel strongly that the existing beahviour needs to
be preserved, then that makes `soundness proof' even more harder to
attain.  But, I'm open to suggestions.

Note how
    -- Ok, see if we can make it into declared mode from symbolic form
    -- For example, (x : P[x] I; x + 1)
    not target and not isSub and m and
      (val := coerceInteractive(objNewWrap(id,['Variable,id]),m)) =>
        putValue(t,val)
        [m]

is very similar to the proposed Symbolic T in deduction rule and
synthesis of objects.

-- Gaby

-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
open-axiom-devel mailing list
open-axiom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel

Reply via email to