FriCAS User Guide¶
Contents:
- 0.1 Introduction to FriCAS
- 0.2 A Technical Introduction
- 0.2.1 Types are Defined by Abstract Datatype Programs
- 0.2.2 The Type of Basic Objects is a Domain or Subdomain
- 0.2.3 Domains Have Types Called Categories
- 0.2.4 Operations Can Refer To Abstract Types
- 0.2.5 Categories Form Hierarchies
- 0.2.6 Domains Belong to Categories by Assertion
- 0.2.7 Packages Are Clusters of Polymorphic Operations
- 0.2.8 The Interpreter Builds Domains Dynamically
- 0.2.9 FriCAS Code is Compiled
- 0.2.10 FriCAS is Extensible
- 0.3 Using FriCAS as a Pocket Calculator
- 0.4 Using FriCAS as a Symbolic Calculator
- 0.5 General Points about FriCAS
- 0.6 Data Structures in FriCAS
- 0.7 Functions, Choices, and Loops
- 1.0 An Overview of FriCAS
- 1.1 Starting Up and Winding Down
- 1.2 Typographic Conventions
- 1.3 The FriCAS Language
- 1.4 Numbers
- 1.5 Data Structures
- 1.6 Expanding to Higher Dimensions
- 1.7 Writing Your Own Functions
- 1.8 Polynomials
- 1.9 Limits
- 1.10 Series
- 1.11 Derivatives
- 1.12 Integration
- 1.13 Differential Equations
- 1.14 Solution of Equations
- 1.15 System Commands
- 1.16 Graphics
- 2.0 Using Types and Modes
- 2.1 The Basic Idea
- 2.2 Writing Types and Modes
- 2.3 Declarations
- 2.4 Records
- 2.5 Unions
- 2.6 The Any Domain
- 2.7 Conversion
- 2.8 Subdomains Again
- 2.9 Package Calling and Target Types
- 2.10 Resolving Types
- 2.11 Exposing Domains and Packages
- 2.12 Commands for Snooping
- 3.0 Using HyperDoc
- 3.1 Headings
- 3.2 Key Definitions
- 3.3 Scroll Bars
- 3.4 Input Areas
- 3.5 Radio Buttons and Toggles
- 3.6 Search Strings
- 3.7 Example Pages
- 3.8 X Window Resources for HyperDoc
- 4.0 Input Files and Output Styles
- 4.1 Input Files
- 4.2 The .axiom.input File
- 4.3 Common Features of Using Output Formats
- 4.4 Monospace Two-Dimensional Mathematical Format
- 4.5 TeX Format
- 4.6 IBM Script Formula Format
- 4.7 FORTRAN Format
- 5.0 Interactive Language
- 5.1 Immediate and Delayed Assignments
- 5.2 Blocks
- 5.3 if-then-else
- 5.4 Loops
- 5.4.1 Compiling vs. Interpreting Loops
- 5.4.2 return in Loops
- 5.4.3 break in Loops
- 5.4.4 break vs. => in Loop Bodies
- 5.4.5 More Examples of break
- 5.4.6 iterate in Loops
- 5.4.7 while Loops
- 5.4.8 for Loops
- 5.4.9 for i in n..m repeat
- 5.4.10 for i in n..m by s repeat
- 5.4.11 for i in n.. repeat
- 5.4.12 for x in l repeat
- 5.4.13 Such that Predicates
- 5.4.14 Parallel Iteration
- 5.4.15 Mixing Loop Modifiers
- 5.5 Creating Lists and Streams with Iterators
- 5.6 An Example: Streams of Primes
- 6.0 Functions, Macros and Rules
- 6.1 Functions vs. Macros
- 6.2 Macros
- 6.3 Introduction to Functions
- 6.4 Declaring the Type of Functions
- 6.5 One-Line Functions
- 6.6 Declared vs. Undeclared Functions
- 6.7 Functions vs. Operations
- 6.8 Delayed Assignments vs. Functions with No Arguments
- 6.9 How FriCAS Determines What Function to Use
- 6.10 Compiling vs. Interpreting
- 6.11 Piece-Wise Function Definitions
- 6.12 Caching Previously Computed Results
- 6.13 Recurrence Relations
- 6.14 Making Functions from Objects
- 6.15 Functions Defined with Blocks
- 6.16 Free and Local Variables
- 6.17 Anonymous Functions
- 6.18 Example: A Database
- 6.19 Example: A Famous Triangle
- 6.20 Example: Testing for Palindromes
- 6.21 Rules and Pattern Matching
- 7.0 Graphics
- 7.1 Two-Dimensional Graphics
- 7.1.1 Plotting Two-Dimensional Functions of One Variable
- 7.1.2 Plotting Two-Dimensional Parametric Plane Curves
- 7.1.3 Plotting Plane Algebraic Curves
- 7.1.4 Two-Dimensional Options
- 7.1.5 Color
- 7.1.6 Palette
- 7.1.7 Two-Dimensional Control-Panel
- 7.1.7.1 Transformations
- 7.1.7.2 Messages
- 7.1.7.3 Multiple Graphs
- 7.1.7.4 Buttons
- 7.1.8 Operations for Two-Dimensional Graphics
- 7.1.9 Addendum: Building Two-Dimensional Graphs
- 7.1.9.1 Creating a Two-Dimensional Viewport from a List of Points
- 7.1.9.2 Creating a Two-Dimensional Viewport of a List of Points from a File
- 7.1.10 Addendum: Appending a Graph to a Viewport Window Containing a Graph
- 7.2 Three-Dimensional Graphics
- 7.2.1 Plotting Three-Dimensional Functions of Two Variables
- 7.2.2 Plotting Three-Dimensional Parametric Space Curves
- 7.2.3 Plotting Three-Dimensional Parametric Surfaces
- 7.2.4 Three-Dimensional Options
- 7.2.5 The makeObject Command
- 7.2.6 Building Three-Dimensional Objects From Primitives
- 7.2.6.1 Cube Example
- 7.2.7 Coordinate System Transformations
- 7.2.8 Three-Dimensional Clipping
- 7.2.9 Three-Dimensional Control-Panel
- 7.2.9.1 Transformations
- 7.2.9.2 Messages
- 7.2.9.3 Colormap
- 7.2.9.4 Buttons
- 7.2.9.5 Light
- 7.2.9.6 View Volume
- 7.2.10 Operations for Three-Dimensional Graphics
- 7.2.11 Customization using .Xdefaults
- 8.0 Advanced Problem Solving
- 8.1 Numeric Functions
- 8.2 Polynomial Factorization
- 8.3 Manipulating Symbolic Roots of a Polynomial
- 8.4 Computation of Eigenvalues and Eigenvectors
- 8.5 Solution of Linear and Polynomial Equations
- 8.6 Limits
- 8.7 Laplace Transforms
- 8.8 Integration
- 8.9 Working with Power Series
- 8.9.1 Creation of Power Series
- 8.9.2 Coefficients of Power Series
- 8.9.3 Power Series Arithmetic
- 8.9.4 Functions on Power Series
- 8.9.5 Converting to Power Series
- 8.9.6 Power Series from Formulas
- 8.9.7 Substituting Numerical Values in Power Series
- 8.9.8 Example: Bernoulli Polynomials and Sums of Powers
- 8.10 Solution of Differential Equations
- 8.11 Finite Fields
- 8.12 Primary Decomposition of Ideals
- 8.13 Computation of Galois Groups
- 8.14 Non-Associative Algebras and Modelling Genetic Laws
- 9.1 AssociationList
- 9.2 BalancedBinaryTree
- 9.3 BasicOperator
- 9.4 BinaryExpansion
- 9.5 BinarySearchTree
- 9.6 CardinalNumber
- 9.7 CartesianTensor
- 9.8 Character
- 9.9 CharacterClass
- 9.10 CliffordAlgebra
- 9.11 Complex
- 9.12 ContinuedFraction
- 9.13 CycleIndicators
- 9.14 DeRhamComplex
- 9.15 DecimalExpansion
- 9.16 DistributedMultivariatePolynomial
- 9.17 DoubleFloat
- 9.18 EqTable
- 9.19 Equation
- 9.20 Exit
- 9.21 Expression
- 9.22 Factored
- 9.23 FactoredFunctions2
- 9.24 File
- 9.25 FileName
- 9.26 FlexibleArray
- 9.27 Float
- 9.28 Fraction
- 9.29 FullPartialFractionExpansion
- 9.30 GeneralSparseTable
- 9.31 GroebnerFactorizationPackage
- 9.32 Heap
- 9.33 HexadecimalExpansion
- 9.34 Integer
- 9.35 IntegerLinearDependence
- 9.36 IntegerNumberTheoryFunctions
- 9.37 Kernel
- 9.38 KeyedAccessFile
- 9.39 LexTriangularPackage
- 9.40 LazardSetSolvingPackage
- 9.41 Library
- 9.42 LieExponentials
- 9.43 LiePolynomial
- 9.44 LinearOrdinaryDifferentialOperator
- 9.45 LinearOrdinaryDifferentialOperator1
- 9.46 LinearOrdinaryDifferentialOperator2
- 9.47 List
- 9.48 LyndonWord
- 9.49 Magma
- 9.50 MakeFunction
- 9.51 MappingPackage1
- 9.52 Matrix
- 9.53 MultiSet
- 9.54 MultivariatePolynomial
- 9.55 None
- 9.56 Octonion
- 9.57 OneDimensionalArray
- 9.58 Operator
- 9.59 OrderedVariableList
- 9.60 OrderlyDifferentialPolynomial
- 9.61 PartialFraction
- 9.62 Permanent
- 9.63 Polynomial
- 9.64 Quaternion
- 9.65 RadixExpansion
- 9.66 RealClosure
- 9.67 RegularTriangularSet
- 9.68 RomanNumeral
- 9.69 Segment
- 9.70 SegmentBinding
- 9.71 Set
- 9.72 SingleInteger
- 9.73 SparseTable
- 9.74 SquareMatrix
- 9.75 SquareFreeRegularTriangularSet
- 9.76 Stream
- 9.77 String
- 9.78 StringTable
- 9.79 Symbol
- 9.80 Table
- 9.81 TextFile
- 9.82 TwoDimensionalArray
- 9.83 UnivariatePolynomial
- 9.84 UniversalSegment
- 9.85 Vector
- 9.86 Void
- 9.87 WuWenTsunTriangularSet
- 9.88 XPBWPolynomial
- 9.89 XPolynomial
- 9.90 XPolynomialRing
- 9.91 ZeroDimensionalSolvePackage
- 10.0 Interactive Programming
- 10.1 Drawing Ribbons Interactively
- 10.2 A Ribbon Program
- 10.3 Coloring and Positioning Ribbons
- 10.4 Points, Lines, and Curves
- 10.5 A Bouquet of Arrows
- 10.6 Diversion: When Things Go Wrong
- 10.7 Drawing Complex Vector Fields
- 10.8 Drawing Complex Functions
- 10.9 Functions Producing Functions
- 10.10 Automatic Newton Iteration Formulas
- 11.0 Packages
- 11.1 Names, Abbreviations, and File Structure
- 11.2 Syntax
- 11.3 Abstract Datatypes
- 11.4 Capsules
- 11.5 Input Files vs. Packages
- 11.6 Compiling Packages
- 11.7 Parameters
- 11.8 Conditionals
- 11.9 Testing
- 11.10 How Packages Work
- 12.0 Categories
- 12.1 Definitions
- 12.2 Exports
- 12.3 Documentation
- 12.4 Hierarchies
- 12.5 Membership
- 12.6 Defaults
- 12.7 FriCASs
- 12.8 Correctness
- 12.9 Attributes
- 12.10 Parameters
- 12.11 Conditionals
- 12.12 Anonymous Categories
- 13.0 Domains
- 13.1 Domains vs. Packages
- 13.2 Definitions
- 13.3 Category Assertions
- 13.4 A Demo
- 13.5 Browse
- 13.6 Representation
- 13.7 Multiple Representations
- 13.8 Add Domain
- 13.9 Defaults
- 13.10 Origins
- 13.11 Short Forms
- 13.12 Example 1: Clifford Algebra
- 13.13 Example 2: Building A Query Facility
- 14.0 Browse
- 14.1 The Front Page: Searching the Library
- 14.2 The Constructor Page
- 14.2.1 Constructor Page Buttons
- 14.2.1.1 Description
- 14.2.1.2 Operations
- 14.2.1.3 Attributes
- 14.2.1.4 Examples
- 14.2.1.5 Exports
- 14.2.1.6 Related Operations
- 14.2.2 Cross Reference
- 14.2.2.1 Parents
- 14.2.2.2 Ancestors
- 14.2.2.3 Relatives
- 14.2.2.4 Dependents
- 14.2.2.5 Lineage
- 14.2.2.6 Clients
- 14.2.2.7 Benefactors
- 14.2.2.8 Children
- 14.2.2.9 Descendants
- 14.2.2.10 Domains
- 14.2.3 Views Of Constructors
- 14.2.3.1 names
- 14.2.3.2 abbrs
- 14.2.3.3 kinds
- 14.2.3.4 files
- 14.2.3.5 parameters
- 14.2.3.6 filter
- 14.2.3.7 documentation
- 14.2.3.8 conditions
- 14.2.4 Giving Parameters to Constructors
- 14.3 Miscellaneous Features of Browse
- 14.3.1 The Description Page for Operations
- 14.3.1.1 Arguments
- 14.3.1.2 Returns
- 14.3.1.3 Origin
- 14.3.1.4 Conditions
- 14.3.1.5 Description
- 14.3.1.6 Where
- 14.3.2 Views of Operations
- 14.3.2.1 names
- 14.3.2.2 filter
- 14.3.2.3 documentation
- 14.3.2.4 signatures
- 14.3.2.5 parameters
- 14.3.2.6 origins
- 14.3.2.7 conditions
- 14.3.2.8 usage
- 14.3.2.9 implementation
- 14.3.2.10 generalize
- 14.3.2.11 all domains
- 14.3.3 Capitalization Convention
- 15.0 FriCAS Packages
- 15.1 Important Things to Read First
- 15.2 The New FriCAS Library Compiler
- 15.3 The NAG Library Link
- 15.3.1 Interpreting NAG Documentation
- 15.3.1.1 Correspondence Between Fortran and FriCAS types
- 15.3.1.2 Classification of NAG parameters
- 15.3.1.3 IFAIL
- 15.3.2 Using the Link
- 15.3.3 Providing values for Argument Subprograms
- 15.3.3.1 Providing ASPs via FortranExpression
- 15.3.3.2 Providing ASPs via FortranCode
- 15.3.3.3 Providing ASPs via FileName
- 15.3.4 General Fortran-generation utilities in FriCAS
- 15.3.4.1 Template Manipulation
- 15.3.4.2 Manipulating the Fortran Output Stream
- 15.3.4.3 Fortran Types
- 15.3.4.4 FortranScalarType
- 15.3.4.5 FortranType
- 15.3.4.6 SymbolTable
- 15.3.4.7 TheSymbolTable
- 15.3.4.8 Advanced Fortran Code Generation
- 15.3.4.9 Switch
- 15.3.4.10 FortranCode
- 15.3.4.11 FortranProgram
- 15.3.5 Some technical information
- 15.4 Interactive Front-end and Language
- 15.5 Library
- 15.6 HyperTex
- 15.7 Documentation
- 16.0 FriCAS System Commands
- 16.1 Introduction
- 16.2 )abbreviation
- 16.3 )boot
- 16.4 )cd
- 16.5 )close
- 16.6 )clear
- 16.7 )compile
- 16.8 )display
- 16.9 )edit
- 16.10 )fin
- 16.11 )frame
- 16.12 )help
- 16.13 )history
- 16.14 )library
- 16.15 )lisp
- 16.16 )load
- 16.17 )trace
- 16.18 )pquit
- 16.19 )quit
- 16.20 )read
- 16.21 )set
- 16.22 )show
- 16.23 )spool
- 16.24 )synonym
- 16.25 )system
- 16.26 )trace
- 16.27 )undo
- 16.28 )what
- 17.1 FriCAS Categories
- 18.1 FriCAS Domains
- 19.1 FriCAS Packages
- 21.0 Programs for AXIOM Images
- 21.1 images1.input
- 21.2 images2.input
- 21.3 images3.input
- 21.4 images5.input
- 21.5 images6.input
- 21.6 images7.input
- 21.7 images8.input
- 21.8 conformal.input
- 21.9 tknot.input
- 21.10 ntube.input
- 21.11 dhtri.input
- 21.12 tetra.input
- 21.13 antoine.input
- 21.14 scherk.input
- Index