better names, refined concepts for AK

This commit is contained in:
Eric Berberich 2006-10-17 15:27:56 +00:00
parent 3879478407
commit 0e5d766ca3
3 changed files with 129 additions and 25 deletions

View File

@ -1,19 +1,26 @@
\begin{ccRefConcept}{AlgebraicCurveKernel_2}
\begin{ccRefConcept}{AlgebraicKernelBase_2}
\ccDefinition
The \ccc{AlgebraicCurveKernel_2} concept is meant to provide the curved
kernel with all the algebraic functionalities on bivariate polynomials
required for the manipulation of arcs of algebraic curves of general degree
$\R^2$ using an $y$-per-$x$-view on the curves.
The \ccc{AlgebraicKernelBase_2} concept is meant to provide the curved
kernel with very fundamental algebraic functionalities on uni- and bivariate
polynomials.
\ccTypes
A model of \ccc{AlgebraicCurveKernel_2} is supposed to provide
A model of \ccc{AlgebraicKernelBase_2} is supposed to provide
\ccNestedType{Coefficient}{A model of \ccc{IntegralDomain}. }
\ccNestedType{Polynomial_1}{A model of \ccc{Polynomial_1}, for
univariate polynomials when the \ccc{Coefficient} type is an
\ccc{IntegralDomain}. It must also be possible to perform \ccc{Canonicalize,
GcdUpToConstantFactor,
IntegralDivUpToConstantFactor,
MakeSquareFreeUpToConstantFactor, and
SquareFreeFactorizationUpToConstantFactor.
Also needed some PolynomialConstruction concept.}
}
\ccNestedType{Polynomial_2}{A model of \ccc{Polynomial_2}, for
bivariate polynomials on an \ccc{IntegralDomain} coefficient type.
it must also be possible to perform \ccc{Canonicalize,
@ -21,24 +28,17 @@ A model of \ccc{AlgebraicCurveKernel_2} is supposed to provide
IntegralDivUpToConstantFactor,
MakeSquareFreeUpToConstantFactor, and
SquareFreeFactorizationUpToConstantFactor} on this type - maybe using a
traits class. Also needed some PolynomialConstruction concept
traits class. Also needed some PolynomialConstruction concept.
}
% TODO: Boundary: RealEmbeddable that is 'dense R'
\ccNestedType{Solution_1}{A model of
\ccc{AlgebraicKernelBase_2::Solution_1}, for real roots of univariate
polynomials of type \ccc{Polynomial_1}.}
\ccNestedType{Solution_2}{A model of
\ccc{AlgebraicCurveKernel_2::Solution_2}, for solutions of systems
\ccc{AlgebraicKernelBase_2::Solution_2}, for solutions of systems
of two bivariate polynomials of type \ccc{Polynomial_2}.}
\ccNestedType{CurvePairAnalysis_2}{A model of
\ccc{AlgebraicCurveKernel_2::CurvePairAnalysis_2},
for analysing a pair of curves
defined as two analyses of type \ccc{CurveAnalysis_2}.}
\ccNestedType{CurveAnalysis_2}{A model of
\ccc{CurvePairAnalyis_2::CurveAnalysis_2}, for analysing single
curves defined as bivariate polynomials of type \ccc{Polynomial_2}.}
\ccNestedType{Compare_x_2}{A model of the concept
\ccc{AlgebraicKernel_d_2::CompareX_2}.}
\ccGlue
@ -49,4 +49,78 @@ curves defined as bivariate polynomials of type \ccc{Polynomial_2}.}
\ccc{AlgebraicKernel_d_2::CompareXY_2}.}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelBasic_2}
\footnote{Adapted the concepts \ccc{AlgebraicKernel_d_1} and
\ccc{AlgebraicKernel_d_2} and re-assigned types/functors
to Base and Basic part.}
\ccDefinition
The \ccc{AlgebraicKernelBasic_2} concept is meant to provide the curved
kernel with all the algebraic functionalities on uni- and bivariate polynomials
required for the manipulation of arcs of algebraic curves of general degree
$d$ in $\R^2$.
\ccNestedType{Solve_1}{A model of the concept
\ccc{AlgebraicKernelBasic_1::Solve_1}.}
\ccNestedType{Sign_at_1}{A model of the concept
\ccc{AlgebraicKernelBasic_1::SignAt_1}.}
\ccNestedType{Derivative_1}{A model of the concept
\ccc{AlgebraicKernelBasic_1::Derivative}.}
\ccNestedType{Compare_1}{A model of the concept
\ccc{AlgebraicKernelBasic_1::Compare_1}.}
\textbf{Question: what is the righ interface with AK
for \ccc{compare_y_at_x_right}?}
\ccNestedType{Solve_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::Solve_2}.}
\ccNestedType{Sign_at_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::SignAt_2}.}
\ccNestedType{Derivative_x_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::DerivativeX_2}.}
\ccNestedType{Derivative_y_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::DerivativeY_2}.}
\ccNestedType{X_critical_points_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::XCriticalPoints_2}.}
\ccGlue
\ccNestedType{Y_critical_points_2}{A model of the concept
\ccc{AlgebraicKernelBasic_2::YCriticalPoints_2}.}
\end{ccRefConcept}
\begin{ccRefConcept}{AlgebraicKernelCCPA_2}
\ccDefinition
The \ccc{AlgebraicKernelCCPA_2} concept refines the \ccc{AlgebraicKernelBase_2}
concept with functionality on bivariate polynomials
required for the manipulation of arcs of algebraic curves of general degree
$\R^2$ using an $y$-per-$x$-view on the curves.
\ccRefines
\ccc{AlgebraicKernelBase_2}
\ccTypes
\ccNestedType{CurvePairAnalysis_2}{A model of
\ccc{AlgebraicKernelCCPA_2::CurvePairAnalysis_2},
for analysing a pair of curves
defined as two analyses of type \ccc{CurveAnalysis_2}.}
\ccNestedType{CurveAnalysis_2}{A model of
\ccc{CurvePairAnalyis_2::CurveAnalysis_2}, for analysing single
curves defined as bivariate polynomials of type \ccc{Polynomial_2}.}
{\small TODO: Boundary: RealEmbeddable that is 'dense R'??}
\end{ccRefConcept}

View File

@ -6,11 +6,22 @@ The concept \ccc{Solution_1} is meant to store a coordinate ($x$, or $y$) of
a point on curve.
\ccRefines
\ccc{RealEmbeddable}
\ccc{DefaultConstructible, Assignable, LessThanComparable, CompactifiedNumber}
Remark: Michael Hemmer proposed to extend the concept \ccc{RealEmbeddable}
with the notion of compactification (adding/dealing with $\pm\infty$). A
valid model has to implement handling of infinity.
The concept \ccc{CompactifiedNumber} has not been introduced so far. Michael
Hemmer will introduce it as basic tool as soon as possible. For
now we assume that a number of this type is either finite, and if not,
we can ask, wether it represents $\pm\infty$.
There are reasons why we introduce \ccc{Solution_1} over
\ccc{AlgebraicReal_1}\footnote{Not yet introduced so far}:
\begin{itemize}
\item It may suffices to use a simpler number type ($Q[\sqrt{2}]$).
\item Keep concept minimal, \ccc{AlgebraicReal_1} will quite certainly
contain more than needed here.
\item \ccc{AlgebraicReal_1} won't be a refinement of \ccc{CompaticiedNumber}.
\ccc{double} is.
\end{itemize}
\begin{ccAdvanced}
@ -38,7 +49,7 @@ following methods:
\ccPrecond{sol1 != s}
}
\ccMethod{std::pair<Boundary,Boundary> s1.approximate(int prec);}{
\ccMethod{std::pair<Boundary,Boundary> approximate(int prec);}{
Refines the representation to the given precision (binary digits
after point). Internally the precision can already be higher.
}
@ -48,4 +59,11 @@ Maybe, we can have it orthogonal to the normal concept.
\end{ccAdvanced}
Remark: Note that this concept only deals with the interface to upper
layers. There might be additional requirements for number types to
implement a model of this concept.
\ccHasModels
\ccc{double, NiX::Compactified< NiX::Algebraic_real >}
\end{ccRefConcept}

View File

@ -5,6 +5,18 @@
The concept \ccc{Solution_2} is meant to store both coordinates of a point
on a curve.
There are reasons why we introduce \ccc{Solution_2} over
\ccc{AlgebraicReal_2}:
\begin{itemize}
\item \ccc{AlgebraicReal_2} seems to be pair of \ccc{AlgebraicReal_1}, while
\ccc{Solution_2} has members to access \ccc{Solution_1} for $x$ and $y$.
With the name we state better to be more generic.
\item Keep concept minimal, in contrast to \ccc{AlgebraicReal_2} that
seems to be quite powerful.
\item \ccc{Solution_2} is ``compactified'' (with the help of
\ccc{Solution_1}) in contrast to \ccc{AlgebraicReal_2}.
\end{itemize}
\ccCreationVariable{sol2}
\ccAccessFunctions