General schemes
Arbitrary schemes over a commutative base ring $\mathbb k$ with unit are instances of the abstract type
Scheme
— TypeScheme{BaseRingType<:Ring}
A scheme over a ring $𝕜$ of type BaseRingType
.
Morphisms of schemes shall be derived from the abstract type
SchemeMor
— TypeSchemeMor{DomainType, CodomainType, MorphismType, BaseMorType}
A morphism of schemes $f : X → Y$ of type MorphismType
with $X$ of type DomainType
and $Y$ of type CodomainType
.
When $X$ and $Y$ are defined over schemes $BX$ and $BY$ other than $Spec(𝕜)$, BaseMorType
is the type of the underlying morphism $BX → BY$; otherwise, it can be set to Nothing
.
Change of base
base_change
— Methodbase_change(phi::Any, X::Scheme)
For a Scheme
$X$ over a base_ring
$𝕜$ and a map $φ : 𝕜 → R$ we compute $X' = X ×ₖ Spec(R)$ and return a pair (X', f)
where $f : X' → X$ is the canonical morphism.
We do not restrict phi
to be of type Map
so that one can also use coercion, anonymous functions, etc.
base_change
— Methodbase_change(phi::Any, f::SchemeMor;
domain_map::SchemeMor, codomain_map::SchemeMor
)
For a morphism $f : X → Y$ with both $X$ and $Y$ defined over a base_ring
$𝕜$ and a map $φ : 𝕜 → R$ return a triple (a, F, b)
where $a : X' → X$ is the morphism from base_change(phi, X)
, $b : Y' → Y$ the one for $Y$, and $F : X' → Y'$ the induced morphism on those fiber products.
We do not restrict phi
to be of type Map
so that one can also use coercion, anonymous functions, etc.
The morphisms $a$ and $b$ can be passed as the optional arguments domain_map
and codomain_map
, respectively.