![]() ![]() | ![]() |
version 1.28, 2003/01/15 04:53:03 | version 1.43, 2003/11/27 02:20:51 | ||
---|---|---|---|
|
|
||
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | ||
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | ||
* | * | ||
* $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.27 2003/01/06 01:16:37 noro Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.42 2003/10/17 05:16:49 noro Exp $ | ||
*/ | */ | ||
#include "ca.h" | #include "ca.h" | ||
#include "base.h" | #include "base.h" | ||
|
|
||
int do_weyl; | int do_weyl; | ||
void Pdp_mul_trunc(),Pdp_quo(); | |||
void Pdp_ord(), Pdp_ptod(), Pdp_dtop(); | void Pdp_ord(), Pdp_ptod(), Pdp_dtop(); | ||
void Pdp_ptozp(), Pdp_ptozp2(), Pdp_red(), Pdp_red2(), Pdp_lcm(), Pdp_redble(); | void Pdp_ptozp(), Pdp_ptozp2(), Pdp_red(), Pdp_red2(), Pdp_lcm(), Pdp_redble(); | ||
void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest(), Pdp_td(), Pdp_sugar(); | void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest(), Pdp_td(), Pdp_sugar(); | ||
void Pdp_set_sugar(); | |||
void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv(); | void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv(); | ||
void Pdp_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat(); | void Pdp_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat(); | ||
void Pdp_nf(),Pdp_true_nf(); | void Pdp_nf(),Pdp_true_nf(); | ||
|
|
||
void Pdp_set_weight(); | void Pdp_set_weight(); | ||
void Pdp_nf_f(),Pdp_weyl_nf_f(); | void Pdp_nf_f(),Pdp_weyl_nf_f(); | ||
void Pdp_lnf_f(); | void Pdp_lnf_f(); | ||
void Pnd_gr(),Pnd_gr_trace(),Pnd_f4(); | |||
void Pnd_weyl_gr(),Pnd_weyl_gr_trace(); | |||
void Pnd_nf(); | |||
LIST remove_zero_from_list(LIST); | LIST remove_zero_from_list(LIST); | ||
|
|
||
{"dp_cont",Pdp_cont,1}, | {"dp_cont",Pdp_cont,1}, | ||
/* polynomial ring */ | /* polynomial ring */ | ||
/* special operations */ | |||
{"dp_mul_trunc",Pdp_mul_trunc,3}, | |||
{"dp_quo",Pdp_quo,2}, | |||
/* s-poly */ | /* s-poly */ | ||
{"dp_sp",Pdp_sp,2}, | {"dp_sp",Pdp_sp,2}, | ||
{"dp_sp_mod",Pdp_sp_mod,3}, | {"dp_sp_mod",Pdp_sp_mod,3}, | ||
|
|
||
{"dp_gr_mod_main",Pdp_gr_mod_main,5}, | {"dp_gr_mod_main",Pdp_gr_mod_main,5}, | ||
{"dp_gr_f_main",Pdp_gr_f_main,4}, | {"dp_gr_f_main",Pdp_gr_f_main,4}, | ||
{"dp_gr_checklist",Pdp_gr_checklist,2}, | {"dp_gr_checklist",Pdp_gr_checklist,2}, | ||
{"nd_f4",Pnd_f4,4}, | |||
{"nd_gr",Pnd_gr,4}, | |||
{"nd_gr_trace",Pnd_gr_trace,5}, | |||
{"nd_weyl_gr",Pnd_weyl_gr,4}, | |||
{"nd_weyl_gr_trace",Pnd_weyl_gr_trace,5}, | |||
{"nd_nf",Pnd_nf,5}, | |||
/* F4 algorithm */ | /* F4 algorithm */ | ||
{"dp_f4_main",Pdp_f4_main,3}, | {"dp_f4_main",Pdp_f4_main,3}, | ||
|
|
||
{"dp_td",Pdp_td,1}, | {"dp_td",Pdp_td,1}, | ||
{"dp_mag",Pdp_mag,1}, | {"dp_mag",Pdp_mag,1}, | ||
{"dp_sugar",Pdp_sugar,1}, | {"dp_sugar",Pdp_sugar,1}, | ||
{"dp_set_sugar",Pdp_set_sugar,2}, | |||
/* misc */ | /* misc */ | ||
{"dp_mbase",Pdp_mbase,1}, | {"dp_mbase",Pdp_mbase,1}, | ||
|
|
||
dp_subd(p1,p2,rp); | dp_subd(p1,p2,rp); | ||
} | } | ||
void Pdp_mul_trunc(arg,rp) | |||
NODE arg; | |||
DP *rp; | |||
{ | |||
DP p1,p2,p; | |||
p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg); p = (DP)ARG2(arg); | |||
asir_assert(p1,O_DP,"dp_mul_trunc"); | |||
asir_assert(p2,O_DP,"dp_mul_trunc"); | |||
asir_assert(p,O_DP,"dp_mul_trunc"); | |||
comm_muld_trunc(CO,p1,p2,BDY(p)->dl,rp); | |||
} | |||
void Pdp_quo(arg,rp) | |||
NODE arg; | |||
DP *rp; | |||
{ | |||
DP p1,p2; | |||
p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg); | |||
asir_assert(p1,O_DP,"dp_quo"); | |||
asir_assert(p2,O_DP,"dp_quo"); | |||
comm_quod(CO,p1,p2,rp); | |||
} | |||
void Pdp_weyl_mul(arg,rp) | void Pdp_weyl_mul(arg,rp) | ||
NODE arg; | NODE arg; | ||
DP *rp; | DP *rp; | ||
|
|
||
DP p1,p2; | DP p1,p2; | ||
p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg); | p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg); | ||
asir_assert(p1,O_DP,"dp_weyl_mul"); asir_assert(p2,O_DP,"dp_mul"); | asir_assert(p1,O_DP,"dp_weyl_mul"); asir_assert(p2,O_DP,"dp_weyl_mul"); | ||
do_weyl = 1; | do_weyl = 1; | ||
muld(CO,p1,p2,rp); | muld(CO,p1,p2,rp); | ||
do_weyl = 0; | do_weyl = 0; | ||
|
|
||
STOQ(p->sugar,*rp); | STOQ(p->sugar,*rp); | ||
} | } | ||
void Pdp_set_sugar(arg,rp) | |||
NODE arg; | |||
Q *rp; | |||
{ | |||
DP p; | |||
Q q; | |||
int i; | |||
p = (DP)ARG0(arg); | |||
q = (Q)ARG1(arg); | |||
if ( p && q) { | |||
asir_assert(p,O_DP,"dp_set_sugar"); | |||
asir_assert(q,O_N, "dp_set_sugar"); | |||
i = QTOS(q); | |||
if (p->sugar < i) { | |||
p->sugar = i; | |||
} | |||
} | |||
*rp = 0; | |||
} | |||
void Pdp_cri1(arg,rp) | void Pdp_cri1(arg,rp) | ||
NODE arg; | NODE arg; | ||
Q *rp; | Q *rp; | ||
|
|
||
dp_make_flaglist(rp); | dp_make_flaglist(rp); | ||
} | } | ||
extern int DP_Print; | extern int DP_Print, DP_PrintShort; | ||
void Pdp_gr_print(arg,rp) | void Pdp_gr_print(arg,rp) | ||
NODE arg; | NODE arg; | ||
Q *rp; | Q *rp; | ||
{ | { | ||
Q q; | Q q; | ||
int s; | |||
if ( arg ) { | if ( arg ) { | ||
asir_assert(ARG0(arg),O_N,"dp_gr_print"); | asir_assert(ARG0(arg),O_N,"dp_gr_print"); | ||
q = (Q)ARG0(arg); DP_Print = QTOS(q); | q = (Q)ARG0(arg); | ||
} else | s = QTOS(q); | ||
STOQ(DP_Print,q); | switch ( s ) { | ||
case 0: | |||
DP_Print = 0; DP_PrintShort = 0; | |||
break; | |||
case 1: | |||
DP_Print = 1; | |||
break; | |||
case 2: | |||
DP_Print = 0; DP_PrintShort = 1; | |||
break; | |||
default: | |||
DP_Print = s; DP_PrintShort = 0; | |||
break; | |||
} | |||
} else { | |||
if ( DP_Print ) { | |||
STOQ(1,q); | |||
} else if ( DP_PrintShort ) { | |||
STOQ(2,q); | |||
} else | |||
q = 0; | |||
} | |||
*rp = q; | *rp = q; | ||
} | } | ||
|
|
||
error("dp_gr_mod_main : invalid argument"); | error("dp_gr_mod_main : invalid argument"); | ||
create_order_spec(ARG4(arg),&ord); | create_order_spec(ARG4(arg),&ord); | ||
dp_gr_mod_main(f,v,homo,m,&ord,rp); | dp_gr_mod_main(f,v,homo,m,&ord,rp); | ||
} | |||
void Pnd_f4(arg,rp) | |||
NODE arg; | |||
LIST *rp; | |||
{ | |||
LIST f,v; | |||
int m,homo; | |||
struct order_spec ord; | |||
do_weyl = 0; | |||
asir_assert(ARG0(arg),O_LIST,"nd_gr"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_gr"); | |||
asir_assert(ARG2(arg),O_N,"nd_gr"); | |||
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); | |||
f = remove_zero_from_list(f); | |||
if ( !BDY(f) ) { | |||
*rp = f; return; | |||
} | |||
m = QTOS((Q)ARG2(arg)); | |||
create_order_spec(ARG3(arg),&ord); | |||
nd_gr(f,v,m,1,&ord,rp); | |||
} | |||
void Pnd_gr(arg,rp) | |||
NODE arg; | |||
LIST *rp; | |||
{ | |||
LIST f,v; | |||
int m,homo; | |||
struct order_spec ord; | |||
do_weyl = 0; | |||
asir_assert(ARG0(arg),O_LIST,"nd_gr"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_gr"); | |||
asir_assert(ARG2(arg),O_N,"nd_gr"); | |||
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); | |||
f = remove_zero_from_list(f); | |||
if ( !BDY(f) ) { | |||
*rp = f; return; | |||
} | |||
m = QTOS((Q)ARG2(arg)); | |||
create_order_spec(ARG3(arg),&ord); | |||
nd_gr(f,v,m,0,&ord,rp); | |||
} | |||
void Pnd_gr_trace(arg,rp) | |||
NODE arg; | |||
LIST *rp; | |||
{ | |||
LIST f,v; | |||
int m,homo; | |||
struct order_spec ord; | |||
do_weyl = 0; | |||
asir_assert(ARG0(arg),O_LIST,"nd_gr_trace"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_gr_trace"); | |||
asir_assert(ARG2(arg),O_N,"nd_gr_trace"); | |||
asir_assert(ARG3(arg),O_N,"nd_gr_trace"); | |||
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); | |||
f = remove_zero_from_list(f); | |||
if ( !BDY(f) ) { | |||
*rp = f; return; | |||
} | |||
homo = QTOS((Q)ARG2(arg)); | |||
m = QTOS((Q)ARG3(arg)); | |||
create_order_spec(ARG4(arg),&ord); | |||
nd_gr_trace(f,v,m,homo,&ord,rp); | |||
} | |||
void Pnd_weyl_gr(arg,rp) | |||
NODE arg; | |||
LIST *rp; | |||
{ | |||
LIST f,v; | |||
int m,homo; | |||
struct order_spec ord; | |||
do_weyl = 1; | |||
asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr"); | |||
asir_assert(ARG2(arg),O_N,"nd_weyl_gr"); | |||
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); | |||
f = remove_zero_from_list(f); | |||
if ( !BDY(f) ) { | |||
*rp = f; return; | |||
} | |||
m = QTOS((Q)ARG2(arg)); | |||
create_order_spec(ARG3(arg),&ord); | |||
nd_gr(f,v,m,0,&ord,rp); | |||
} | |||
void Pnd_weyl_gr_trace(arg,rp) | |||
NODE arg; | |||
LIST *rp; | |||
{ | |||
LIST f,v; | |||
int m,homo; | |||
struct order_spec ord; | |||
do_weyl = 1; | |||
asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr_trace"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr_trace"); | |||
asir_assert(ARG2(arg),O_N,"nd_weyl_gr_trace"); | |||
asir_assert(ARG3(arg),O_N,"nd_weyl_gr_trace"); | |||
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); | |||
f = remove_zero_from_list(f); | |||
if ( !BDY(f) ) { | |||
*rp = f; return; | |||
} | |||
homo = QTOS((Q)ARG2(arg)); | |||
m = QTOS((Q)ARG3(arg)); | |||
create_order_spec(ARG4(arg),&ord); | |||
nd_gr_trace(f,v,m,homo,&ord,rp); | |||
} | |||
void Pnd_nf(arg,rp) | |||
NODE arg; | |||
P *rp; | |||
{ | |||
P f; | |||
LIST g,v; | |||
struct order_spec ord; | |||
do_weyl = 0; | |||
asir_assert(ARG0(arg),O_P,"nd_nf"); | |||
asir_assert(ARG1(arg),O_LIST,"nd_nf"); | |||
asir_assert(ARG2(arg),O_LIST,"nd_nf"); | |||
asir_assert(ARG4(arg),O_N,"nd_nf"); | |||
f = (P)ARG0(arg); | |||
g = (LIST)ARG1(arg); g = remove_zero_from_list(g); | |||
if ( !BDY(g) ) { | |||
*rp = f; return; | |||
} | |||
v = (LIST)ARG2(arg); | |||
create_order_spec(ARG3(arg),&ord); | |||
nd_nf_p(f,g,v,QTOS((Q)ARG4(arg)),&ord,rp); | |||
} | } | ||
/* for Weyl algebra */ | /* for Weyl algebra */ |