@@ -56,6 +56,21 @@ abstract type AbstractCertificate end
56
56
abstract type AbstractPreorderCertificate <: AbstractCertificate end
57
57
abstract type AbstractIdealCertificate <: AbstractCertificate end
58
58
59
+ """
60
+ struct Putinar{IC <: AbstractIdealCertificate, CT <: SumOfSquares.SOSLikeCone, BT <: MB.AbstractPolynomialBasis} <: AbstractPreorderCertificate
61
+ ideal_certificate::IC
62
+ cone::CT
63
+ basis::Type{BT}
64
+ maxdegree::Int
65
+ end
66
+
67
+ The `Putinar` certificate ensures the nonnegativity of `p(x)` for all `x` such that
68
+ `g_i(x) >= 0` and `h_i(x) = 0` by exhibiting Sum-of-Squares polynomials `σ_i(x)`
69
+ such that `p(x) - ∑ σ_i(x) g_i(x)` is guaranteed to be nonnegativity for all `x`
70
+ such that `h_i(x) = 0`.
71
+ The polynomials `σ_i(x)` are search over `cone` with a basis of type `basis` such that
72
+ the degree of `σ_i(x) g_i(x)` does not exceed `maxdegree`.
73
+ """
59
74
struct Putinar{IC <: AbstractIdealCertificate , CT <: SumOfSquares.SOSLikeCone , BT <: MB.AbstractPolynomialBasis } <: AbstractPreorderCertificate
60
75
ideal_certificate:: IC
61
76
cone:: CT
@@ -119,6 +134,20 @@ SumOfSquares.matrix_cone_type(::Type{<:SimpleIdealCertificate{CT}}) where {CT} =
119
134
zero_basis (certificate:: SimpleIdealCertificate ) = MB. MonomialBasis
120
135
zero_basis_type (:: Type{<:SimpleIdealCertificate{CT, BT}} ) where {CT, BT} = MB. MonomialBasis
121
136
137
+ """
138
+ struct MaxDegree{CT <: SumOfSquares.SOSLikeCone, BT <: MB.AbstractPolynomialBasis} <: SimpleIdealCertificate{CT, BT}
139
+ cone::CT
140
+ basis::Type{BT}
141
+ maxdegree::Int
142
+ end
143
+
144
+ The `MaxDegree` certificate ensures the nonnegativity of `p(x)` for all `x` such that
145
+ `h_i(x) = 0` by exhibiting a Sum-of-Squares polynomials `σ(x)`
146
+ such that `p(x) - σ(x)` is guaranteed to be zero for all `x`
147
+ such that `h_i(x) = 0`.
148
+ The polynomial `σ(x)` is search over `cone` with a basis of type `basis` such that
149
+ the degree of `σ(x)` does not exceed `maxdegree`.
150
+ """
122
151
struct MaxDegree{CT <: SumOfSquares.SOSLikeCone , BT <: MB.AbstractPolynomialBasis } <: SimpleIdealCertificate{CT, BT}
123
152
cone:: CT
124
153
basis:: Type{BT}
@@ -131,6 +160,18 @@ function get(::Type{MaxDegree{CT, BT}}, ::GramBasisType) where {CT, BT}
131
160
return BT
132
161
end
133
162
163
+ """
164
+ struct FixedBasis{CT <: SumOfSquares.SOSLikeCone, BT <: MB.AbstractPolynomialBasis} <: SimpleIdealCertificate{CT, BT}
165
+ cone::CT
166
+ basis::BT
167
+ end
168
+
169
+ The `FixedBasis` certificate ensures the nonnegativity of `p(x)` for all `x` such that
170
+ `h_i(x) = 0` by exhibiting a Sum-of-Squares polynomials `σ(x)`
171
+ such that `p(x) - σ(x)` is guaranteed to be zero for all `x`
172
+ such that `h_i(x) = 0`.
173
+ The polynomial `σ(x)` is search over `cone` with basis `basis`.
174
+ """
134
175
struct FixedBasis{CT <: SumOfSquares.SOSLikeCone , BT <: MB.AbstractPolynomialBasis } <: SimpleIdealCertificate{CT, BT}
135
176
cone:: CT
136
177
basis:: BT
@@ -142,6 +183,22 @@ function get(::Type{FixedBasis{CT, BT}}, ::GramBasisType) where {CT, BT}
142
183
return BT
143
184
end
144
185
186
+ """
187
+ struct Newton{CT <: SumOfSquares.SOSLikeCone, BT <: MB.AbstractPolynomialBasis, NPT <: Tuple} <: SimpleIdealCertificate{CT, BT}
188
+ cone::CT
189
+ basis::Type{BT}
190
+ variable_groups::NPT
191
+ end
192
+
193
+ The `Newton` certificate ensures the nonnegativity of `p(x)` for all `x` such that
194
+ `h_i(x) = 0` by exhibiting a Sum-of-Squares polynomials `σ(x)`
195
+ such that `p(x) - σ(x)` is guaranteed to be zero for all `x`
196
+ such that `h_i(x) = 0`.
197
+ The polynomial `σ(x)` is search over `cone` with a basis of type `basis`
198
+ chosen using the multipartite Newton polytope with parts `variable_groups`.
199
+ If `variable_groups = tuple()` then it falls back to the classical Newton polytope
200
+ with all variables in the same part.
201
+ """
145
202
struct Newton{CT <: SumOfSquares.SOSLikeCone , BT <: MB.AbstractPolynomialBasis , NPT <: Tuple } <: SimpleIdealCertificate{CT, BT}
146
203
cone:: CT
147
204
basis:: Type{BT}
@@ -154,6 +211,22 @@ function get(::Type{<:Newton{CT, BT}}, ::GramBasisType) where {CT, BT}
154
211
return BT
155
212
end
156
213
214
+ """
215
+ struct Remainder{GCT<:AbstractIdealCertificate} <: AbstractIdealCertificate
216
+ gram_certificate::GCT
217
+ end
218
+
219
+ The `Remainder` certificate ensures the nonnegativity of `p(x)` for all `x` such that
220
+ `h_i(x) = 0` by guaranteeing the remainder of `p(x)` modulo the ideal generated by
221
+ `⟨h_i⟩` to be nonnegative for all `x` such that `h_i(x) = 0` using the certificate
222
+ `gram_certificate`.
223
+ For instance, if `gram_certificate` is [`SumOfSquares.Certificate.Newton`](@ref),
224
+ then the certificate `Remainder(gram_certificate)` will take the remainder before
225
+ computing the Newton polytope hence might generate a much smaller Newton polytope
226
+ hence a smaller basis and smaller semidefinite program.
227
+ However, this then corresponds to a lower degree of the hierarchy which might
228
+ be insufficient to find a certificate.
229
+ """
157
230
struct Remainder{GCT<: AbstractIdealCertificate } <: AbstractIdealCertificate
158
231
gram_certificate:: GCT
159
232
end
0 commit comments