axiom-developer
[Top][All Lists]

[Axiom-developer] how does the interpreter choose signatures?

 From: Martin Rubey Subject: [Axiom-developer] how does the interpreter choose signatures? Date: 26 Jan 2008 21:47:01 +0100 User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4

Dear all,

I'd like to understand the following behaviour.  Consider

-------------------------------------------------------------------------------
)abb package TEST Test
Test(): with

foo: Fraction Integer -> Fraction Integer
foo: PrimeField 5 -> PrimeField 5
foo: Expression Integer -> Expression Integer

foo(n: Fraction Integer) == n
foo(n: PrimeField 5) == n
foo(n: Expression Integer) == n
-------------------------------------------------------------------------------

Then we have:

(4) -> foo 3

Function Selection for foo
Arguments: PI
-> no appropriate foo found in PositiveInteger
-> no appropriate foo found in Integer
-> no appropriate foo found in PositiveInteger
-> no appropriate foo found in Integer

Modemaps from Associated Packages
no modemaps

Remaining General Modemaps
 Expression Integer -> Expression Integer from Test
 PrimeField 5 -> PrimeField 5 from Test
 Fraction Integer -> Fraction Integer from Test

  signature:   PF 5 -> PF 5
implemented: slot (PrimeField 5)(PrimeField 5) from TEST
  signature:   FRAC INT -> FRAC INT
implemented: slot (Fraction (Integer))(Fraction (Integer)) from TEST
  signature:   EXPR INT -> EXPR INT
implemented: slot (Expression (Integer))(Expression (Integer)) from TEST

(4)  3
Type: PrimeField 5
-------------------------------------------------------------------------------

Note that the interpreter seems to prefer PF 5 over FRAC INT over EXPR INT.
Now consider:

p := z^10; s:=z=0..1;

(6) -> integrate(p, s)

Function Selection for integrate
Arguments: (POLY INT,SEGBIND NNI)
-> no appropriate integrate found in Polynomial Integer
-> no appropriate integrate found in SegmentBinding NonNegativeInteger
-> no appropriate integrate found in Polynomial Integer
-> no appropriate integrate found in SegmentBinding NonNegativeInteger

Modemaps from Associated Packages
 (Polynomial D2,Symbol) -> Polynomial D2 from Polynomial D2
if D2 has ALGEBRA FRAC INT and D2 has RING

Remaining General Modemaps
 (D,D1) -> D from D
if D1 = SYMBOL and D has UTSCAT D2 and D2 has RING and D2
has ACFS INT and D2 has PRIMCAT and D2 has TRANFUN and D2
has ALGEBRA FRAC INT or D1 = SYMBOL and D has UTSCAT D2 and
D2 has RING and D2 has variables: D2 -> List D1 and D2 has
integrate: (D2,D1) -> D2 and D2 has ALGEBRA FRAC INT
 (D,D1) -> D from D
if D1 = SYMBOL and D has UPXSCAT D2 and D2 has RING and D2
has ACFS INT and D2 has PRIMCAT and D2 has TRANFUN and D2
has ALGEBRA FRAC INT or D1 = SYMBOL and D has UPXSCAT D2
and D2 has RING and D2 has variables: D2 -> List D1 and D2
has integrate: (D2,D1) -> D2 and D2 has ALGEBRA FRAC INT

 (D,D1) -> D from D
if D1 = SYMBOL and D has ULSCAT D2 and D2 has RING and D2
has ACFS INT and D2 has PRIMCAT and D2 has TRANFUN and D2
has ALGEBRA FRAC INT or D1 = SYMBOL and D has ULSCAT D2 and
D2 has RING and D2 has variables: D2 -> List D1 and D2 has
integrate: (D2,D1) -> D2 and D2 has ALGEBRA FRAC INT
 (D,D1) -> D from D
if D has MTSCAT(D2,D1) and D2 has RING and D1 has ORDSET
and D2 has ALGEBRA FRAC INT
 (Fraction Polynomial D4,Symbol) -> Union(Expression D4,List
Expression D4)
from IntegrationResultRFToFunction D4
if D4 has CHARZ and D4 has Join(GcdDomain,RetractableTo
Integer,OrderedSet,LinearlyExplicitRingOver Integer)
 (GeneralUnivariatePowerSeries(D2,D3,D4),Variable D3) ->
