/* SSWork/yacc/debug/ahg.k /* cf. debug/toric0.k */ /* toric の generator を求める関数. A-hypergeometric の indicial ideal を求める関数. */ ShimomuraSpecial = true ; OnePath= true; Vvv = false; SetRingVariables_Verbose = false; def void QuietKan() { sm1(" [(KanGBmessage) 0] system_variable "); } def testhg1() { a = [[1,1,1,1,1,1], [0,0,0,1,1,1], [0,1,0,0,1,0], [0,0,1,0,0,1]]; return(idhg(a)); } def testhg2() { a = [[1,1,1,1,1], [0,2,3,4,3], [0,1,1,0,2]]; return(idhg(a)); } def idhg(a) { local a,ans,rd,i,ans2,ans3,n,ff,d,zlist; ans = toric(a); if (ShimomuraSpecial) { /* 先に, toric の initial part をとってしまう. */ /* 本当は, FW の initial part をとるべきなのかも? */ if (Vvv) {Println("-------- S-special ---------");} ans = Map(ans,"Init"); } ans = Map(ans,"ToString"); if (Vvv) {Println(ans);} rd = RingDonIndexedVariables("z",Length(a[0])+1+Length(a)); /* 4 秒程度かかる. */ ans = Map(ans,"Poly"); n = Length(a[0]); d = Length(a); ans2 = NewArray(Length(ans)); /* ans2 には, toric */ PSfor (i=0; i< Length(ans); i++) { ans2[i] = ztoDz(ans[i],n); } if (Vvv) {Println(ans2);} ans3 = atolin(a); /* ans3 には, 一次式 */ if (Vvv) {Println(ans3);} ff = Map(Join(ans2,ans3),"ToString"); ans = zindicial(ff,n,d); zlist = [ ]; PSfor(i= n; i