'Martin R' via FriCAS - computer algebra system
2018-07-05 15:17:04 UTC
Dear all,
as you may know, I am trying to improve the accessibility of FriCAS from
sage, since some people (including myself) value FriCAS strengths.
I wanted to add functionality to translate FriCAS' sums and products into
sage's, but ran into a stupid problem.
Basically, I use the unparsed InputForm to obtain an expression tree from
FriCAS EXPR. Consider now:
(52) -> f := guess([reduce(*, [reduce(+, [1/k for k in 1..m], 0) for m in
1..n], 1) for n in 0..10]).1
p - 1
n - 1 11
++-++ --+ 1
(52) | | > ------- + 1
| | --+ s + 2
p = 0 s = 0 10
11 10
Type:
Expression(Integer)
(53) -> f::INFORM
(53)
(%defprod (+ (%defsum (/ 1 (+ %LW 2)) %LW (*01000s 10) 0 (+ %LX - 1)) 1)
%LX (*01000p 11) 0 (+ n - 1))
Type:
InputForm
As you can see, the summation variables have subscripts. However, the
string representation of the InputForm of scripted symbols does not allow
to reproduce the symbol. In fact, the code in symbol.spad is simply:
convert(s : %) : InputForm == convert(s pretend Symbol)$InputForm
Would it be possible to change that to something like the following
(WARNING: only lightly tested!). Two comments:
1) The scripts are of type OutputForm, but there is no way to get an
InputForm from an OutputForm. So the below will not work always, but only
when the input is reasonable. In fact
interpret convert subscript('s, [z^2]) works...
2) There seems to be a problem when the subscript has a value. For
example, x := subscript('s, ['x^2]) produces an error about cons'ing
InputForm with InputForm. Not sure what's happening there.
Best wishes,
Martin
Code:
convert(s: Symbol): InputForm ==
not scripted? s => convert(name s)$InputForm
ls := scripts s
A: List InputForm := [e pretend InputForm for e in ls.sub]
B: List InputForm := [e pretend InputForm for e in ls.sup]
C: List InputForm := [e pretend InputForm for e in ls.presup]
D: List InputForm := [e pretend InputForm for e in ls.presub]
E: List InputForm := [e pretend InputForm for e in ls.args]
a: InputForm := convert('script)
b: InputForm := convert name s
c: InputForm := cons(convert('construct), [cons(convert('construct), e)
for e in [A, B, C, D, E]])
convert([a, b, c])
as you may know, I am trying to improve the accessibility of FriCAS from
sage, since some people (including myself) value FriCAS strengths.
I wanted to add functionality to translate FriCAS' sums and products into
sage's, but ran into a stupid problem.
Basically, I use the unparsed InputForm to obtain an expression tree from
FriCAS EXPR. Consider now:
(52) -> f := guess([reduce(*, [reduce(+, [1/k for k in 1..m], 0) for m in
1..n], 1) for n in 0..10]).1
p - 1
n - 1 11
++-++ --+ 1
(52) | | > ------- + 1
| | --+ s + 2
p = 0 s = 0 10
11 10
Type:
Expression(Integer)
(53) -> f::INFORM
(53)
(%defprod (+ (%defsum (/ 1 (+ %LW 2)) %LW (*01000s 10) 0 (+ %LX - 1)) 1)
%LX (*01000p 11) 0 (+ n - 1))
Type:
InputForm
As you can see, the summation variables have subscripts. However, the
string representation of the InputForm of scripted symbols does not allow
to reproduce the symbol. In fact, the code in symbol.spad is simply:
convert(s : %) : InputForm == convert(s pretend Symbol)$InputForm
Would it be possible to change that to something like the following
(WARNING: only lightly tested!). Two comments:
1) The scripts are of type OutputForm, but there is no way to get an
InputForm from an OutputForm. So the below will not work always, but only
when the input is reasonable. In fact
interpret convert subscript('s, [z^2]) works...
2) There seems to be a problem when the subscript has a value. For
example, x := subscript('s, ['x^2]) produces an error about cons'ing
InputForm with InputForm. Not sure what's happening there.
Best wishes,
Martin
Code:
convert(s: Symbol): InputForm ==
not scripted? s => convert(name s)$InputForm
ls := scripts s
A: List InputForm := [e pretend InputForm for e in ls.sub]
B: List InputForm := [e pretend InputForm for e in ls.sup]
C: List InputForm := [e pretend InputForm for e in ls.presup]
D: List InputForm := [e pretend InputForm for e in ls.presub]
E: List InputForm := [e pretend InputForm for e in ls.args]
a: InputForm := convert('script)
b: InputForm := convert name s
c: InputForm := cons(convert('construct), [cons(convert('construct), e)
for e in [A, B, C, D, E]])
convert([a, b, c])
--
You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+***@googlegroups.com.
To post to this group, send email to fricas-***@googlegroups.com.
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+***@googlegroups.com.
To post to this group, send email to fricas-***@googlegroups.com.
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.