Waldek,
I am sorry that my explanation was so brief.
In your patch:
Modified: trunk/src/algebra/op.spad.pamphlet
===================================================================
--- trunk/src/algebra/op.spad.pamphlet 2009-05-16 00:07:58 UTC (rev 614)
+++ trunk/src/algebra/op.spad.pamphlet 2009-05-16 17:18:14 UTC (rev 615)
@@ -202,7 +202,7 @@
++ This package exports functions to set some commonly used properties
++ of operators, including properties which contain functions.
++ Keywords: operator.
-BasicOperatorFunctions1(A:SetCategory): Exports == Implementation where
+BasicOperatorFunctions1(A : SetCategory): Exports == Implementation where
OP ==> BasicOperator
Exports ==> with
@@ -233,11 +233,10 @@
derivative : OP -> Union(List(List A -> A), "failed")
++ derivative(op) returns the value of the "%diff" property of
++ op if it has one, and "failed" otherwise.
- if A has OrderedSet then
- constantOperator: A -> OP
+ constantOperator: A -> OP
++ constantOperator(a) returns a nullary operator op
++ such that \spad{op()} always evaluate to \spad{a}.
- constantOpIfCan : OP -> Union(A, "failed")
+ constantOpIfCan : OP -> Union(A, "failed")
++ constantOpIfCan(op) returns \spad{a} if op is the constant
++ nullary operator always returning \spad{a}, "failed" otherwise.
You removed the conditional
- if A has OrderedSet then
Maybe you did not really intend to do this?
But later in the code we see:
if A has OrderedSet then
cdisp : (OutputForm, List OutputForm) -> OutputForm
csex : (InputForm, List InputForm) -> InputForm
eqconst?: (OP, OP) -> Boolean
ltconst?: (OP, OP) -> Boolean
constOp : A -> OP
opconst:OP :=
comparison(equality(operator('constant, 0), eqconst?),
ltconst?)
cdisp(a, l) == a
csex(a, l) == a
eqconst?(a, b) ==
(va := property(a, CONST)) case "failed" => not has?(b, CONST)
((vb := property(b, CONST)) case None) and
((va::None) pretend A) = ((vb::None) pretend A)
ltconst?(a, b) ==
(va := property(a, CONST)) case "failed" => has?(b, CONST)
((vb := property(b, CONST)) case None) and
((va::None) pretend A) < ((vb::None) pretend A)
constOp a ==
setProperty(display(copy opconst, (l1: List(OutputForm)):
OutputForm +-> cdisp(a::OutputForm, l1)),
CONST, a pretend None)
constantOpIfCan op ==
is?(op, 'constant) and
((u := property(op, CONST)) case None) => (u::None) pretend A
"failed"
if A has ConvertibleTo InputForm then
constantOperator a == input(constOp a, (l1: List(InputForm)):
InputForm +-> csex(convert a, l1))
else
constantOperator a == constOp a
------
Notice the indentation. The problem that I had involved a case were
'constandOperator' was not defined. Looking at it now I think I see
that the real was just the incorrect indentation above.
This was something that came up while I was debugging something else
and I found this and fixed it without taking very good notes. I wanted
to be able to define a new type like this:
Expression XDistributedPolynomial(Symbol,Integer)
But 'Expression(R:Comparable)' so I modified 'FreeModuleCategory' as follows:
wsp...@debian:~/fricas-src/src/algebra$ svn diff poly.spad.pamphlet Makefile.in
Index: poly.spad.pamphlet
===================================================================
--- poly.spad.pamphlet (revision 666)
+++ poly.spad.pamphlet (working copy)
@@ -80,6 +80,17 @@
++ \spad{coefficient(x,s)} returns the coefficient of the
basis element s
-- attributs
if R has CommutativeRing then Module(R)
+ if R has Comparable then Comparable
+ add
+ if R has Comparable then
+ smaller?(p:%,q:%):Boolean ==
+ if leadingMonomial(p)=leadingMonomial(q) then
+ if leadingCoefficient(p)=leadingCoefficient(q) then
+ smaller?(reductum p, reductum q)
+ else
+ smaller?(leadingCoefficient(p),leadingCoefficient(q))
+ leadingMonomial(p)<leadingMonomial(q)
+
@
\section{domain FM FreeModule}
Index: Makefile.in
===================================================================
--- Makefile.in (revision 666)
+++ Makefile.in (working copy)
@@ -319,10 +319,10 @@
ATRIG BASTYPE BGAGG BRAGG BTAGG BTCAT CLAGG COMPCAT DIAGG \
DIFEXT DIFRING DIOPS DIRPCAT DIVRING DPOLCAT DVARCAT ELAGG \
ELEMFUN ELTAGG ES EUCDOM EVALAB FAMR FAXF FDIVCAT FEVALAB \
- FFCAT FFIELDC FIELD FINAALG FINITE FINRALG FLAGG FLINEXP FPC FPS \
- FRAMALG FRETRCT FRNAALG FSAGG FS GCDDOM GRALG GRMOD GROUP \
- HOAGG HYPCAT IEVALAB INS INTDOM IXAGG KDAGG LALG LIECAT LNAGG \
- LODOCAT LOGIC LSAGG LZSTAGG MATCAT MODULE MONAD MONADWU \
+ FFCAT FFIELDC FIELD FINAALG FINITE FINRALG FLAGG FLINEXP FMCAT \
+ FPC FPS FRAMALG FRETRCT FRNAALG FSAGG FS GCDDOM GRALG GRMOD \
+ GROUP HOAGG HYPCAT IEVALAB INS INTDOM IXAGG KDAGG LALG LIECAT \
+ LNAGG LODOCAT LOGIC LSAGG LZSTAGG MATCAT MODULE MONAD MONADWU \
MONOGEN MONOID MTSCAT NAALG NARNG NASRING OC ORDRING ORDSET OREPCAT \
PDRING PFECAT POLYCAT PSCAT PSETCAT QFCAT QUATCAT RADCAT \
RCAGG RCFIELD RETRACT RING RMATCAT RNS RPOLCAT RRCC RSETCAT \
wsp...@debian:~/fricas-src/src/algebra$
to provide a default 'smaller?' operation inherited by the XPOLY domains.
Testing revealed the 'constandOperator' problem. Then by changing:
--- op.spad.pamphlet (revision 666)
+++ op.spad.pamphlet (working copy)
@@ -271,7 +271,7 @@
derivative(op, [(l1: List(A)): A +-> f first l1]$List(List A -> A))
error "Operator is not unary"
- if A has OrderedSet then
+ if A has Comparable then
I found the problem went away. We need at least Comparable in order to
define 'ltconst?', 'opconst' and 'constOp'.
Regards,
Bill Page.
On Mon, Sep 14, 2009 at 4:32 PM, Waldek Hebisch wrote:
>
> Bill Page wrote:
>>
>> Here is my patch against op.spad.pamphlet. Besides 'applyQuote' chunk
>> it also contains another small change relating to the earlier change
>> in FriCAS that separated the concept of 'OrderedSet' from the concept
>> of an internal system defined ordering implemented by the category
>> 'Comparable'. The problem showed up when I wanted to use some
>> functions from op in the case of an 'Expression(R)' where R has
>> Comparable but not OrderedSet., e.g. 'Expression Boolean'
>>
>
> Could you say which functions you tried to use and what problems
> you have met? I must admit that in general I would prefer to
> limit use of ordering (either form 'OrderedSet' or from
> 'Comparable'). The change you propose effectively transfers
> ordering form 'Comparable' to ordering of constant operators.
> I wonder why do you need such ordering?
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/fricas-devel?hl=en
-~----------~----~----~----~------~----~------~--~---