-
Notifications
You must be signed in to change notification settings - Fork 113
/
AbstractTypes.jl
162 lines (116 loc) · 5.85 KB
/
AbstractTypes.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
@doc raw"""
AbsAffineAlgebraicSet <: AbsAffineScheme
An affine, geometrically reduced subscheme of an affine space over a field.
"""
abstract type AbsAffineAlgebraicSet{BaseField<:Field, RingType} <:AbsAffineScheme{BaseField, RingType} end
@doc raw"""
AbsProjectiveAlgebraicSet <: AbsProjectiveScheme
A projective, geometrically reduced scheme of finite type over a field.
"""
abstract type AbsProjectiveAlgebraicSet{BaseField<:Field, RingType} <:AbsProjectiveScheme{BaseField, RingType} end
################################################################################
#
# Abstract types for varieties
#
################################################################################
@doc raw"""
AbsAffineVariety <: AbsAffineAlgebraicSet
An affine, geometrically integral subscheme of an affine space over a field.
"""
abstract type AbsAffineVariety{BaseField<:Field, RingType} <:AbsAffineAlgebraicSet{BaseField, RingType} end
@doc raw"""
AbsProjectiveVariety <: AbsProjectiveAlgebraicSet
A geometrically integral subscheme of a projective space over a field.
"""
abstract type AbsProjectiveVariety{BaseField<:Field, GradedRingType<:Ring} <: AbsProjectiveAlgebraicSet{BaseField, GradedRingType} end
@doc raw"""
AbsCoveredVariety <: Scheme
A separated, geometrically integral scheme of finite type over a field.
"""
abstract type AbsCoveredVariety{BaseField<:Field} <: AbsCoveredScheme{BaseField} end
################################################################################
#
# Abstract types for curves
#
################################################################################
@doc raw"""
AbsAffineCurve <: AbsAffineAlgebraicSet
A curve in affine space.
An affine curve is an affine algebraic set of dimension one.
"""
abstract type AbsAffineCurve{BaseField<:Field, RingType<:Ring} <: AbsAffineAlgebraicSet{BaseField, RingType} end
@doc raw"""
AbsProjectiveCurve <: AbsProjectiveVariety
A projective curve embedded in an ambient projective space.
"""
abstract type AbsProjectiveCurve{BaseField<:Field, RingType<:Ring} <: AbsProjectiveAlgebraicSet{BaseField, RingType} end
@doc raw"""
AbsCoveredCurve
A curve represented in terms of a covering.
A curve is a reduced scheme of dimension 1 of finite type over a field.
"""
abstract type AbsCoveredCurve{BaseField} <: Scheme{BaseField} end
################################################################################
#
# Abstract types for surfaces
#
################################################################################
@doc raw"""
AbsAffineSurface <: AbsAffineVariety
A surface in affine space.
An affine surface is an affine variety of dimension two.
"""
abstract type AbsAffineSurface{BaseField<:Field, RingType<:Ring} <: AbsAffineVariety{BaseField, RingType} end
@doc raw"""
AbsProjectiveSurface <: AbsProjectiveVariety
A projective surface embedded in an ambient projective space.
"""
abstract type AbsProjectiveSurface{BaseField<:Field, RingType<:Ring} <: AbsProjectiveVariety{BaseField, RingType} end
@doc raw"""
AbsCoveredSurface
A geometrically integral scheme of dimension 2 of finite type over a field
represented in terms of a covering.
"""
abstract type AbsCoveredSurface{BaseField<:Field} <: AbsCoveredVariety{BaseField} end
################################################################################
#
# Abstract types for rational points
#
################################################################################
@doc raw"""
AbsRationalPointSet{P<:AbsAffineScheme,T<:Scheme}
Abstract type for the set of rational points of a scheme.
Let ``k`` be a ring, ``L`` a ``k`-algebra and ``X`` a scheme over ``k``. The set ``X(L)`` of ``L``-rational points of ``X`` is defined as the set of homomorphisms over ``Spec k`` from ``Spec L`` to ``X``, i.e. as ``X(L) = Hom_{Spec k}(Spec L, X)``.
We refer to ``L`` as the `coefficient_ring`, to
``Spec L`` as the `domain` and to ``X`` as the `codomain` of this
homset. For traditional reasons we keep the name
`ambient_scheme` for the codomain.
"""
abstract type AbsRationalPointSet{P<:AbsAffineScheme,T<:Scheme} end
abstract type AbsRationalPoint{RingElemType, ParentType} end
domain(p::AbsRationalPoint) = domain(parent(p))
codomain(p::AbsRationalPoint) = codomain(parent(p))
ambient_scheme(p::AbsRationalPoint) = codomain(p)
ambient_space(p::AbsRationalPoint) = ambient_space(ambient_scheme(p))
coefficient_ring(P::AbsRationalPoint) = coefficient_ring(parent(P))
@doc raw"""
AbsAffineRationalPoint{CoefficientType, ParentType}
A rational point ``P`` of an affine scheme ``X``.
We refer to ``X`` as the parent of ``P``.
Let ``X \subseteq \mathbb{A}^n_k`` be an algebraic set or more generally a subscheme
defined by the ideal ``I = (f_1, \dots f_r) \subseteq k[x_1,\dots x_n]``.
A rational point ``p`` of ``X`` is a tuple ``p = (p_1, \dots , p_n) \in k^n`` such that
``f_1(p) = \dots = f_n(p) = 0``.
"""
abstract type AbsAffineRationalPoint{RingElemType, ParentType} <: AbsRationalPoint{RingElemType, ParentType} end
@doc raw"""
AbsProjectiveRationalPoint
A rational point ``P`` of a projective scheme ``X``.
We refer to ``X`` as the parent of ``P``.
Let ``k`` be a field. A rational point is an element of ``\mathbb{P}^n(k) = k^{n+1} \setminus \{0\} / k^*`` where
two vectors ``v,w`` in ``k^{n+1} \setminus \{0\}`` are identified if ``v = \alpha w`` for a non-zero scalar ``\alpha \in k^*``.
Let ``X \subseteq \mathbb{P}^n_k`` be an algebraic set or more generally a closed subscheme defined by the homogeneous ideal ``I = (f_1, \dots f_r)``. Then a rational point of ``X`` is ``p \in \mathbb{P}^n(k)`` such that ``f_1(p) = \dots = f_n(p) = 0``.
This type includes points in weighted projective space.
"""
abstract type AbsProjectiveRationalPoint{RingElemType, ParentType} <: AbsRationalPoint{RingElemType, ParentType} end
abstract type AbsCoveredRationalPoint{RingElemType, ParentType} <: AbsRationalPoint{RingElemType, ParentType} end