Given the pullback map
f from
A to
B, builds the freest possible extension
E of
A by
B (see
extensionAlgebra), and then adds appropriate metadata to make the maps from
E to
B and vice-versa into an
AbstractVarietyMap. Enough information must be given to compute the dimensions of
X and
Y, either by using the SubDimension, SuperDimension, and Codimension optons, or by having varieties already attached to
A and/or
B. Likewise, enough information must be given to compute the tangent classes of
X and
Y.
This construction is useful for computations where the pullback map is known but the pushforward is either not known or cannot be defined.
i1 : p = point
o1 = point
o1 : an abstract variety of dimension 0
|
i2 : S = intersectionRing p
o2 = S
o2 : PolynomialRing
|
i3 : Y = projectiveBundle(5,p)
o3 = Y
o3 : a flag bundle with ranks {1, 5}
|
i4 : A = intersectionRing Y
o4 = A
o4 : QuotientRing
|
i5 : B = S[h, Join => false]/h^3 -- A^*(P2), but using 2 times a line as the generating class:
o5 = B
o5 : QuotientRing
|
i6 : integral B := (b) -> (4 * coefficient((B_0)^2, b))
o6 = {*Function[stdio:6:19-6:48]*}
o6 : FunctionClosure
|
i7 : c = 1 + (9/2)*h + (15/2)*h^2 -- normal class
15 2 9
o7 = --h + -h + 1
2 2
o7 : B
|
i8 : f = map(B,A,{-h, h, h^2, h^3, h^4, h^5})
2
o8 = map(B,A,{-h, h, h , 0, 0, 0})
o8 : RingMap B <--- A
|
i9 : i = inclusion(f,
NormalClass => c,
Codimension => 3,
Base => p) -- Base not necessary, will be correctly computed
o9 = i
o9 : a map to a variety from a variety
|
i10 : Z = target i
o10 = Z
o10 : an abstract variety of dimension 5
|
i11 : X = source i
o11 = X
o11 : an abstract variety of dimension 2
|
i12 : Xstruct = X / point
o12 = Xstruct
o12 : a map to point from X
|
i13 : rank Xstruct_* tangentBundle X
o13 = 8
|
i14 : integral chern tangentBundle Z
o14 = 6
o14 : S
|