axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Axiom-developer] boot : valid type checker


From: Bill Page
Subject: RE: [Axiom-developer] boot : valid type checker
Date: Sat, 7 Apr 2007 02:07:09 -0400

On April 6, 2007 12:30 PM Gregory Vanuxem wrote:
> 
> At the boot level I want to know if a given type is valid.
> By type I mean a category or a domain (parametrised if
> they must be). So for example I want to know that
> 'Matrix(Character)' and 'Fields' are invalid but not
> Matrix(Ring) and Matrix(Integer)

You implied that Matrix(Ring) is valid, but it is not. Perhaps
this was a typo?

The definition of Matrix is

  Matrix(R:Ring)

I wonder if you mean something like: since both

  Integer has Ring
  Field has Ring

are true, why not both

  Matrix(Integer)
  Matrix(Field)

Field of course, is a category while Integer is a domain.

> There are several functions in the interpreter for that but
> they are 'interactive' functions (in the sense that they will
> throw an error if the type is not valid) or they do not accept
> all possible categories. There is, for example, the function
> 'isValidType' but it seems to only accept domains and simple 
> categories.

Can you give an example of a valid category for which isValidType
does not return T?

isValidType seems to work for me (of course this is just the
interpreter but the equivalent must work in Boot):

(1) -> mytype1:=["Matrix"::Symbol::SEX, ["Integer"::Symbol::SEX]::SEX]::SEX


   (1)  (Matrix (Integer))

                                        Type: SExpression
(2) -> mytype2:=["Matrix"::Symbol::SEX,
["Character"::Symbol::SEX]::SEX]::SEX          

   (2)  (Matrix (Character))
                                        Type: SExpression

(3) -> mytype3:=["FiniteSetAggregate"::Symbol::SEX,
["Integer"::Symbol::SEX]::SEX]::SEX

   (3)  (FiniteSetAggregate (Integer))
                                        Type: SExpression

(4) -> isValidType(mytype1)$Lisp


   (4)  T
                                        Type: SExpression

(5) -> isValidType(mytype2)$Lisp

   (5)  ()
                                        Type: SExpression

(6) -> isValidType(mytype3)$Lisp

   (6)  T
                                        Type: SExpression

> The nirvana would be a function that accepts things like
> Matrix(Join(Foo,Bar)) [1].

I do not understand what you mean by this.

> 
> Issues related are visible in the interpreter, try to type 
> Matrix(Field) and List(Field).
> 
> Am I thinking wrong ?
> 

I think your examples are a little confused. Something can not
be a Field without also being a Ring, right?

Integer has Ring

Matrix(Integer)

Fraction Integer has Field

Fraction Integer has Ring

Matrix(Fraction Integer)

> Or may be you have some ideas or you know some functions that
> do what I'm looking for ?
> 

Maybe you could give another example?

Regards,
Bill Page.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]