login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

This should become a page where we document design issues.

variables$UP

Currently, FriCAS says

fricas
(1) -> variables((x^2+2*x)::UP(x, INT))

\label{eq1}\left[ \verb#"?"# \right](1)
Type: List(SingletonAsOrderedSet?)

The reason for this is, that UP is a UPOLYC, which in turn is a

PolynomialCategory(R:Ring, E:OrderedAbelianMonoidSup, VarSet:OrderedSet)

with VarSet being SingletonAsOrderedSet. Hence it is currently not possible to instantiate variables in UP with a modeline other than % -> List SingletonAsOrderedSet, and since the latter domain only contains "?", we are out of luck.

This issue might be related to the following:

Where do variables belong?

Currently, FriCAS allows

fricas
(1/x)::UP(x, FRAC POLY INT)

\label{eq2}\frac{1}{x}(2)
Type: UnivariatePolynomial(x,Fraction(Polynomial(Integer)))

and

fricas
(1/x)::UP(x, EXPR INT)

\label{eq3}\frac{1}{x}(3)
Type: UnivariatePolynomial(x,Expression(Integer))

Similarly also for MPOLY, UTS and the like. The issue is that it currently not clear to which domain in the tower a variable belongs to. Mathematically related is the item UEXPR on the OldWishList.

Interface of RINTERP

I'm quite unsure what the interface of RINTERP should look like. Originally, I just wanted to mimick the interface of PINTERP. However, I'm not sure whether this is ideal. I'd rather fix both at once.

More to come, if there is interest.

Expression Integer type --unknown, Tue, 26 Apr 2005 21:39:15 -0500 reply
I tried to put this on my wiki home page, but I have no idea if it was successful or not.

Why do the following have Expression Integer type when they aren't integers:

fricas
sin(x)

\label{eq4}\sin \left({x}\right)(4)
Type: Expression(Integer)

fricas
asin(1)

\label{eq5}\frac{\pi}{2}(5)
Type: Expression(Integer)

fricas
sqrt(%pi)

\label{eq6}\sqrt{\pi}(6)
Type: Expression(Integer)

Re: Expression Integer type --Bill Page, Sun, 02 Oct 2005 21:36:42 -0500 reply
Type Expression Integer refers to any expression involving functions (or operators) and integers. If you don't tell FriCAS otherwise, then FriCAS "thinks" of sin(x) as sin(1*x) i.e. an Expression involving the function sin(), a polynomial function x with coefficient 1. For example, what would you expect the result of the expression sin(1.0*x) to be?
fricas
sin(1.0*x)

\label{eq7}\sin \left({x}\right)(7)
Type: Expression(Float)

The type of the result of some calculation in FriCAS is often expressed as an object of the same type as the operands that created it. So in your example asin(1) is an Expression Integer for the same reason as sin(x) is an Expression Integer and the result is still an Expression Integer even though FriCAS decides to display the value of asin(1) in a more convenient form. Ditto sqrt(%pi).

In princple it should be possible to ask FriCAS to represent the result of a calculation in a different form. E.g.

fricas
asin(1)::Expression Float

\label{eq8}1.5707963267 \<u> 948966192(8)
Type: Expression(Float)
fricas
sqrt(%pi)::Expression Float

\label{eq9}1.7724538509 \<u> 055160273(9)
Type: Expression(Float)

But in some cases the result is unexpected. For example:

fricas
asin(1)::Pi
Pi is not a valid type.

Pi is a type for certain constant-valued expressions in \pi. However in this case it seems that the domain Expression Integer is not sufficiently complete to perform this conversion, though it works in the other direction

fricas
%pi/2

\label{eq10}\frac{\pi}{2}(10)
Type: PiDomain?
fricas
%::Expression Integer

\label{eq11}\frac{\pi}{2}(11)
Type: Expression(Integer)


Comments from wyscc:

This is a quite common problem whenever a result can be expressed in a subdomain. In this case, the subdomain is Pi. The correct way to perform conversion of types in this situation is to retract, not coerce since coerce is supposedly always possible, whereas retract is not. The Interpreter will use retract if it is available even when :: is used. However, Expression Integer does not have RetractableTo(Pi) (we can add this if we like). An example where this works is:

fricas
4/3 * 6/2

\label{eq12}4(12)
Type: Fraction(Integer)
fricas
(4/3 * 6/2)::Integer

\label{eq13}4(13)
Type: Integer
fricas
retract(4/3 * 6/2)@Integer

\label{eq14}4(14)
Type: Integer

whereas this fails.

fricas
coerce(4/3*6/2)@Integer
An expression involving @ Integer actually evaluated to one of type PartialFraction(Integer) . Perhaps you should use :: Integer .




  Subject:   Be Bold !!
  ( 15 subscribers )  
Please rate this page: