|
| 1 | +export AlgebraicSet, BasicSemialgebraicSet, addequality!, addinequality! |
| 2 | +# Semialgebraic set described by polynomials with coefficients in T |
| 3 | +abstract AbstractSemialgebraicSet{T} |
| 4 | + |
| 5 | +addequality!{T}(S::AbstractSemialgebraicSet{T}, p) = addequality!(S, VecPolynomial{T}(p)) |
| 6 | +addinequality!{T}(S::AbstractSemialgebraicSet{T}, p) = addinequality!(S, VecPolynomial{T}(p)) |
| 7 | + |
| 8 | +abstract AbstractBasicSemialgebraicSet{T} <: AbstractSemialgebraicSet{T} |
| 9 | +abstract AbstractAlgebraicSet{T} <: AbstractBasicSemialgebraicSet{T} |
| 10 | + |
| 11 | +addinequality!{T}(S::AbstractAlgebraicSet{T}, p) = throw(ArgumentError("Cannot add inequality to an algebraic set")) |
| 12 | + |
| 13 | +type AlgebraicSet{T} <: AbstractAlgebraicSet{T} |
| 14 | + p::Vector{VecPolynomial{T}} |
| 15 | +end |
| 16 | +function (::Type{AlgebraicSet{T}}){T}() |
| 17 | + AlgebraicSet{T}(VecPolynomial{T}[]) |
| 18 | +end |
| 19 | + |
| 20 | + |
| 21 | +function Base.convert{T,U}(::Type{AlgebraicSet{T}}, V::AlgebraicSet{U}) |
| 22 | + AlgebraicSet{T}(Vector{VecPolynomial{T}}(V.p)) |
| 23 | +end |
| 24 | + |
| 25 | +addequality!{T}(V::AlgebraicSet{T}, p::VecPolynomial{T}) = push!(V.p, p) |
| 26 | + |
| 27 | +type BasicSemialgebraicSet{T} <: AbstractBasicSemialgebraicSet{T} |
| 28 | + V::AlgebraicSet{T} |
| 29 | + p::Vector{VecPolynomial{T}} |
| 30 | +end |
| 31 | +function (::Type{BasicSemialgebraicSet{T}}){T}() |
| 32 | + BasicSemialgebraicSet{T}(AlgebraicSet{T}(), VecPolynomial{T}[]) |
| 33 | +end |
| 34 | + |
| 35 | + |
| 36 | +function Base.convert{T,U}(::Type{BasicSemialgebraicSet{T}}, S::BasicSemialgebraicSet{U}) |
| 37 | + BasicSemialgebraicSet{T}(convert(AlgebraicSet{T}, S.V), Vector{VecPolynomial{T}}(S.p)) |
| 38 | +end |
| 39 | + |
| 40 | +addequality!{T}(S::BasicSemialgebraicSet{T}, p::VecPolynomial{T}) = addequality!(S.V, p) |
| 41 | +addinequality!{T}(S::BasicSemialgebraicSet{T}, p::VecPolynomial{T}) = push!(S.p, p) |
0 commit comments