diff --git a/CHANGELOG.md b/CHANGELOG.md index d4c47cfc..4cf8f411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ### Enhancements * Support `fac` in LEAN formula generation -* Improve LEAN formula generation for `pow` +* Generalize LEAN formula generation for `pow` +* Use multi-line output for PARI/GP formulas ## v25.11.2 diff --git a/src/form/pari.cpp b/src/form/pari.cpp index e40fe4a3..a1d46bf4 100644 --- a/src/form/pari.cpp +++ b/src/form/pari.cpp @@ -142,7 +142,16 @@ std::string PariFormula::toString() const { } return buf.str(); } else { - return main_formula.toString("; ", true); + // Get all function definitions in the formula to determine output format + auto functions = + FormulaUtil::getDefinitions(main_formula, Expression::Type::FUNCTION); + if (functions.size() > 1) { + // Multiple functions: use newline separator and no brackets + return main_formula.toString("\n", false); + } else { + // Single function: use semicolon separator with brackets (original behavior) + return main_formula.toString("; ", true); + } } } diff --git a/tests/formula/pari-function.txt b/tests/formula/pari-function.txt index e7895d2a..d5e0ac3e 100644 --- a/tests/formula/pari-function.txt +++ b/tests/formula/pari-function.txt @@ -1,6 +1,8 @@ A000023: a(n) = if(n==3,-2,if(n==2,2,if(n==1,-1,if(n==0,1,local(l1=a(n-1)); (n-1)*(2*a(n-2)+l1)-l1)))) A000027: a(n) = n A000032: a(n) = if(n==2,3,if(n==1,1,if(n==0,2,a(n-1)+a(n-2)))) -A000058: (a(n) = b(n)+1); (b(n) = if(n==0,1,local(l1=b(n-1)); l1*(l1+1))) +A000058: a(n) = b(n)+1 + b(n) = if(n==0,1,local(l1=b(n-1)); l1*(l1+1)) A000247: a(n) = 2^n-n-2 -A001715: (a(n) = truncate(b(n)/6)); (b(n) = if(n==0,1,n*b(n-1))) +A001715: a(n) = truncate(b(n)/6) + b(n) = if(n==0,1,n*b(n-1))