1 // Copyright (c) 2012-2016 Giovanni Lagorio. John Abbott, Anna M. Bigatti 2 // 3 // This file is part of the source of CoCoALib, the CoCoA Library. 4 // 5 // CoCoALib is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // CoCoALib is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with CoCoALib. If not, see <http://www.gnu.org/licenses/>. 17 18 #include "BuiltInOneLiners.H" 19 #include "CoCoALibSupplement.H" 20 21 using namespace std; 22 using namespace boost; 23 using namespace boost::iostreams; 24 using namespace CoCoA::AST; 25 using namespace CoCoA::LexerNS; 26 using namespace CoCoA::ParserNS; 27 28 namespace CoCoA { 29 namespace InterpreterNS { 30 31 // extern std::vector<NameFunPair> builtIns; // declared in BuiltInFunctions.C 32 33 ////// functions on BIGINT 34 DECLARE_COCOALIB_FUNCTION1(factorial, INT) 35 DECLARE_COCOALIB_FUNCTION1(primorial, INT) 36 DECLARE_COCOALIB_FUNCTION1(fibonacci, INT) 37 DECLARE_COCOALIB_FUNCTION1(FloorSqrt, INT) // AMB 38 DECLARE_COCOALIB_FUNCTION1(NextProbPrime, INT) // AMB 39 DECLARE_COCOALIB_FUNCTION1(PrevProbPrime, INT) // JAA 40 DECLARE_COCOALIB_FUNCTION1(SmallestNonDivisor, INT) // JAA 41 DECLARE_COCOALIB_FUNCTION2(FactorMultiplicity, INT, INT) // JAA 42 DECLARE_COCOALIB_FUNCTION2(RoundDiv, INT, INT) // JAA 43 DECLARE_COCOALIB_FUNCTION2(FloorRoot, INT, INT) // AMB 44 DECLARE_COCOALIB_FUNCTION3(PowerMod, INT, INT, INT) 45 DECLARE_COCOALIB_FUNCTION2(KroneckerSymbol, INT, INT) 46 DECLARE_COCOALIB_FUNCTION1(IsEven, INT) // AMB 47 DECLARE_COCOALIB_FUNCTION1(IsOdd, INT) // AMB 48 DECLARE_COCOALIB_FUNCTION1(IsSquare, INT) // JAA 49 DECLARE_COCOALIB_FUNCTION1(IsPrime, INT) // AMB 50 DECLARE_COCOALIB_FUNCTION1(IsProbPrime, INT) // AMB 51 DECLARE_COCOALIB_FUNCTION1(EulerTotient, INT) // JAA 52 DECLARE_COCOALIB_FUNCTION1(PrimitiveRoot, INT) // JAA 53 DECLARE_COCOALIBFORC5_FUNCTION1(NextPrime, INT) 54 DECLARE_COCOALIBFORC5_FUNCTION1(PrevPrime, INT) 55 // see BuiltinFunctions-CoCoALib DECLARE_COCOALIBFORC5_FUNCTION1(reseed, INT) 56 DECLARE_COCOALIBFORC5_FUNCTION2(random, INT, INT) 57 DECLARE_COCOALIBFORC5_FUNCTION1(ContFrac, RAT) 58 DECLARE_COCOALIBFORC5_FUNCTION1(CFApproximants, RAT) 59 DECLARE_COCOALIBFORC5_FUNCTION2(BinomialRepr, INT, INT) 60 DECLARE_COCOALIBFORC5_FUNCTION4(BinomialReprShift, INT, INT, INT, INT) 61 DECLARE_COCOALIBFORC5_FUNCTION1(NumPartitions, INT) 62 63 ////// functions on BIGRAT 64 DECLARE_COCOALIB_FUNCTION2(CFApprox, RAT, RAT) // AMB 65 66 ////// functions on RINGELEM 67 DECLARE_COCOALIB_FUNCTION1(CanonicalRepr, RINGELEM) // AMB 68 DECLARE_COCOALIB_FUNCTION1(ClearDenom, RINGELEM) // AMB 69 //DECLARE_COCOALIB_FUNCTION1(CommonDenom, RINGELEM) // --> BuiltinFunctions 70 DECLARE_COCOALIB_FUNCTION1(ContentFreeFactor, RINGELEM) 71 //DECLARE_COCOALIB_FUNCTION1(IndetsProd, RINGELEM) // --> BuiltinFunctions 72 DECLARE_COCOALIB_FUNCTION1(IsConstant, RINGELEM) // AMB 73 DECLARE_COCOALIB_FUNCTION1(IsIndet, RINGELEM) // AMB 74 DECLARE_COCOALIB_FUNCTION1(IsIndetPosPower, RINGELEM) // AMB 75 DECLARE_COCOALIB_FUNCTION1(IsEvenPoly, RINGELEM) // JAA 76 DECLARE_COCOALIB_FUNCTION1(IsOddPoly, RINGELEM) // JAA 77 DECLARE_COCOALIB_FUNCTION1(IsInvertible, RINGELEM) 78 DECLARE_COCOALIB_FUNCTION1(IsIrred, RINGELEM) 79 DECLARE_COCOALIB_FUNCTION1(IsMonomial, RINGELEM) // AMB 80 DECLARE_COCOALIB_FUNCTION1(IsPthPower, RINGELEM) // JAA 81 DECLARE_COCOALIB_FUNCTION1(IsZeroDivisor, RINGELEM) // AMB 82 // DECLARE_COCOALIB_FUNCTION1(LF, RINGELEM) // AMB -- also for ideals 83 DECLARE_COCOALIB_FUNCTION1(PthRoot, RINGELEM) // JAA 84 DECLARE_COCOALIB_FUNCTION1(content, RINGELEM) // AMB 85 DECLARE_COCOALIB_FUNCTION1(FixedDivisor, RINGELEM) // AMB 86 DECLARE_COCOALIB_FUNCTION1(factor, RINGELEM) 87 //DECLARE_COCOALIB_FUNCTION1(factor_AlgExtn, RINGELEM) 88 DECLARE_COCOALIB_FUNCTION1(graeffe, RINGELEM) 89 DECLARE_COCOALIB_FUNCTION1(graeffe3, RINGELEM) 90 DECLARE_COCOALIB_FUNCTION1(CoeffHeight, RINGELEM) 91 DECLARE_COCOALIB_FUNCTION1(RootBound_Birkhoff, RINGELEM) 92 DECLARE_COCOALIB_FUNCTION1(RootBound_Cauchy, RINGELEM) 93 DECLARE_COCOALIB_FUNCTION1(RootBound_Lagrange, RINGELEM) 94 DECLARE_COCOALIB_FUNCTION1(RootBound_LMS, RINGELEM) 95 DECLARE_COCOALIB_FUNCTION1(RootBound_simple, RINGELEM) 96 DECLARE_COCOALIB_FUNCTION1(NumTerms, RINGELEM) 97 DECLARE_COCOALIB_FUNCTION1(SqFreeFactor, RINGELEM) 98 DECLARE_COCOALIB_FUNCTION1(NumRealRoots, RINGELEM) 99 DECLARE_COCOALIB_FUNCTION1(SturmSeq, RINGELEM) 100 DECLARE_COCOALIB_FUNCTION1(monic, RINGELEM) // AMB //if LC(f)==1??? 101 //DECLARE_COCOALIB_FUNCTION2(IsDivisible, RINGELEM, RINGELEM) //202002 also for INT 102 DECLARE_COCOALIB_FUNCTION2(deriv, RINGELEM, RINGELEM) // AMB 103 // DECLARE_COCOALIB_FUNCTION2(power, RINGELEM, INT) // 20191209 impl. in cpkg5 104 DECLARE_COCOALIB_FUNCTION2(RatReconstructPoly, RINGELEM, INT) // AMB 105 DECLARE_COCOALIB_FUNCTION2(RingElems, RING, STRING) 106 // DECLARE_COCOALIB_FUNCTION2(ReadExpr, RING, STRING) --> RingElem(R, s) 107 // DECLARE_COCOALIB_FUNCTION3(MinPolyQuot, RINGELEM, IDEAL, RINGELEM) to BIFunc 108 DECLARE_COCOALIB_FUNCTION3(MinPolyQuotDef, RINGELEM, IDEAL, RINGELEM) 109 DECLARE_COCOALIB_FUNCTION3(MinPolyQuotDefLin, RINGELEM, IDEAL, RINGELEM) 110 DECLARE_COCOALIB_FUNCTION3(MinPolyQuotElim, RINGELEM, IDEAL, RINGELEM) 111 DECLARE_COCOALIB_FUNCTION3(MinPolyQuotMat, RINGELEM, IDEAL, RINGELEM) 112 DECLARE_COCOALIBFORC5_FUNCTION1(IsTerm, RINGELEM) 113 DECLARE_COCOALIBFORC5_FUNCTION1(monomials, RINGELEM) 114 DECLARE_COCOALIBFORC5_FUNCTION1(support, RINGELEM) 115 DECLARE_COCOALIBFORC5_FUNCTION2(CoeffListWRT, RINGELEM, RINGELEM) // AMB+JAA 116 DECLARE_COCOALIBFORC5_FUNCTION2(CoeffListWRTSupport, RINGELEM, RINGELEM) // JAA 117 DECLARE_COCOALIBFORC5_FUNCTION2(CoeffOfTerm, RINGELEM, RINGELEM) 118 DECLARE_COCOALIBFORC5_FUNCTION2(DensePoly, RING, INT) // AMB 119 DECLARE_COCOALIBFORC5_FUNCTION2(IsCoprime, RINGELEM, RINGELEM) // AMB 120 DECLARE_COCOALIBFORC5_FUNCTION2(SmoothFactor, INT, INT) 121 DECLARE_COCOALIBFORC5_FUNCTION2(HomogCompt, RINGELEM, INT) 122 123 ////// functions on MODULEELEM 124 DECLARE_COCOALIB_FUNCTION1(FirstNonZero, MODULEELEM) // AMB 125 DECLARE_COCOALIBFORC5_FUNCTION1(FirstNonZeroPosn, MODULEELEM) // AMB 126 DECLARE_COCOALIBFORC5_FUNCTION1(LPosn, MODULEELEM) // AMB 127 128 ////// functions on RING (and PolyRing) 129 DECLARE_COCOALIB_FUNCTION0(RingQQ) 130 DECLARE_COCOALIB_FUNCTION0(RingZZ) 131 DECLARE_COCOALIB_FUNCTION1(BaseRing, RING) 132 DECLARE_COCOALIB_FUNCTION1(characteristic, RING) 133 DECLARE_COCOALIB_FUNCTION1(CoeffEmbeddingHom, RING) 134 DECLARE_COCOALIB_FUNCTION1(CoeffRing, RING) 135 DECLARE_COCOALIB_FUNCTION1(DefiningIdeal, RING) 136 DECLARE_COCOALIB_FUNCTION1(EmbeddingHom, RING) 137 DECLARE_COCOALIB_FUNCTION1(GradingDim, RING) // AMB 138 DECLARE_COCOALIB_FUNCTION1(GradingMat, RING) // AMB 139 DECLARE_COCOALIB_FUNCTION1(HVector, RING) // AMB 140 DECLARE_COCOALIB_FUNCTION1(HilbertPoly, RING) // AMB 141 DECLARE_COCOALIB_FUNCTION1(RingID, RING) 142 DECLARE_COCOALIB_FUNCTION1(HasLex, RING) 143 DECLARE_COCOALIB_FUNCTION1(HasMatrixOrdering, RING) 144 DECLARE_COCOALIB_FUNCTION1(HasPositiveGrading, RING) // AMB 2019-09 145 DECLARE_COCOALIB_FUNCTION1(HasStdDegLex, RING) 146 DECLARE_COCOALIB_FUNCTION1(HasStdDegRevLex, RING) 147 DECLARE_COCOALIB_FUNCTION1(IsCommutative, RING) 148 DECLARE_COCOALIB_FUNCTION1(IsField, RING) 149 DECLARE_COCOALIB_FUNCTION1(IsFiniteField, RING) 150 DECLARE_COCOALIB_FUNCTION1(IsFractionField, RING) 151 DECLARE_COCOALIB_FUNCTION1(IsIntegralDomain, RING) 152 DECLARE_COCOALIB_FUNCTION1(IsOrderedDomain, RING) 153 DECLARE_COCOALIB_FUNCTION1(IsPolyRing, RING) 154 DECLARE_COCOALIB_FUNCTION1(IsQQ, RING) 155 DECLARE_COCOALIB_FUNCTION1(IsQuotientRing, RING) 156 DECLARE_COCOALIB_FUNCTION1(IsStdGraded, RING) 157 DECLARE_COCOALIB_FUNCTION1(IsTrueGCDDomain, RING) 158 DECLARE_COCOALIB_FUNCTION1(IsZZ, RING) 159 DECLARE_COCOALIB_FUNCTION1(LogCardinality, RING) 160 DECLARE_COCOALIB_FUNCTION1(NewFractionField, RING) // AMB 161 DECLARE_COCOALIB_FUNCTION1(NewZZmod, INT) // JAA 162 DECLARE_COCOALIB_FUNCTION2(NewRingFqLog, INT, INT) // AMB 163 DECLARE_COCOALIB_FUNCTION2(NewRingFqVec, INT, INT) // AMB 164 DECLARE_COCOALIB_FUNCTION1(NumIndets, RING) 165 DECLARE_COCOALIB_FUNCTION1(one, RING) 166 DECLARE_COCOALIB_FUNCTION1(OrdMat, RING) // AMB 167 DECLARE_COCOALIB_FUNCTION1(owner, RINGELEM) 168 //DECLARE_COCOALIB_FUNCTION1(zero, RING) // now also for modules 169 //DECLARE_COCOALIB_FUNCTION1(NewWeylAlgebra, ..) // AMB 170 //DECLARE_COCOALIB_FUNCTION2(NewQuotientRing, RING, IDEAL) // moved to BIF 171 DECLARE_COCOALIB_FUNCTION1(QQEmbeddingHom, RING) 172 DECLARE_COCOALIBFORC5_FUNCTION1(RingQQt, INT) // AMB 173 174 ////// functions for RINGHOM 175 DECLARE_COCOALIB_FUNCTION1(IdentityHom, RING) // AMB 176 DECLARE_COCOALIB_FUNCTION1(QuotientingHom, RING) // AMB 177 DECLARE_COCOALIB_FUNCTION1(codomain, RINGHOM) // AMB 178 DECLARE_COCOALIB_FUNCTION1(domain, RINGHOM) // AMB 179 DECLARE_COCOALIB_FUNCTION2(CanonicalHom, RING, RING) // GL 180 DECLARE_COCOALIB_FUNCTION1(IsInjective, RINGHOM) // JAA 181 DECLARE_COCOALIB_FUNCTION1(IsSurjective, RINGHOM) // JAA 182 DECLARE_COCOALIB_FUNCTION1(ker, RINGHOM) // JAA 183 DECLARE_COCOALIB_FUNCTION1(ker_H, RINGHOM) // JAA 184 DECLARE_COCOALIB_FUNCTION2(ChainCanonicalHom, RING, RING) // AMB 185 DECLARE_COCOALIB_FUNCTION2(LiftPolyFromFpxToQQx, RING, RINGELEM) // AMB 186 187 ////// functions on MAT 188 //DECLARE_COCOALIB_FUNCTION1(FrobeniusNorm2, MAT) // AMB 189 //DECLARE_COCOALIB_FUNCTION1(OperatorNorm1, MAT) // AMB 190 //DECLARE_COCOALIB_FUNCTION1(OperatorNormInfinity, MAT) // AMB 191 DECLARE_COCOALIB_FUNCTION1(IsAntiSymmetric, MAT) // AMB 192 DECLARE_COCOALIB_FUNCTION1(IsDiagonal, MAT) // AMB 193 DECLARE_COCOALIB_FUNCTION1(IsSymmetric, MAT) // AMB 194 DECLARE_COCOALIB_FUNCTION1(IsTermOrdering, MAT) // AMB 195 DECLARE_COCOALIB_FUNCTION1(LinKer, MAT) // AMB 196 DECLARE_COCOALIB_FUNCTION1(LinKerZZ, MAT) // JAA 197 DECLARE_COCOALIB_FUNCTION1(NumCols, MAT) // AMB 198 DECLARE_COCOALIB_FUNCTION1(NumRows, MAT) // AMB 199 DECLARE_COCOALIB_FUNCTION1(PseudoInverse, MAT) // AMB 200 DECLARE_COCOALIB_FUNCTION1(adj, MAT) // AMB 201 DECLARE_COCOALIB_FUNCTION1(det, MAT) // AMB 202 DECLARE_COCOALIB_FUNCTION1(IsZeroDet, MAT) // JAA 203 DECLARE_COCOALIB_FUNCTION1(DetDirect, MAT) // JAA 204 DECLARE_COCOALIB_FUNCTION1(inverse, MAT) // AMB 205 DECLARE_COCOALIB_FUNCTION1(LawrenceMat, MAT) // AMB 2020-02 206 DECLARE_COCOALIB_FUNCTION1(rref, MAT) // JAA 207 DECLARE_COCOALIB_FUNCTION1(rk, MAT) // AMB 208 DECLARE_COCOALIB_FUNCTION2(ConcatAntiDiag, MAT, MAT) // AMB 209 DECLARE_COCOALIB_FUNCTION2(IdealOfPoints, RING, MAT) // JAA 210 DECLARE_COCOALIB_FUNCTION2(IdealOfProjectivePoints, RING, MAT) // AMB 211 DECLARE_COCOALIB_FUNCTION2(LinSolve, MAT, MAT) // JAA 212 DECLARE_COCOALIB_FUNCTION2(ConcatDiag, MAT, MAT) // AMB 213 DECLARE_COCOALIB_FUNCTION2(ConcatHor, MAT, MAT) // AMB 214 DECLARE_COCOALIB_FUNCTION2(ConcatVer, MAT, MAT) // AMB 215 DECLARE_COCOALIB_FUNCTION2(TensorMat, MAT, MAT) // AMB 216 DECLARE_COCOALIB_FUNCTION4(BlockMat2x2, MAT, MAT, MAT, MAT) // AMB 217 DECLARE_COCOALIBFORC5_FUNCTION1(LexMat, INT) 218 DECLARE_COCOALIBFORC5_FUNCTION1(RevLexMat, INT) 219 DECLARE_COCOALIBFORC5_FUNCTION1(StdDegLexMat, INT) 220 DECLARE_COCOALIBFORC5_FUNCTION1(StdDegRevLexMat, INT) 221 DECLARE_COCOALIBFORC5_FUNCTION1(XelMat, INT) 222 DECLARE_COCOALIBFORC5_FUNCTION1(transposed, MAT) 223 DECLARE_COCOALIBFORC5_FUNCTION2(GetCol, MAT, INT) 224 DECLARE_COCOALIBFORC5_FUNCTION2(GetRow, MAT, INT) 225 DECLARE_COCOALIBFORC5_FUNCTION2(IdentityMat, RING, INT) 226 DECLARE_COCOALIBFORC5_FUNCTION3(NewDenseMat, RING, INT, INT) 227 DECLARE_COCOALIBFORC5_FUNCTION3(ZeroMat, RING, INT, INT) 228 //DECLARE_COCOALIBFORC5_FUNCTION4(FilledMat, RING, INT, INT, RINGELEM) // removed from CoCoALib 229 DECLARE_COCOALIBFORC5_FUNCTION3(ClosePassingPoly, RING, MAT, MAT) 230 231 ////// functions on IDEAL 232 DECLARE_COCOALIB_FUNCTION1(AlexanderDual, IDEAL) // AMB 233 DECLARE_COCOALIB_FUNCTION1(AreGensMonomial, IDEAL) // AMB 234 DECLARE_COCOALIB_FUNCTION1(AreGensSqFreeMonomial, IDEAL) // AMB 235 DECLARE_COCOALIB_FUNCTION1(DenSigma, IDEAL) // AMB 2018-03 236 DECLARE_COCOALIB_FUNCTION1(DimQuot, IDEAL) // AMB 237 DECLARE_COCOALIB_FUNCTION1(GBasisByHomog, IDEAL) // AMB 2018-08 238 DECLARE_COCOALIB_FUNCTION1(GBasisRealSolve, IDEAL) 239 DECLARE_COCOALIB_FUNCTION1(GBasisSelfSatCore, IDEAL) 240 DECLARE_COCOALIB_FUNCTION1(HasGBasis, IDEAL) // AMB 241 DECLARE_COCOALIB_FUNCTION1(HilbertSeriesQuot, IDEAL) // AMB 242 DECLARE_COCOALIB_FUNCTION1(IdealOfGBasis, IDEAL) // AMB 2017-02 243 DECLARE_COCOALIB_FUNCTION1(IdealOfMinGens, IDEAL) // AMB 2017-02 244 DECLARE_COCOALIB_FUNCTION1(IsMaximal, IDEAL) // AMB 245 DECLARE_COCOALIB_FUNCTION1(IsPrimary, IDEAL) // AMB 2018-03 246 DECLARE_COCOALIB_FUNCTION1(IsRadical_tmp, IDEAL) // AMB 2018-03 247 DECLARE_COCOALIB_FUNCTION1(IsZeroDim, IDEAL) // AMB 248 DECLARE_COCOALIB_FUNCTION1(MayerVietorisTreeN1, IDEAL) 249 DECLARE_COCOALIB_FUNCTION1(MultiplicityQuot, IDEAL) // AMB 250 //DECLARE_COCOALIB_FUNCTION1(NumGens, IDEAL) now also for modules 2019-03 251 DECLARE_COCOALIB_FUNCTION1(PrimaryDecomposition, IDEAL) // AMB 252 DECLARE_COCOALIB_FUNCTION1(ShapeLemma, IDEAL) // AMB 2018-02 253 //DECLARE_COCOALIB_FUNCTION1(radical_0dim, IDEAL) // AMB 2018-03 -- rm 2019-10 254 DECLARE_COCOALIB_FUNCTION1(radical_tmp, IDEAL) // AMB 2019-10 255 DECLARE_COCOALIB_FUNCTION2(IsSigmaGoodPrime, INT, IDEAL) // AMB 256 DECLARE_COCOALIB_FUNCTION2(MinPowerInIdeal, RINGELEM, IDEAL) // JAA 257 DECLARE_COCOALIB_FUNCTION2(NF, RINGELEM, IDEAL) // AMB 258 DECLARE_COCOALIB_FUNCTION2(colon, IDEAL, IDEAL) // AMB 259 DECLARE_COCOALIB_FUNCTION2(intersect, IDEAL, IDEAL) // AMB 260 //DECLARE_COCOALIB_FUNCTION1(GBasis, IDEAL) now also for modules 261 //DECLARE_COCOALIB_FUNCTION1(MinGens, IDEAL) now also for modules 262 //DECLARE_COCOALIB_FUNCTION1(gens, IDEAL) now also for modules 263 //DECLARE_COCOALIB_FUNCTION2(IsContained, IDEAL, IDEAL) now also for modules 264 //DECLARE_COCOALIB_FUNCTION2(IsElem, RINGELEM, IDEAL) now also for modules 265 DECLARE_COCOALIBFORC5_FUNCTION1(HilbertNumQuot, IDEAL) // AMB 266 DECLARE_COCOALIBFORC5_FUNCTION1(JanetBasis, IDEAL) 267 DECLARE_COCOALIBFORC5_FUNCTION1(QuotientBasis, IDEAL) 268 DECLARE_COCOALIBFORC5_FUNCTION1(QuotientBasisSorted, IDEAL) 269 270 ////// functions on MODULE 271 DECLARE_COCOALIB_FUNCTION1(SubmoduleOfMinGens, MODULE) // AMB 2017-09 272 DECLARE_COCOALIBFORC5_FUNCTION2(SubmoduleCols, MODULE, MAT) // AMB 273 DECLARE_COCOALIBFORC5_FUNCTION2(SubmoduleRows, MODULE, MAT) // AMB 274 275 ////// UTILS 276 DECLARE_COCOALIBFORC5_FUNCTION0(CpuTime) 277 DECLARE_COCOALIBFORC5_FUNCTION0(date) 278 DECLARE_COCOALIBFORC5_FUNCTION0(TimeOfDay) // time is a keyword (unused) 279 DECLARE_COCOALIB_FUNCTION0(VerbosityLevel) 280 // DECLARE_COCOALIB_FUNCTION0(NewSymbol) 281 // DECLARE_COCOALIB_FUNCTION1(NewSymbols, INT) 282 283 } // namespace AST 284 } // namespace CoCoA 285