GeneralUnivariatePowerSeries(D2,D3,D4)
from GeneralUnivariatePowerSeries(D2,D3,D4)
if D3: SYMBOL and D2 has ALGEBRA FRAC INT and D2 has RING
and D4: D2
 (D2,Symbol) -> Union(D2,List D2) from FunctionSpaceIntegration(
D4,D2)
if D4 has Join(EuclideanDomain,OrderedSet,
CharacteristicZero,RetractableTo Integer,
LinearlyExplicitRingOver Integer) and D2 has Join(
TranscendentalFunctionCategory,PrimitiveFunctionCategory,
AlgebraicallyClosedFunctionSpace D4)
 (Fraction Polynomial D4,SegmentBinding OrderedCompletion
Fraction Polynomial D4) -> Union(f1: OrderedCompletion Expression
D4,f2: List OrderedCompletion Expression D4,fail: failed,
pole: potentialPole)
from RationalFunctionDefiniteIntegration D4
if D4 has Join(EuclideanDomain,OrderedSet,
CharacteristicZero,RetractableTo Integer,
LinearlyExplicitRingOver Integer)
 (Fraction Polynomial D4,SegmentBinding OrderedCompletion
Expression D4) -> Union(f1: OrderedCompletion Expression D4,f2:
List OrderedCompletion Expression D4,fail: failed,pole:
potentialPole)
from RationalFunctionDefiniteIntegration D4
if D4 has Join(EuclideanDomain,OrderedSet,
CharacteristicZero,RetractableTo Integer,
LinearlyExplicitRingOver Integer)
 (D2,SegmentBinding OrderedCompletion D2) -> Union(f1:
OrderedCompletion D2,f2: List OrderedCompletion D2,fail: failed,
pole: potentialPole)
from ElementaryFunctionDefiniteIntegration(D4,D2)
if D2 has Join(TranscendentalFunctionCategory,
PrimitiveFunctionCategory,AlgebraicallyClosedFunctionSpace
D4) and D4 has Join(EuclideanDomain,OrderedSet,
CharacteristicZero,RetractableTo Integer,
LinearlyExplicitRingOver Integer)

  signature:   (EXPR INT,SEGBIND ORDCOMP EXPR INT) -> Union(f1: ORDCOMP
EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Expression (Integer))(SegmentBinding
(OrderedCompletion (Expression (Integer)))) from DEFINTEF(INT,EXPR INT)
  signature:   (FRAC POLY INT,SEGBIND ORDCOMP EXPR INT) -> Union(f1:
ORDCOMP EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Fraction (Polynomial (Integer)))(SegmentBinding
(OrderedCompletion (Expression (Integer)))) from DEFINTRF INT
  signature:   (FRAC POLY INT,SEGBIND ORDCOMP FRAC POLY INT) -> Union(f1:
ORDCOMP EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Fraction (Polynomial (Integer)))(SegmentBinding
(OrderedCompletion (Fraction (Polynomial (Integer))))) from DEFINTRF INT

Function Selection for map by coercion facility (map)
Arguments: ((NNI -> ORDCOMP EXPR INT),SEGBIND NNI)
Target type: SEGBIND ORDCOMP EXPR INT
-> no appropriate map found in SegmentBinding NonNegativeInteger
-> no appropriate map found in SegmentBinding OrderedCompletion Expression
Integer
-> no appropriate map found in OrderedCompletion Expression Integer
-> no appropriate map found in NonNegativeInteger
-> no appropriate map found in OrderedCompletion Expression Integer

Modemaps from Associated Packages
 ((D4 -> D5),SegmentBinding D4) -> SegmentBinding D5
from SegmentBindingFunctions2(D4,D5)
if D4 has TYPE and D5 has TYPE

  signature:   ((NNI -> ORDCOMP EXPR INT),SEGBIND NNI) -> SEGBIND ORDCOMP
EXPR INT
implemented: slot (SegmentBinding (OrderedCompletion (Expression
(Integer))))(Mapping (OrderedCompletion (Expression (Integer)))
(NonNegativeInteger))(SegmentBinding (NonNegativeInteger)) from
SEGBIND2(NNI,ORDCOMP EXPR INT)

1
(6)  --
11
Type: Union(f1: OrderedCompletion Expression Integer,...)

There are many things I do not understand:

1) why doesn't the interpreter choose the "General Modemap"

 (Fraction Polynomial D4,SegmentBinding OrderedCompletion
Fraction Polynomial D4)

?

2) why is its preference different now:

  signature:   (EXPR INT,SEGBIND ORDCOMP EXPR INT) -> Union(f1: ORDCOMP
EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Expression (Integer))(SegmentBinding
(OrderedCompletion (Expression (Integer)))) from DEFINTEF(INT,EXPR INT)
  signature:   (FRAC POLY INT,SEGBIND ORDCOMP EXPR INT) -> Union(f1:
ORDCOMP EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Fraction (Polynomial (Integer)))(SegmentBinding
(OrderedCompletion (Expression (Integer)))) from DEFINTRF INT
  signature:   (FRAC POLY INT,SEGBIND ORDCOMP FRAC POLY INT) -> Union(f1:
ORDCOMP EXPR INT,f2: LIST ORDCOMP EXPR INT,fail: failed,pole: potentialPole)
implemented: slot (Union (: f1 (OrderedCompletion (Expression
(Integer)))) (: f2 (List (OrderedCompletion (Expression (Integer))))) (: fail
failed) (: pole potentialPole))(Fraction (Polynomial (Integer)))(SegmentBinding
(OrderedCompletion (Fraction (Polynomial (Integer))))) from DEFINTRF INT

I.e., in package DEFINTRF, it seems to prefer (FRAC POLY INT,SEGBIND ORDCOMP
EXPR INT) over (FRAC POLY INT,SEGBIND ORDCOMP FRAC POLY INT).

3) why does it prefer DEFINTEF(INT,EXPR INT) over DEFINTRF INT ?

ANY hints?

Martin