How to express and simplify symbolic expressions in Ginac?
Hi, I am pretty new to GiNac library in c++ and am struggling with one particular topic. I have been using ginac-1.8.6 I want to represent and simplify symbolic expressions (expressions with union, intersection, and not operator) with GiNac. I have been trying the following example #include <iostream>#include <ginac/ginac.h>using namespace std;using namespace GiNaC; int main(){ symbol x("x"), y("y"), z("z"); ex boolean_expr = (!x || y) && (x || z); cout << "Boolean expression: " << boolean_expr << endl; ex simplified_expr = normal(boolean_expr); cout << "Simplified expression: " << simplified_expr << endl; return 0; } But I keep on getting errors related to ||, !, and && operators. For example,
note: candidate: ‘operator!(bool)’ <built-in> note: no known conversion for argument 1 from ‘GiNaC::symbol’ to `bool’ error: no match for ‘operator!’ (operand type is `GiNaC::symbol’)
I also tried replacing ||, !, and && to or, not, and, respectively but get similar errors
error: no match for ‘operator!’ (operand type is ‘GiNaC::symbol’) ex boolean_expr = not(x) or y and (x or not(z));
So my question is how can I represent and, or, not. I am using Ginac 1.8.6 from here <https://www.ginac.de/Download.html>. I also checked the manual here <https://www.ginac.de/tutorial.pdf> but did not find an answer. Thanks, Archie http://anubhavnidhi.github.io/
Hello, Indeed, GiNaC does not provide a special class for boolean symbols. Probably, there is another C++ library, which can do this. Of course, you can partially model boolean values false/true by zero/non-zero and logical and/or with ×/+. Furthermore, you may simplify expressions by substitution (pow(wild(0),wild(1)) == wild(0)). For boolean negation you may need a new function to be defined, say neg(x), with a further substitution ({wild(0)*neg(wild(0)) == 0, wild(0)+neg(wild(0)) == 1}), etc. Best wishes, Vladimir -- Vladimir V. Kisil http://www1.maths.leeds.ac.uk/~kisilv/ Book: Geometry of Mobius Maps https://doi.org/10.1142/p835 Soft: Geometry of cycles http://moebinv.sourceforge.net/ Jupyter notebooks: https://github.com/vvkisil?tab=repositories
On Wed, 19 Apr 2023 17:51:46 -0700, "Anubhavnidhi Abhashkumar . via GiNaC-list" <ginac-list@ginac.de> said:
AA> Hi, AA> I am pretty new to GiNac library in c++ and am struggling with AA> one particular topic. I have been using ginac-1.8.6 AA> I want to represent and simplify symbolic expressions AA> (expressions with union, intersection, and not operator) with AA> GiNac. I have been trying the following example AA> #include <iostream>#include <ginac/ginac.h>using namespace AA> std;using namespace GiNaC; int main(){ symbol x("x"), y("y"), AA> z("z"); ex boolean_expr = (!x || y) && (x || z); cout << AA> "Boolean expression: " << boolean_expr << endl; AA> ex simplified_expr = normal(boolean_expr); cout << AA> "Simplified expression: " << simplified_expr << endl; AA> return 0; } AA> But I keep on getting errors related to ||, !, and && AA> operators. For example, >> note: candidate: ‘operator!(bool)’ <built-in> note: no known >> conversion for argument 1 from ‘GiNaC::symbol’ to `bool’ error: >> no match for ‘operator!’ (operand type is `GiNaC::symbol’) AA> I also tried replacing ||, !, and && to or, not, and, AA> respectively but get similar errors >> error: no match for ‘operator!’ (operand type is ‘GiNaC::symbol’) AA> ex boolean_expr = not(x) or y and (x or not(z)); AA> So my question is how can I represent and, or, not. I am using AA> Ginac 1.8.6 from here <https://www.ginac.de/Download.html>. I AA> also checked the manual here <https://www.ginac.de/tutorial.pdf> AA> but did not find an answer. AA> Thanks, Archie http://anubhavnidhi.github.io/
participants (2)
-
Anubhavnidhi Abhashkumar .
-
Vladimir V. Kisil