File: [local] / OpenXM / src / k097 / lib / minimal / cohom.k (download)
Revision 1.1, Wed May 3 06:42:07 2000 UTC (24 years, 2 months ago) by takayama
Branch: MAIN
I've been quiet and developed a code to construct minimal free
resolution in D. This is a first working version for the minimal
free resolution. It is written in the language kan/k0 and can be
compiled into sm1 code. The language kan/k0 is similar to asir with
extension of "class".
Sample:
k0
load["minimal.k"];
a = Sminimal(v);
|
/* $OpenXM: OpenXM/src/k097/lib/minimal/cohom.k,v 1.1 2000/05/03 06:42:07 takayama Exp $ */
def Boundp(a) {
local b;
sm1("[(parse) [(/) ",a," ( load tag 0 eq
{ /FunctionValue 0 def }
{ /FunctionValue 1 def } ifelse )] cat ] extension");
}
def load_cohom() {
if (Boundp("cohom.sm1.loaded")) {
}else{
sm1(" [(parse) (k0-cohom.sm1) pushfile ] extension ");
}
}
load_cohom();
def sm1_deRham(a,b) {
local aa,bb;
aa = ToString(a);
if (IsArray(b)) {
bb = Map(b,"ToString");
}else{
bb = ToString(b);
}
sm1("[", aa,bb, " ] deRham /FunctionValue set ");
}
def Weyl(v,w,p) {
local a,L;
L=Length(Arglist);
if (L == 1) {
a=RingD(v);
} else if (L == 2) {
a=RingD(v,w);
}else if (L == 3) {
a=RingD(v,w,p);
}else{
Println("Error: argument mismatch");
return(null);
}
sm1(" define_ring_variables ");
return(a);
}
def sm1_pmat(a) {
sm1(a," pmat ");
}
Weyl("x,y");
/* See page 8, (2.2). */
cech=[
[ [x*Dx],
[y*Dy]
],
[[ y*Dy, -x*Dx]]
];
def sm1_v_string(V) {
if (IsArray(V)) {
V = Map(V,"ToString");
}else {
V = ToString(V);
}
return(V);
}
def sm1_syz(A,V,W) {
local L,P;
L=Length(Arglist);
if (L == 1) {
P = [A];
}else if (L==2) {
V = sm1_v_string(V);
P = [A,V];
}else if (L==3) {
P = [A,V,W];
}else {
Println("sm1_syz: Argument mismatch");
return(null);
}
sm1(P," syz /FunctionValue set");
}
/*
sm1_syz([x*Dx,y*Dy],[x,y]):
We want to syz_h, too.
Step 1: Control by global variable ? syz ==> syz_generic
Step 2: syz and syz_h
*/
def sm1_resol1(I,V,W) {
local P,L;
L=Length(Arglist);
if (L == 1) {
P = [I];
}else if (L==2) {
V = sm1_v_string(V);
P = [I,V];
}else if (L==3) {
P = [I,V,W];
}else {
Println("sm1_syz: Argument mismatch");
return(null);
}
sm1(P," resol1 /FunctionValue set ");
}
/* sm1_resol1([x^2,x*y],[x,y]): */
def sm1_res_solv(A,B,C) {
local P,L;
L=Length(Arglist);
if (L == 2) {
P = [A,B];
sm1(P," res-solv /FunctionValue set");
}else if (L==3) {
C = sm1_v_string(C);
P = [[A,B], C];
sm1(P," res*solv /FunctionValue set ");
}else{
Println("Error: argument mismatch");
return(null);
}
}
/*
sm1_res_solv(
[[x*Dx + 2, 0],
[Dx+3, x^3],
[3, x],
[Dx*(x*Dx + 3) - (x*Dx + 2)*(x*Dx -4), 0]],
[1, 0], [x,y]):
sm1_res_solv([x,1],1,"x"):
sm1_res_solv([x,y],y,"x,y"):
*/
def sm1_res_solv_h(A,B,C) {
local P;
P = [[A,B], C];
sm1(P," res*solv*h /FunctionValue set ");
}
def Reparse(A) {
if (IsArray(A)) {
return(Map(A,"Reparse"));
}else if (IsPolynomial(A) || IsInteger(A)) {
return(Poly(ToString(A)));
}else{
return(A);
}
}
def sm1_res_sub2Q(I,V) {
local L,P;
L = Length(Arglist);
if (L == 1) {
P = I;
}else if ( L == 2) {
V = sm1_v_string(V);
if (IsArray(V)) {
sm1(V," from_records /V set ");
}
Weyl(V);
P = Reparse(I);
}
sm1(P," res-sub2Q /FunctionValue set ");
}
/*
sm1_res_sub2Q([x*Dx,Dy]):
M res-sub2Q =: J, M \simeq D^p/J
*/
def ex2_9() {
Weyl("x,y,z");
I = [ x*Dx+y*Dy+z*Dz+6,
z^2*Dy-y^2*Dz,
z^2*Dx-x^2*Dz,
y^2*Dx-x^2*Dy,
x^3*Dz+y^3*Dz+z^3*Dz+6*z^2,
x^3*Dy+y^3*Dy+y^2*z*Dz+6*y^2];
a = sm1_resol1(I,"x,y,z");
return(a);
}