On Sun, Nov 4, 2018 at 8:03 AM Waldek Hebisch <hebi...@math.uni.wroc.pl> wrote:
...
> <snip>
> > enough.  The following patch corrects this problem:
>
> Before the patch
>
> f101 := (x*z - z*x)^2 - 2
>
> was immediately recognized as irreducible.  With the patch I did not
> get answer for several minutes (may be I am not patient enough?).
> Similarly
>
> f102 := (x*z + z*x)^2 - 2
>
> and
>
> f103 := (x^2 + x + z)^2 - 2
>

Thanks again for these great test cases. There was an error in the
'bisect' function that caused an infinite loop triggered by the
earlier patch.  Here is a revised patch that corrects this problem.
(Only one additional change at the  beginning.)

---

diff --git a/xdpolyf1.spad b/xdpolyf1.spad
index d91cf4a..cc88597 100644
--- a/xdpolyf1.spad
+++ b/xdpolyf1.spad
@@ -75,7 +75,7 @@ XDistributedPolynomialFunctions1(ALPHABET:List
Symbol, F:Join(IntegralDomain,Gcd
       remove(0,map((x:G):G+->eval(x,z)$RF,e))

     bisect(z:List Equation G, e:List G):List Equation G ==
-      if #z<2 then return z
+      if #z<2 then return []
       z1 := first(z,#z quo 2)
       if groebner(map(numer,eval(e,z)))~=[1] then return z1
       z1 := last(z,#z quo 2)
@@ -145,16 +145,25 @@ XDistributedPolynomialFunctions1(ALPHABET:List
Symbol, F:Join(IntegralDomain,Gcd

       else
         s0: List Equation G := []
-        while empty? s0 for fp in v repeat
-          --output("try: ", fp::OutputForm)
-          s := solve(e1,remove(fp,v))$SystemSolvePackage(F)
-          while empty? s0 for s1 in s repeat
-            m := map(explicit, s1)
-            if #s1>0 and reduce(_and$Boolean, m) then s0:=s1
-        --output("s0: ",s0::OutputForm)
-
-        if empty? s0 then
-          return [p]
+        while empty? s0 repeat
+          while empty? s0 for fp in v repeat
+            --output("try: ", fp::OutputForm)
+            if not groebner(map(numer,e1))=[1] then
+              s := solve(e1,remove(fp,v))$SystemSolvePackage(F)
+              while empty? s0 for s1 in s repeat
+                m := map(explicit, s1)
+                if #s1>0 and reduce(_and$Boolean, m) then s0:=s1
+          --output("s0: ",s0::OutputForm)
+
+          if empty? s0 then
+            if empty? lz then
+              return [p]
+            else
+              -- try harder!
+              lz := bisect(lz,e)
+              e1 := eval(e,lz)
+              v := members set(concat map(variables, e1))$Set(Symbol)
+
         sz := concat(lz,s0)

         -- choose a parameter value to make G retractable to F

---

-- 
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+unsubscr...@googlegroups.com.
To post to this group, send email to fricas-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to