FriCAS
FriCAS is a free and open-source general-purpose computer algebra system (CAS) designed for symbolic, numerical, and graphical mathematical computations, serving as a fork of the Axiom CAS with its first official release in 2007.[1][2] Developed as an actively maintained successor to Axiom, whose source code was released under a modified BSD license in 2002, FriCAS emphasizes portability, extensibility, and type safety through its implementation in Common Lisp.[3][2] It supports a broad spectrum of mathematical domains, from basic calculus operations like integration and differentiation to advanced abstract algebra, polynomial manipulation, differential equations, and linear algebra, all facilitated by a rich library comprising over 1,260 constructors and 8,326 operations.[1][2] The system includes more than 40 data structures—such as lists, arrays, heaps, sets, and tensors—and enables users to define custom domains and categories via its SPAD programming language, promoting interactive development and research applications.[2] FriCAS features integrated graphics for 2D and 3D plotting, including interactive manipulation and support for styles like wireframe, solid, and shaded surfaces, alongside numerical tools for arbitrary-precision arithmetic and floating-point computations.[1][2] Its HyperDoc system provides comprehensive online documentation, tutorials, and reference materials, while output formats extend to TeX, Fortran, and MathML for seamless integration with other tools.[2] As of June 2025, the latest stable version is 1.3.12, with ongoing community-driven enhancements, including bug fixes, new algorithms like the Berkowitz method for matrix computations, and plans for a new compiler in version 2.0; it runs on platforms including Linux, BSD variants, macOS, and Windows.[4][5][2] Widely used in education and mathematical research for tasks ranging from power series expansions to Gröbner basis calculations, FriCAS stands out for its focus on symbolic problem-solving and polymorphic algorithms.[1][2]Introduction
Definition and Purpose
FriCAS is a general-purpose, open-source computer algebra system (CAS) designed primarily for symbolic computation in mathematical research and the development of new algorithms.[6][3] It provides a robust environment for handling complex symbolic operations, enabling users to perform computations that go beyond numerical approximations to explore mathematical structures and theories in depth.[7] The core purpose of FriCAS is to support advanced symbolic mathematics, including integration, differentiation, and operations in abstract algebra, leveraging state-of-the-art algebraic algorithms to facilitate exploration and innovation in pure and applied mathematics.[6] Unlike systems focused on numerical methods, FriCAS emphasizes the creation and refinement of symbolic algorithms, allowing researchers to prototype, test, and extend mathematical tools for specialized domains such as commutative algebra, differential equations, and category theory.[3] This focus makes it particularly valuable for academic and scientific investigations where precise symbolic manipulation is essential.[7] FriCAS originated from IBM's Scratchpad project and is freely available under a modified BSD license, which promotes widespread accessibility for educators, students, and researchers worldwide.[1][4] Its open-source nature encourages community contributions to enhance its capabilities, ensuring it remains a dynamic tool for advancing symbolic computation.[3]Relation to Other Systems
FriCAS emerged as a fork of the Axiom computer algebra system in 2007, driven by disagreements among developers regarding project direction and maintenance. Axiom itself traces its origins to IBM's Scratchpad project, initiated in the 1970s as an internal research tool for symbolic computation. Alongside FriCAS, another parallel fork known as OpenAxiom was created around the same time, with both aiming to sustain and evolve the foundational codebase while pursuing distinct development paths.[8][3] In the landscape of computer algebra systems (CAS), FriCAS distinguishes itself through its emphasis on strongly typed symbolic computation, a feature inherited from Axiom that ensures operations are type-specific and reduces errors in complex mathematical expressions. This contrasts with systems like Maple and Mathematica, which rely more heavily on pattern-matching and dynamic typing for flexibility in general-purpose tasks.[8] FriCAS inherits Axiom's extensive mathematical library, comprising thousands of domains and operations for symbolic algebra, while introducing enhancements for greater portability across platforms such as Linux and Windows. It also addresses several defects in the original codebase through restructuring and employs a lightweight development methodology to facilitate ongoing maintenance by a small team of contributors. These improvements enable FriCAS to serve as a robust platform for mathematical research without the overhead of heavier integrated environments.[8][9]History
Origins and Early Development
The origins of FriCAS trace back to 1965, when James H. Griesmer initiated a project at IBM's Thomas J. Watson Research Center to develop a computer algebra system capable of interactive symbolic computations for mathematical research.[10] This effort, initially implemented in LISP, focused on providing tools for polynomial manipulation, equation solving, and other algebraic operations, drawing inspiration from early systems like SIN and REDUCE.[11] Griesmer, along with collaborators F. W. Blair and R. D. Jenks, aimed to create an environment where mathematicians could interact directly with symbolic expressions in a notation close to standard mathematical writing.[11] In 1970, the project received its formal name, Scratchpad, marking a milestone in its evolution as a dedicated symbolic computation facility.[10] Scratchpad I, the first iteration, emphasized user-friendly interaction but was limited by the hardware constraints of the era, running primarily on IBM mainframes.[11] By the mid-1970s, the system had demonstrated potential for broader algebraic applications, prompting a major redesign. Development of Scratchpad II began in 1976 under the leadership of Richard D. Jenks, introducing a novel architecture that treated mathematical domains and categories as first-class, computable objects to support extensible and generic symbolic computations. This approach enabled the definition of abstract data types with parameterized operations, significantly improving the system's modularity and efficiency for complex algebraic tasks compared to earlier procedural designs. The architecture's emphasis on type inference and polymorphism laid a foundational framework for rigorous symbolic manipulation. Around 1982, the SPAD language emerged within Scratchpad II, adopting a strongly typed, category-based syntax that closely mirrored its contemporary form in FriCAS and facilitated the specification of intricate mathematical structures like rings and modules.[12] Throughout the 1980s, Scratchpad II expanded as a proprietary IBM research tool, requiring substantial resources such as large mainframe computers operating under the VM/CMS environment to handle its memory-intensive operations. Distribution remained internal or limited to select academic partners via joint agreements, restricting wider adoption but enabling deep innovations in computer algebra. This phase of intensive internal growth positioned Scratchpad II for its transition into a commercial product.Evolution into Axiom
In 1992, IBM sold the internal Scratchpad II system to the Numerical Algorithms Group (NAG) Ltd., which renamed it Axiom and initiated commercial distribution as a scientific computation tool.[12] NAG ported Axiom to the Codemist Common Lisp (CCL) implementation, enabling compatibility with personal computers by significantly reducing memory demands, though it still required 16 MB of RAM and thus remained viable primarily on high-end PCs of the era.[12] Under NAG's stewardship, Axiom's functionality expanded notably through integration with the NAG numerical library, enhancing its algorithmic support for diverse mathematical operations including root-finding methods, Fourier transforms, and solutions to differential equations, alongside statistical computations.[13] These additions broadened the system's applicability beyond its original research-oriented scope, positioning it as a more comprehensive environment for both symbolic and numerical work.[13] However, Axiom's commercial performance fell short of NAG's expectations, leading to a halt in active development around 1998.[12] The product was formally withdrawn from the market on October 1, 2001, ending its tenure as a proprietary offering.[13] In September 2002, NAG released the full source code under the Modified BSD License to Tim Daly, a longtime contributor from the IBM era, thereby launching the open-source Axiom project.[13] This transition paved the way for community-driven evolution, culminating in the 2007 fork that birthed FriCAS.[12]Forking and Modern FriCAS
In 2007, following disagreements over development strategies within the Axiom project, Waldek Hebisch forked the codebase to create FriCAS, with the primary goals of enhancing portability across multiple platforms and addressing accumulated defects more rapidly.[14] This initiative was encouraged by Axiom's lead developer Tim Daly to allow independent evolution of the systems. Concurrently, Gabriel Dos Reis initiated a parallel fork known as OpenAxiom, further diversifying the open-source branches from the original Axiom.[15] FriCAS underwent significant restructuring to support cross-platform deployment on various operating systems and hardware architectures, employing a lightweight development methodology that prioritized modular code organization and efficient compilation processes.[3] This approach, inherited from the Axiom era but refined for modern needs, enabled faster iteration and broader accessibility without compromising the system's core symbolic computation capabilities.[16] Key advancements in FriCAS include the integration of an extensive library for special functions, encompassing operations for exponential integrals, error functions, incomplete gamma functions, and related mathematical constructs, which expanded its utility for advanced symbolic integration and numerical analysis.[17] Additionally, developers added a web-based notebook interface reminiscent of SageMath's design, facilitating interactive sessions with dynamic output rendering and collaborative features through tools like HyperDoc.[8] More recent milestones encompass the implementation of Unicode support, allowing users to employ Greek letters and other international symbols directly as variable names and mathematical operators within expressions.[18] FriCAS also participated in the 2015 Google Summer of Code under the Lmonade umbrella project, where student contributors enhanced its integration with packaging tools and extended library functionalities.[19] Since then, FriCAS has continued active development with regular releases, including version 1.3.10 in January 2024, 1.3.11 in June 2024, and 1.3.12 in June 2025, focusing on bug fixes, performance improvements, and enhanced compatibility across platforms like Linux, macOS, and Windows.[20][5]Technical Overview
System Architecture
FriCAS employs an interpreter-based design that facilitates interactive symbolic computation, enabling users to execute commands and receive immediate feedback while maintaining a dynamic environment for mathematical exploration. The core implementation is built upon Common Lisp, leveraging its capabilities for efficient code execution and extensibility across various Lisp implementations such as SBCL, Clozure CL, ECL, and CLISP to ensure portability. This foundation allows FriCAS to compile expressions on-the-fly during interactive sessions, with the interpreter inferring types dynamically and supporting features like lazy evaluation for constructs such as power series.[2][21] The system features a modular architecture that separates the compiler from the runtime environment, promoting maintainability and allowing for bootstrapping directly from source code. During the build process, FriCAS uses a configure-and-make workflow to generate compiled libraries from source files, creating binary modules (e.g., .NRLIB files) that can be loaded on demand into the runtime. This separation enables optimization of specific components, such as algebraic operations, without recompiling the entire system, and supports integration with external libraries like GMP for arbitrary-precision arithmetic on compatible Lisp backends. The restructuring from its predecessor Axiom involved significant refactoring to resolve defects and enhance modularity, resulting in broader platform compatibility across Linux, Windows, and macOS.[3][2][21] Central to the architecture are key components including a hierarchical type system organized around domains and categories, which enforces mathematical correctness and enables polymorphic operations across data structures. Pattern matching mechanisms underpin core functionalities like expression simplification and equation solving, applying rewrite rules to transform symbolic expressions efficiently— for instance, handling logarithmic identities or trigonometric expansions through predefined rule sets. These elements integrate seamlessly with the Spad language for defining custom types and operations. The runtime manages dynamic type resolution and coercion, ensuring seamless execution of compiled code while supporting multiple independent sessions (frames) for isolated computational environments.[2]Programming Language
FriCAS employs the SPAD language, a strongly-typed, declarative programming language designed specifically for specifying mathematical domains and categories in symbolic computation systems.[17] This language enables users to define abstract mathematical structures with rigorous type safety, ensuring that operations are applied only to compatible types at compile time, thereby facilitating reliable and efficient computations.[17] SPAD's declarative nature emphasizes the mathematical intent over procedural details, allowing concise expressions of algebraic properties and behaviors. Key features of SPAD include support for abstract data types through domains and packages, which encapsulate data representations and operations; polymorphism, which permits generic functions to operate across diverse types such as integers, polynomials, or matrices; and deep integration with category theory, where categories like Ring or Field define shared properties and enable reusable, hierarchically organized code.[17] These elements promote modularity and extensibility, making it possible to construct complex mathematical algorithms in a natural, high-level manner.[3] SPAD originated with the Scratchpad II system in 1982 and has evolved through subsequent developments, including adaptations in Axiom.[17] For instance, a simple domain for a polynomial ring over a ring R can be defined using the following syntax snippet:This structure declares the domain's category requirements, exported operations, and internal representation, without specifying full implementations.[17] The SPAD language underpins the construction of FriCAS's extensive mathematical library, which includes over 700 domains and categories (part of 1,260 total constructors).[17]Polynomial(R: [Ring](/page/Ring)): Exports == Implementation where Exports == with add: (%, %) -> % Implementation == add { Rep == [List](/page/List) [R](/page/R); add(p: %, q: %) == ... }Polynomial(R: [Ring](/page/Ring)): Exports == Implementation where Exports == with add: (%, %) -> % Implementation == add { Rep == [List](/page/List) [R](/page/R); add(p: %, q: %) == ... }
Core Features
Symbolic Computation Capabilities
FriCAS features advanced engines for symbolic integration and differentiation, capable of processing intricate expressions involving parameters, special functions, and non-elementary cases. The integration system implements a comprehensive version of the Risch algorithm, enabling factorization-free computations and the detection of non-integrable forms with formal proofs, such as for expressions like logarithms over square roots. Differentiation supports higher-order, partial, and formal derivatives, handling dependencies in streams or multivariate settings while producing exact symbolic results. These engines excel with complex inputs, including transcendental functions and algebraic extensions, ensuring precise manipulation without numerical approximation.[22][2] Equation solving in FriCAS leverages robust algorithms for polynomials, linear systems, and differential equations, often employing Gröbner bases for ideal membership and primary decomposition in multivariate cases. Simplification techniques incorporate pattern matching via rewrite rules—such as logarithmic identities or trigonometric expansions—and partial fraction decomposition to reduce expressions to canonical forms. For instance, products of logarithms can be consolidated into a single logarithm, or radicals grouped efficiently, all while preserving symbolic integrity. These methods facilitate solving systems with radical or exact solutions, extending to transcendental equations through series expansions or numerical-symbolic hybrids when needed.[22][2] The system provides extensive support for abstract algebra, encompassing group theory through presentations and permutation computations, ring operations including non-commutative and graded structures, and commutative algebra via tools for ideals, modules, and real closures. Computations over finite fields, Clifford algebras, and tensor products are streamlined, allowing for operations like discrete logarithms or quaternion arithmetic in domain-specific contexts. Implemented primarily through the Spad language, these capabilities enable flexible extensions for algebraic manipulations.[22][6][2] A distinctive aspect of FriCAS is its intuitive simplification for computer algebra system functions, yielding non-numerical outputs that emphasize structural insight, such as expanded polynomials from binomial powers or factored forms over extensions, rather than mere evaluations. This approach prioritizes readable, provably equivalent expressions, aiding users in theoretical exploration without resorting to approximations.[2]Mathematical Library
FriCAS features an extensive mathematical library comprising over 1,000 predefined domains and categories that enable computations across a broad spectrum of mathematical structures.[19] These domains encompass special functions such as Bessel, Airy, Gamma, and hypergeometric functions, as well as advanced algebraic constructs like Clifford algebras and facilities for querying the system's knowledge base through commands such as)what and )apropos.[23] The library supports efficient exploration of mathematical objects via database-like operations, allowing users to filter domains by type, arguments, or functionality.[23]
Key areas of the library include robust support for polynomial systems, number theory, and solvers for differential equations. For polynomial systems, domains like Polynomial and MultivariatePolynomial provide tools for factorization, Gröbner bases, and root isolation over various coefficient fields.[23] In number theory, packages such as IntegerNumberTheoryFunctions offer operations for prime testing, integer factorization, Euler's totient function, and modular arithmetic.[23] Differential equation solvers, implemented in domains like LinearOrdinaryDifferentialOperator and ElementaryFunctionODESolver, handle both linear and nonlinear ordinary differential equations, including power series solutions and symbolic integration methods.[23]
A notable component is the Rosetta Stone, a comparison tool that facilitates translation of mathematical concepts and operations between FriCAS and other computer algebra systems, such as Mathematica, by mapping equivalent functionalities and syntax.[24] The library's extensibility is enhanced through integration with Aldor, which became freely available in July 2013 and allows for sophisticated domain definitions via its compiler, compatible with FriCAS through commands like )compile.[25] This integration builds on the core library, which is constructed using the Spad language for expressing typed mathematical algorithms.[23]
User Interfaces
Command-Line and Interpreter
FriCAS is primarily accessed through its command-line interface, which provides an interactive environment for mathematical computations using the SPAD programming language. The system is launched by executing thefricas command in a terminal or shell, initiating the interpreter and displaying a prompt such as (1) -> for user input. Additionally, efricas launches FriCAS within Emacs, providing an integrated editing and execution environment.[26] Upon startup, FriCAS may automatically open a HyperDoc window for online documentation if running in an X Windows environment, and it reads initialization files like .fricas.input from the user's home directory or the system's src/input directory to set up the environment.[17]
The interactive interpreter serves as the core for entering and evaluating SPAD expressions, processing input line by line and supporting features like variable assignment (e.g., x := 4), function calls, and symbolic operations. Input is handled via the console, where expressions are parsed into abstract syntax trees and evaluated bottom-up, with the interpreter resolving ambiguities through type inference to determine appropriate domains and operations. Output is displayed immediately after evaluation, showing the computed value followed by its inferred type, such as Type: PositiveInteger or more complex forms like Union(D, 0) for results that may belong to a domain D or a constant value. This type display aids users in understanding the structure of results, particularly when dealing with polymorphic or conditional computations.[27][17][28]
Various startup options enhance the command-line experience, including the -clef flag to enable the Clef interface, a beginner-friendly command-line editor that supports arrow key navigation, Tab completion for operation names, and improved input handling under X Windows. Other options like -nox disable graphical features for pure terminal use, while -eval "code" allows immediate execution of SPAD code at launch. To wind down a session, users issue the )quit command for direct exit or )pquit for a confirmation prompt, ensuring any open resources like files or viewports are properly closed.[17][26]
FriCAS also supports scripting for batch computations, enabling non-interactive workflows by reading commands from input files via the )read filename system command or piping input with the -nosman option to process sequences of expressions without the interactive prompt. This facilitates automated tasks, such as generating outputs for reports or integrating with other tools, while maintaining the full type-safe evaluation of the interpreter.[17][26]
Graphical and Web-Based Tools
FriCAS provides built-in graphical tools for visualizing mathematical functions and data through its integrated plotting capabilities, supporting both two-dimensional (2D) and three-dimensional (3D) representations. These tools enable the creation of plots for functions of one or two variables, parametric curves, surfaces, and vector fields, using commands such asdraw and drawComplex. For 2D plotting, users can generate graphs of explicit functions, implicit curves, and polar coordinates, with options for adaptive sampling, clipping, and color customization via the Palette domain. In 3D, capabilities extend to parametric space curves, surfaces in various coordinate systems (e.g., spherical, cylindrical), and interactive manipulations like rotation and shading styles including wireframe, solid, and smooth Phong illumination. Data visualization is facilitated by constructing objects from point lists or numerical computations, often displayed in viewports with control panels for zooming, translating, and adjusting appearance. These features are accessible directly from the interpreter and leverage packages like GnuDraw for enhanced gnuplot integration since FriCAS 1.2.4.[23][8]
For web-based access, FriCAS supports browser-based sessions through jFriCAS, a Jupyter kernel that integrates the system into interactive notebooks similar to those in Sage. This interface allows users to execute FriCAS commands in a web environment, with support for formatted outputs including 2D graphics and TeX rendering, by running a local FriCAS process and Hunchentoot webserver to handle requests. Installation of jFriCAS follows FriCAS setup, enabling notebook creation via Jupyter's "New > FriCAS" option for seamless remote or local experimentation without relying solely on terminal access. Additionally, the FriCAS wiki offers an online sandbox at wiki.fricas.org/SandBox, where users can test and preview code snippets interactively without local installation, supporting both FriCAS and related systems like Reduce for quick prototyping and learning.[29][8][30]
FriCAS enhances its graphical and web outputs with Unicode rendering support, particularly for mathematical symbols in the Symbol domain, allowing characters like Greek letters (e.g., α via ucodeToString(945)) to display correctly in algebra, TeX, or MathML formats using UTF-8 encoding. FriCAS supports Unicode rendering for mathematical symbols in the Symbol domain and output formats like TeX and MathML. Recent releases also enable Unicode characters, such as Greek letters, as variable names in the SPAD language.[31][18]
Examples
Basic Symbolic Operations
FriCAS supports fundamental symbolic operations through its interpreter, enabling users to perform computations such as integration, differentiation, polynomial factoring, and equation solving directly in an interactive session.[17] For simple integration, FriCAS computes indefinite integrals symbolically, returning results with an arbitrary constant and specifying the output type. For instance, the integral of x^2 with respect to x yields \frac{x^3}{3} + \text{constant}, of typeExpression Integer. This demonstrates FriCAS's ability to handle basic polynomial antiderivatives using its integration facilities based on the Risch algorithm for elementary functions.[2][32]
Differentiation in FriCAS is performed using the D operator, which computes partial or total derivatives symbolically. A basic example is the derivative of \sin(x) with respect to x, resulting in \cos(x), of type Expression Integer. This operation extends to more complex expressions, such as D(\exp(\exp(x)), x) = \exp(x) \exp(\exp(x)), highlighting the system's support for chain rule application in transcendental functions.[17][33]
Basic algebraic operations include factoring polynomials over the integers or rationals. FriCAS factors x^2 - 1 as (x - 1)(x + 1), of type Factored [Polynomial](/page/Polynomial) [Integer](/page/Integer), using algorithms for univariate and multivariate factorization. This capability is part of the broader polynomial manipulation library, which handles square-free decomposition and content removal for efficient computation.[17][34]
Equation solving in FriCAS addresses polynomial equations symbolically or numerically. For the equation x^2 = 4, or equivalently x^2 - 4 = 0, the system returns solutions x = 2 and x = -2, as a list of type List Equation [Polynomial](/page/Polynomial) [Integer](/page/Integer). The solve function supports both exact symbolic roots for quadratics and numerical approximation for higher degrees, with options for precision control.[35][17]
These operations are accessible via the FriCAS command-line interpreter, where users can input expressions interactively and receive typed outputs for verification.[36]
Advanced Mathematical Applications
FriCAS supports the construction of Clifford algebras through its dedicated domain, enabling users to define and perform computations in geometric algebras over specified fields and bilinear forms. TheCliffordAlgebra(n, K, bLin) constructor generates a module of dimension $2^n over a field K, incorporating a bilinear form bLin on K^n, which allows for the representation of multivectors and operations such as the geometric product. For instance, complex numbers can be modeled as a Clifford algebra for n=1 with quadratic form Q = [[-1]], where basis elements satisfy e_1^2 = -1, facilitating computations like multiplication and inversion in this structure. Similarly, quaternions arise from n=2 with Q = [[-1, 0], [0, -1]], supporting applications in 3D rotations and spin representations.[37][2]
In advanced scenarios, FriCAS leverages its Clifford algebra capabilities for geometric computations, such as inner and outer products in multivector spaces. The exterior algebra, obtained by setting the quadratic form to zero, models Grassmann algebras for differential forms, while the Dirac spin algebra for n=4 with a Minkowski metric enables relativistic physics simulations. Users can extract coefficients from multivectors, e.g., coefficient(x, [1, 2]) for the e_1 e_2 term, or construct elements via multivector([c1, c2, ...]), demonstrating FriCAS's flexibility in handling non-commutative algebraic structures for geometric modeling.[37][2]
FriCAS provides extensive support for special functions, including Bessel functions, within the FunctionalSpecialFunction domain, allowing symbolic integration involving these in complex expressions. The Bessel function of the first kind, besselJ(v, [z](/page/Z))\), and related variants like besselY(v, z)(second kind),besselI(v, z)(modified first kind), andbesselK(v, z)(modified second kind) are implemented over integral domains, enabling computations such as Hankel functionshankelH1(v, z)andhankelH2(v, z)). For integration, FriCAS's symbolic engine can evaluate definite integrals incorporating these functions, as seen in elliptic integrals defined via `ellipticF(z, m) = \int_0^z \frac{dt}{\sqrt{(1-t^2)(1-m t^2)}}), which extend to scenarios with Bessel terms through composition with function spaces. An example integration might involve \int besselJ(0, x) \, dx, yielding expressions in terms of Struve functions or series expansions when closed forms are unavailable.[38][2]
Building a query facility in FriCAS utilizes custom domains to enable database-like mathematical searches, exemplified by the Database constructor for structured data manipulation. This domain supports operations like element access (elt), aggregation (+, -), and display functions, allowing queries on mathematical objects such as operations or polynomials. For instance, a query like ops.(name="map").(nargs="3").(type="*Stream*") retrieves operations matching criteria on name, argument count, and return type, returning a list of three results for stream mappings. Custom domains extend this to lineage or relational data, e.g., defining children("albert") == ["albertJr", "richard", "diane"] and querying grandchildren("richard") to yield ["dougie", "valerie"], facilitating searches in algebraic structures like equation systems or function libraries.[2]
FriCAS computes Gröbner bases for ideals in polynomial rings, providing tools for ideal membership testing in abstract algebraic settings. The PolyGroebner package offers functions like lexGroebner(lp, lv) to generate bases in lexicographic order for a list of polynomials lp over variables lv, enabling reduction and membership checks via the division algorithm. In multivariate polynomial rings over fields, this determines if a polynomial belongs to an ideal generated by given elements; for example, computing groebner([x^2 - y, y^2 - z]) in \mathbb{Q}[x, y, z] yields a basis allowing verification that x^4 - z^2 reduces to zero, confirming membership. Such computations extend to noncommutative rings of solvable type, supporting applications in solving polynomial systems and factorization. The library briefly references domains like DistributedMultivariatePolynomial for efficient handling in these operations.[39][2]