From: abpetrov <abp...@uf...> - 2013-08-01 04:34:08
|
Hi, I am new in Reduce, so I ask forgive me this question, it is may be simple. I am trying to define rule for an operator operator f1; r1 := {f1(~x)+f1(~y)=> f(x+y)}; but when i try to use it ( f1(x) + f1(y) where r1 ); i have error message ***** Unmatched free variable(s) ~y Is it possible to define rule for such operation ( not for f(~x+~y)=>f(x)+f(y), there isn't problem here)? So please help me. Best regards, Petrov Alexander. |
From: Rainer S. <rai...@gm...> - 2013-08-01 05:36:39
|
On Thu, 1 Aug 2013 at 09:59 -0000, abpetrov wrote: > Hi, > I am new in Reduce, so I ask forgive me this question, it is may be simple. > I am trying to define rule for an operator > > operator f1; > r1 := {f1(~x)+f1(~y)=> f(x+y)}; > > but when i try to use it > > ( f1(x) + f1(y) where r1 ); > > i have error message > > ***** Unmatched free variable(s) ~y > > Is it possible to define rule for such operation ( not for > f(~x+~y)=>f(x)+f(y), there isn't problem here)? I'm afraid that this is not possible with the rule mechanism (see section 11.2.5 of the Reduce manual for an explanation). Instead you could try the user contributed pm module, documented in packages/pm/pm.txt Hope that helps Rainer |
From: abpetrov <abp...@uf...> - 2013-08-01 14:32:27
|
this program work operator f1, ff; r1 := {ff( f1(~x)+f1(~y))=> ff( f1(x+y))}; p := f1(x) + f1(y); p2 := ( ff(p) where r1 ); part( p2, 1); but I must declare dummy operator ff Best Regards Petrov Alexander |
From: abpetrov <abp...@uf...> - 2013-08-01 14:05:34
|
01.08.2013 05:36, Rainer Schöpf пишет: > On Thu, 1 Aug 2013 at 09:59 -0000, abpetrov wrote: > > > Hi, > > I am new in Reduce, so I ask forgive me this question, it is may be simple. > > I am trying to define rule for an operator > > > > operator f1; > > r1 := {f1(~x)+f1(~y)=> f(x+y)}; > > > > but when i try to use it > > > > ( f1(x) + f1(y) where r1 ); > > > > i have error message > > > > ***** Unmatched free variable(s) ~y > > > > Is it possible to define rule for such operation ( not for > > f(~x+~y)=>f(x)+f(y), there isn't problem here)? > > I'm afraid that this is not possible with the rule mechanism (see section 11.2.5 > of the Reduce manual for an explanation). > > Instead you could try the user contributed pm module, documented in > > packages/pm/pm.txt > > Hope that helps > Rainer > I made attempt with program load_package pm; operator f1; s(f1(x) + f1(y),f1(?x) + f1(?y)−>f1(x+y)); And then I got next error message ***** (? y) invalid as operator I suppose I can do what I want with operator part, but I don't like this solution. Best Regards Petrov Alexander |
From: Rainer S. <rai...@gm...> - 2013-08-01 20:18:17
|
On Thu, 1 Aug 2013 at 20:05 -0000, abpetrov wrote: > I made attempt with program > > load_package pm; > operator f1; > s(f1(x) + f1(y),f1(?x) + f1(?y)−>f1(x+y)); > > And then I got next error message > > ***** (? y) invalid as operator It took me a while to understand the problem: you are using a non-ASCII character (Unicode \u2212) instead of a minus sign in "->". If you use the minus sign it works. Rainer |
From: abpetrov <abp...@uf...> - 2013-08-06 08:22:20
Attachments:
patchfile.patch
|
Hi, I have Gentoo as OS at my personal computer, and I installed Reduce from portage, as it requires Gentoo rules. This work fine. But for better learning Redduce I got copy from subversion and try to build local executable file, not installed in my system. And I got error message unknown system I found that this message goes from file scripts/findos.sh where branch for Gentoo is absent. I added this branch to it and here included corresponding patch file. Best regards, Petrov Alexander. |
From: Rainer S. <rai...@gm...> - 2013-08-07 17:12:42
|
On Tue, 6 Aug 2013 at 14:22 -0000, abpetrov wrote: > I have Gentoo as OS at my personal computer, > and I installed Reduce from portage, as it requires > Gentoo rules. This work fine. > But for better learning Redduce I got copy > from subversion and try to build local executable file, > not installed in my system. And I got error message > > unknown system > > I found that this message goes from file scripts/findos.sh > where branch for Gentoo is absent. I added this branch to it > and here included corresponding patch file. Thanks, I added gentoo to the list of vendors in the findos.sh file. Rainer |
From: abpetrov <abp...@uf...> - 2013-08-06 08:32:50
|
Hi, I tried to define rules for working with fermi operators. Here is the corresponding program: load_package noncom2; operator a,ac; noncom a,a; noncom ac,ac; noncom a,ac; for all i let a(i)*ac(i) = 1 - ac(i)*a(i); for all i,j such that i neq j let a(i)*ac(j) = -ac(j)*a(i); for all i,j let a(i)*a(j) = -a(j)*a(i); for all i,j let aс(i)*aс(j) = -aс(j)*aс(i); operator anticom; for all x,y let anticom(x,y) = x*y + y*x; But when I make attempt calculate an anticommutator like anticom( ac(i)*a(j), a(k)); I got error message Segmentation fault What is wrong in my rules? Best regards, Petrov Alexander. |
From: Rainer S. <rai...@gm...> - 2013-08-06 22:34:50
|
On Tue, 6 Aug 2013 at 14:32 -0000, abpetrov wrote: > > Hi, > > I tried to define rules for working with fermi operators. Here is > the corresponding program: > > load_package noncom2; > > operator a,ac; > noncom a,a; > noncom ac,ac; > noncom a,ac; > > for all i let a(i)*ac(i) = 1 - ac(i)*a(i); > for all i,j such that i neq j let a(i)*ac(j) = -ac(j)*a(i); > for all i,j let a(i)*a(j) = -a(j)*a(i); > for all i,j let aс(i)*aс(j) = -aс(j)*aс(i); > > operator anticom; > for all x,y let anticom(x,y) = x*y + y*x; > > > But when I make attempt calculate an anticommutator like > > anticom( ac(i)*a(j), a(k)); > > I got error message > > Segmentation fault > > What is wrong in my rules? Your rules cause an infinite recursion. For example, a(i)*a(j) => -a(j)*a(i) => - (-a(i)*a(j)) => -(-(-a(j)*a(i) )) .... One possiblity to apply the rule only once is to depend on the order of the variables: for all i,j such that ordp(i,j) let a(i)*a(j) = -a(j)*a(i); for all i,j such that ordp(i,j) let aс(i)*aс(j) = -aс(j)*aс(i); Regards, Rainer |
From: abpetrov <abp...@uf...> - 2013-08-07 02:53:18
|
06.08.2013 22:34, Rainer Schöpf пишет: > On Tue, 6 Aug 2013 at 14:32 -0000, abpetrov wrote: > > > > > Hi, > > > > I tried to define rules for working with fermi operators. Here is > > the corresponding program: > > > > load_package noncom2; > > > > operator a,ac; > > noncom a,a; > > noncom ac,ac; > > noncom a,ac; > > > > for all i let a(i)*ac(i) = 1 - ac(i)*a(i); > > for all i,j such that i neq j let a(i)*ac(j) = -ac(j)*a(i); > > for all i,j let a(i)*a(j) = -a(j)*a(i); > > for all i,j let aс(i)*aс(j) = -aс(j)*aс(i); > > > > operator anticom; > > for all x,y let anticom(x,y) = x*y + y*x; > > > > > > But when I make attempt calculate an anticommutator like > > > > anticom( ac(i)*a(j), a(k)); > > > > I got error message > > > > Segmentation fault > > > > What is wrong in my rules? > > Your rules cause an infinite recursion. For example, > > a(i)*a(j) => -a(j)*a(i) => - (-a(i)*a(j)) => -(-(-a(j)*a(i) )) .... > > One possiblity to apply the rule only once is to depend on the order of the > variables: > > for all i,j such that ordp(i,j) let a(i)*a(j) = -a(j)*a(i); > for all i,j such that ordp(i,j) let aс(i)*aс(j) = -aс(j)*aс(i); > > Regards, > Rainer thank you |
From: abpetrov <abp...@uf...> - 2016-09-19 19:58:44
|
Hi, there is some question with operator sum. I tried to calculate double sum with some abstract operator f: foo:=S=sum(sum(f(k1,k2)+1,k1),k2); The result is: foo := s=sum(sum(f(k1,k2),k1),k2) + k1*k2 - it isn't right, because of 1)there isn't limits of sum 2) I don't want to make any calculations and remove 1 outside sum. Can I prevent sum s from automatic calculations? Best regards, Petrov Alexander. |
From: abpetrov <abp...@uf...> - 2014-02-27 18:59:33
Attachments:
reduce_ide1.png
|
Hi, I decide to make simple Reduce IDE for myself. Now it is works fine for me. Of course I will try improve it, but it is depends from free time. And it is not my priority, I prefer mathematical part Reduce. If you think, that this program may be useful for somebody except me, I offer you distribute it sources with the same free license as Reduce. About program. It is written in free pascal in Lazarus and used interface with Reduce over pipe. I use console mode Reduce. It looks like multitab editor, like gedit or Kate, but it has some additional menu items. It allows edit many files at the same time. It has syntax highlighting. It can execute single line, selection or whole file from active tab. It remembers last session. Possible it has next big disadvantages now: 1) no nice graphic mathematical output 2) no internalization, English only 3) no makefile, I build it in Lazarus directly Screenshot is attached. Best regards, Petrov Alexander. |
From: Arthur N. <ac...@ca...> - 2014-02-27 20:37:18
|
That looks interesting. I think we should put that in the "generic" directory for Reduce (alongside redfront & qreduce etc) so that everybody who wants can build and try it. I have never tried Lazarus but I see it asserts that it can be used on Linux and Win32 (and more). You might like to consider what set of files could by put as say .../trunk/generic/petrov_ide/... (or you might consider what name you wanted this to have) then put the licese terms in all files so that that is explicit (obviously ensuring that you are entitled to!) and send me a .zip or .tar file so I can install it there. It would be good if there was a document (eg in LaTeX or a plain text file) that explains how to fetch Lazarus and build your stuff, and enough instructions for setting it up and using it that reasonably ordinary people could try it.... and if you ensure that you have a sourceforge user identity you can probably be added to the lists so you can then update and maybe even support it! Arthur On Fri, 28 Feb 2014, abpetrov wrote: > > Hi, > > I decide to make simple Reduce IDE for myself. Now it is works fine for > me. Of course I will try improve it, but it is depends from free time. > And it is not my priority, I prefer mathematical part Reduce. > > If you think, that this program may be useful for somebody except me, I > offer you distribute it sources with the same free license as Reduce. > > About program. It is written in free pascal in Lazarus and used > interface with Reduce over pipe. I use console mode Reduce. > It looks like multitab editor, like gedit or Kate, but it has some > additional menu items. It allows edit many files at the same time. It > has syntax highlighting. It can execute single line, selection or whole > file from active tab. It remembers last session. > > Possible it has next big disadvantages now: > 1) no nice graphic mathematical output > 2) no internalization, English only > 3) no makefile, I build it in Lazarus directly > > > Screenshot is attached. > > Best regards, Petrov Alexander. > > |
From: abpetrov <abp...@uf...> - 2014-03-06 18:44:26
Attachments:
lreduce.zip
|
I am sorry, I have to send to red...@li... You may try to build LReduce. My sourceforge account name is alex_bp 27.02.2014 20:37, Arthur Norman пишет: > That looks interesting. I think we should put that in the "generic" > directory for Reduce (alongside redfront & qreduce etc) so that > everybody who wants can build and try it. I have never tried Lazarus > but I see it asserts that it can be used on Linux and Win32 (and > more). You might like to consider what set of files could by put as say > .../trunk/generic/petrov_ide/... > (or you might consider what name you wanted this to have) then put the > licese terms in all files so that that is explicit (obviously ensuring > that you are entitled to!) and send me a .zip or .tar file so I can > install it there. It would be good if there was a document (eg in > LaTeX or a plain text file) that explains how to fetch Lazarus and > build your stuff, and enough instructions for setting it up and using > it that reasonably ordinary people could try it.... and if you ensure > that you have a sourceforge user identity you can probably be added to > the lists so you can then update and maybe even support it! > > Arthur > > On Fri, 28 Feb 2014, abpetrov wrote: > >> >> Hi, >> >> I decide to make simple Reduce IDE for myself. Now it is works fine for >> me. Of course I will try improve it, but it is depends from free time. >> And it is not my priority, I prefer mathematical part Reduce. >> >> If you think, that this program may be useful for somebody except me, I >> offer you distribute it sources with the same free license as Reduce. >> >> About program. It is written in free pascal in Lazarus and used >> interface with Reduce over pipe. I use console mode Reduce. >> It looks like multitab editor, like gedit or Kate, but it has some >> additional menu items. It allows edit many files at the same time. It >> has syntax highlighting. It can execute single line, selection or whole >> file from active tab. It remembers last session. >> >> Possible it has next big disadvantages now: >> 1) no nice graphic mathematical output >> 2) no internalization, English only >> 3) no makefile, I build it in Lazarus directly >> >> >> Screenshot is attached. >> >> Best regards, Petrov Alexander. >> >> > |
From: abpetrov <abp...@uf...> - 2014-03-23 17:49:06
|
Hi, I try define a new operator f, and, respectively, a new derivation for it. But there is an question. 1) operator f$ operator x$ df(f(x(i)),x(i)); This expression is not 0, it is right. 2) operator f$ operator x$ df(f(x(i)),x(k)); This expression is 0, it is not right. I want have some unevaluated derivation, it is not 0. 3) I can define a rule, But it doesn't help. The result is 0. operator f$ operator x$ operator Delta$ Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }$ let Deriv_by_ind$ df(f(x(i)),x(k)); How can I get unevaluated form df(f(x(i)),x(k)), which is not 0? Best regards, Petrov Alexander. |
From: Rainer S. <rai...@gm...> - 2014-03-23 19:20:21
|
On Sun, 23 Mar 2014 at 23:50 -0000, abpetrov wrote: > > Hi, > > I try define a new operator f, and, respectively, a new derivation for it. > But there is an question. > > 1) > operator f$ > operator x$ > > df(f(x(i)),x(i)); > > This expression is not 0, it is right. > > 2) > operator f$ > operator x$ > > df(f(x(i)),x(k)); > > This expression is 0, it is not right. x(i) and x(k) are different, so there is no dependency between them. > I want have some unevaluated derivation, it is not 0. > > 3) I can define a rule, But it doesn't help. The result is 0. > operator f$ > operator x$ > operator Delta$ > Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }$ > let Deriv_by_ind$ > > df(f(x(i)),x(k)); > > How can I get unevaluated form df(f(x(i)),x(k)), which is not 0? Two possiblities: (a) define a rule for f: let { df(f(x(~j)),x(~k)) => df(f(x(j)),x(j)) * Delta(j-k) when j neq k}; (b) Use the dfpart package: load_package dfpart; generic_function f(u); operator Delta,x; Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }; let Deriv_by_ind; Regards, Rainer |
From: abpetrov <abp...@uf...> - 2014-03-25 17:51:08
|
I am sorry, I did not have to ask a general question. More precisely the situation is next. I want define a new function named asum (abstract summation). It is means a symbol Sum, used in mathematical expressions. But it doesn't involve any really summations. It is just symbol, which operates with some rules. So I defined this finction in module as module asum; % asum( f(i1,i2,...,iN), {i1,l1,h1},{i2,l2,h2},...,{iN,lN,hN}); put('asum,'simpfn,'simp!-asum); and so on. Respectively, I suppose, that I cann't use solution b). Moreover, because some series can not be rearranged like df(asum..., x) = asum(df(...,x),..) I don't want use solution a). I see one solution my problem like new function transform_asum( asum(...), 'df); but it will require a lot of work. I hope may be exists more simple solution, which I can not see because of my short knowledge of Reduce. 23.03.2014 19:20, Rainer Schöpf пишет: > On Sun, 23 Mar 2014 at 23:50 -0000, abpetrov wrote: > > > > > Hi, > > > > I try define a new operator f, and, respectively, a new derivation for it. > > But there is an question. > > > > 1) > > operator f$ > > operator x$ > > > > df(f(x(i)),x(i)); > > > > This expression is not 0, it is right. > > > > 2) > > operator f$ > > operator x$ > > > > df(f(x(i)),x(k)); > > > > This expression is 0, it is not right. > > x(i) and x(k) are different, so there is no dependency between them. > > > I want have some unevaluated derivation, it is not 0. > > > > 3) I can define a rule, But it doesn't help. The result is 0. > > operator f$ > > operator x$ > > operator Delta$ > > Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }$ > > let Deriv_by_ind$ > > > > df(f(x(i)),x(k)); > > > > How can I get unevaluated form df(f(x(i)),x(k)), which is not 0? > > Two possiblities: > > (a) define a rule for f: > > let { df(f(x(~j)),x(~k)) => df(f(x(j)),x(j)) * Delta(j-k) when j neq k}; > > > (b) Use the dfpart package: > > load_package dfpart; > > generic_function f(u); > > operator Delta,x; > Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }; > let Deriv_by_ind; > > > Regards, > Rainer > |
From: abpetrov <abp...@uf...> - 2014-03-27 17:21:30
|
I want to clarify the question. Can I redefine standard behaviour of DF for function asum, defined below? Or I have to define my own differentiate operator and rewrite many rules of DF to it? Best regards, Petrov Alexander. 25.03.2014 23:52, abpetrov пишет: > I am sorry, I did not have to ask a general question. > More precisely the situation is next. > I want define a new function named asum (abstract summation). > It is means a symbol Sum, used in mathematical expressions. > But it doesn't involve any really summations. It is just symbol, > which operates with some rules. > So I defined this finction in module as > > module asum; > > % asum( f(i1,i2,...,iN), {i1,l1,h1},{i2,l2,h2},...,{iN,lN,hN}); > > put('asum,'simpfn,'simp!-asum); > and so on. > > Respectively, I suppose, that I cann't use solution b). > Moreover, because some series can not be rearranged like > df(asum..., x) = asum(df(...,x),..) > > I don't want use solution a). > > I see one solution my problem like new function > transform_asum( asum(...), 'df); > > but it will require a lot of work. > I hope may be exists more simple solution, which I can not see > because of my short knowledge of Reduce. > > > > 23.03.2014 19:20, Rainer Schöpf пишет: >> On Sun, 23 Mar 2014 at 23:50 -0000, abpetrov wrote: >> >> > >> > Hi, >> > >> > I try define a new operator f, and, respectively, a new derivation for it. >> > But there is an question. >> > >> > 1) >> > operator f$ >> > operator x$ >> > >> > df(f(x(i)),x(i)); >> > >> > This expression is not 0, it is right. >> > >> > 2) >> > operator f$ >> > operator x$ >> > >> > df(f(x(i)),x(k)); >> > >> > This expression is 0, it is not right. >> >> x(i) and x(k) are different, so there is no dependency between them. >> >> > I want have some unevaluated derivation, it is not 0. >> > >> > 3) I can define a rule, But it doesn't help. The result is 0. >> > operator f$ >> > operator x$ >> > operator Delta$ >> > Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }$ >> > let Deriv_by_ind$ >> > >> > df(f(x(i)),x(k)); >> > >> > How can I get unevaluated form df(f(x(i)),x(k)), which is not 0? >> >> Two possiblities: >> >> (a) define a rule for f: >> >> let { df(f(x(~j)),x(~k)) => df(f(x(j)),x(j)) * Delta(j-k) when j neq k}; >> >> >> (b) Use the dfpart package: >> >> load_package dfpart; >> >> generic_function f(u); >> >> operator Delta,x; >> Deriv_by_ind := { df (x(~j), x(~j1)) => Delta(j-j1) }; >> let Deriv_by_ind; >> >> >> Regards, >> Rainer >> |