aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/pages/numbers.ht
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/pages/numbers.ht
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/hyper/pages/numbers.ht')
-rw-r--r--src/hyper/pages/numbers.ht321
1 files changed, 321 insertions, 0 deletions
diff --git a/src/hyper/pages/numbers.ht b/src/hyper/pages/numbers.ht
new file mode 100644
index 00000000..ea0a8b55
--- /dev/null
+++ b/src/hyper/pages/numbers.ht
@@ -0,0 +1,321 @@
+% Copyright The Numerical Algorithms Group Limited 1991, 1992, 1993
+% Certain derivative-work portions Copyright (C) 1988 by Leslie Lamport.
+% All rights reserved
+
+% Number page
+
+%-------------------------------------------------------------------------
+\begin{page}{NumberPage}{\Language{} Number Types}
+%-------------------------------------------------------------------------
+\beginscroll
+The following types of numbers are among those available in \Language{}.
+\beginmenu
+
+\menulink{Integers}{IntegerPage}\tab{16}
+Arithmetic with arbitrarily large integers.
+
+\menulink{Fractions}{FractionPage} \tab{16}
+Rational numbers and general fractions.
+
+\menulink{Machine Floats}{DoubleFloatXmpPage} \tab{16}
+Fixed precision machine floating-point.
+
+\menulink{Real Numbers}{FloatXmpPage} \tab{16}
+Arbitrary precision decimal arithmetic.
+
+\menulink{Complex Numbers}{ComplexXmpPage} \tab{16}
+Complex numbers in general.
+
+\menulink{Finite Fields}{ugProblemFinitePage} \tab{16}
+Arithmetic in characteristic \spad{p}.
+\endmenu
+\horizontalline\newline
+Additional Topics
+\beginmenu
+
+\menulink{Numeric Functions}{ugProblemNumericPage}
+\menulink{Cardinal Numbers}{CardinalNumberXmpPage}
+\menulink{Machine-sized Integers}{SingleIntegerXmpPage}
+\menulink{Roman Numerals}{RomanNumeralXmpPage}
+\menulink{Continued Fractions}{ContinuedFractionXmpPage}
+\menulink{Partial Fractions}{PartialFractionXmpPage}
+\menulink{Quaternions}{QuaternionXmpPage}
+\menulink{Octonions}{OctonionXmpPage}
+\menulink{Repeating Decimals}{DecimalExpansionXmpPage}
+\menulink{Repeating Binary Expansions}{BinaryExpansionXmpPage}
+\menulink{Repeating Hexadecimal Expansions}{HexadecimalExpansionXmpPage}
+\menulink{Expansions in other Bases}{RadixExpansionXmpPage}
+
+%\menulink{p-adic Numbers}{PAdicPage}
+%\menulink{Algebraic Numbers}{AlgebraicNumberPage}
+\endmenu
+
+\endscroll
+\autobuttons
+\end{page}
+
+% Fraction Page
+
+%-------------------------------------------------------------------------
+\begin{page}{FractionPage}{Fractions}
+%-------------------------------------------------------------------------
+
+\beginscroll
+\Language{} handles fractions in many different contexts
+and will automatically simplify fractions whenever possible.
+Here are some examples:
+\spadpaste{1/4 - 1/5}
+\spadpaste{f := (x**2 + 1)/(x - 1) \bound{f}}
+\spadpaste{g := (x**2 - 3*x + 2)/(x + 2) \bound{g}}
+\spadpaste{f * g \free{f g}}
+\endscroll
+Additional Topics:
+\beginmenu
+
+\menulink{Rational Numbers}{RationalNumberPage} \tab{18}
+Quotients of integers
+
+\menulink{Quotient Fields}{FractionXmpPage} \tab{18}
+Quotients over an arbitrary integral domain
+
+%\menulink{Localizations}{LocalizationPage} \tab{18}
+%Fractions in the most general setting
+\endmenu
+\autobuttons
+\end{page}
+
+%-------------------------------------------------------------------------
+\begin{page}{RationalNumberPage}{Rational Numbers}
+%-------------------------------------------------------------------------
+\beginscroll
+Like integers, rational numbers can be arbitrarily large.
+For example:
+\spadpaste{61657 ** 10 / 999983 ** 12}
+Rational numbers will not be converted to decimals unless you explicitly
+ask \Language{} to do so.
+To convert a rational number to a decimal, use the function
+\spadfun{numeric}.
+Here's an example:
+\spadpaste{x := 104348/33215 \bound{x}}
+\spadpaste{numeric x \free{x}}
+You can find the numerator and denominator of rational numbers using
+the functions \spadfun{numer} and \spadfun{denom}, respectively.
+\spadpaste{numer(x) \free{x}}
+\spadpaste{denom(x) \free{x}}
+To factor the numerator and denominator of a fraction, use the following
+command:
+\spadpaste{factor(numer x) / factor(denom x) \free{x}}
+\endscroll
+\autobuttons
+\end{page}
+
+%\begin{page}{LocalizationPage}{Localizations}
+%\beginscroll
+%\endscroll
+%\autobuttons
+
+% Algebraic Number Page
+
+%\begin{page}{AlgebraicNumberPage}{Algebraic Numbers}
+%\beginscroll
+%\endscroll
+%\autobuttons
+
+% p-adic Number Page
+
+%\begin{page}{PAdicPage}{p-adic Numbers}
+%\beginscroll
+%\endscroll
+%\autobuttons
+
+% Integer Page
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerPage}{Integers}
+%-------------------------------------------------------------------------
+
+\beginscroll
+In \Language{}, integers can be as large as you like.
+Try the following examples:
+\spadpaste{x := factorial(200) \bound{x}}
+\spadpaste{y := 2**90 - 1 \bound{y}}
+Of course, you can now do arithmetic as usual on these (very)
+large integers:
+\spadpaste{x + y \free{x y}}
+\spadpaste{x - y \free{x y}}
+\spadpaste{x * y \free{x y}}
+\Language{} can factor integers, but numbers with small prime factors
+\spadpaste{factor(x) \free{x}}
+will factor more rapidly than numbers with large prime factors.
+\spadpaste{factor(y) \free{y}}
+\horizontalline
+Additional Topics
+\beginmenu
+
+\menulink{General Info}{IntegerXmpPage} \tab{16}
+General information and examples of integers.
+
+\menulink{Factorization}{ugxIntegerPrimesPage} \tab{16}
+Primes and factorization.
+
+\menulink{Functions}{IntegerNumberTheoryFunctionsXmpPage} \tab{16}
+Number theoretic functions.
+
+\menulink{Examples}{IntegerExamplePage} \tab{16}
+Examples from number theory.
+
+\menulink{Problems}{IntegerProblemPage} \tab{16}
+Problems from number theory.
+
+\endmenu
+\endscroll
+\autobuttons
+\end{page}
+
+%\begin{page}{IntegerFactorizationPage}{Factorization of Integers}
+%\beginscroll
+%\endscroll
+%\autobuttons
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerExamplePage}{Examples}
+%-------------------------------------------------------------------------
+\beginscroll
+One can show that if an integer of the form 2**k + 1 is prime, then
+k must be a power of 2.
+\downlink{Proof}{IntegerExampleProofPage}
+\par
+Pierre Fermat conjectured that every integer of the forn 2**(2**n) + 1
+is prime.
+Let's look for a counterexample.
+First define a function:
+\spadpaste{f: NNI -> INT \bound{f1}}
+\spadpaste{f(n) == 2**(2**n) + 1 \bound{f} \free{f1}}
+Now try commands like:
+\spadpaste{factor f(1) \free{f}}
+\spadpaste{factor f(2) \free{f}}
+until you find an integer of this form which is composite.
+You can also try the following command:
+\spadpaste{for n in 1..6 repeat output factor f(n) \free{f}}
+Obviously, Fermat didn't have access to \Language{}!
+\endscroll
+\autobuttons
+\end{page}
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerExampleProofPage}{Proof}
+%-------------------------------------------------------------------------
+
+\beginscroll
+Proposition. If 2**k + 1 is prime, then k is a power of 2.
+\newline
+Proof. Suppose that k = m * n with m > 1 odd. Then
+%
+\centerline{2**n = -1 (mod (2**n + 1))}
+\centerline{2**(n * m) = (-1)**m = -1 (mod (2**n + 1))}
+\centerline{2**k + 1 = 0 (mod (2**n + 1))}
+%
+Therefore, 2**k + 1 is divisible by 2**n + 1.
+Now 1 < 2**n + 1 and since m > 1, 2**n + 1 < 2**k + 1.
+Hence, 2**k + 1 has a non-trivial factor.
+\newline
+QED
+\endscroll
+\autobuttons
+\end{page}
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerProblemPage}{Problems}
+%-------------------------------------------------------------------------
+
+\beginscroll
+One can show that if an integer of the form 2**k - 1 is prime, then
+k must be prime.
+\downlink{Proof}{IntegerProblemProofPage}
+\newline
+Problem \#1: Find the smallest prime p such that \spad{2**p - 1} is not prime.
+\downlink{Answer}{IntegerProblemAnswerPage1}
+\newline
+Problem \#2: Find the smallest positive integer \spad{n} such that
+\spad{n**2 - n + 41} isn't prime.
+\downlink{Answer}{IntegerProblemAnswerPage2}
+\endscroll
+\autobuttons
+\end{page}
+
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerProblemProofPage}{Proof}
+%-------------------------------------------------------------------------
+\beginscroll
+Proposition. If \spad{2**k - 1} is prime, then \spad{k} is prime.
+\newline
+Proof. Suppose that k = m * n is a non-trivial factorization.
+Then
+%
+\centerline{2**m = 1 (mod (2**m - 1))}
+\centerline{2**(m * n) = 1 (mod (2**m - 1))}
+\newline
+and 2**m - 1 is a non-trivial factor of 2**k - 1.
+\newline
+QED
+\endscroll
+\autobuttons
+\end{page}
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerProblemAnswerPage1}{Solution to Problem \#1}
+%-------------------------------------------------------------------------
+\beginscroll
+Problem \#1: Find the smallest prime p such that \spad{2**p - 1}
+is not prime.
+\newline
+First, define a function:
+\spadpaste{f: NNI -> INT \bound{f1}}
+\spadpaste{f(n) == 2**n - 1 \bound{f} \free{f1}}
+You can try factoring f(p) as p ranges through the set of primes.
+For example,
+\spadpaste{factor f(7) \free{f}}
+This gets tedious after a while, so let's use \Language{}'s stream
+facility. (A stream is essentially an infinite sequence.)
+\newline
+First, we create a stream consisting of the positive integers:
+\spadpaste{ints := [n for n in 1..] \bound{ints}}
+Now, we create a stream consisting of the primes:
+\spadpaste{primes := [x for x in ints | prime? x] \bound{primes} \free{ints}}
+Here's the 25th prime:
+\spadpaste{primes.25 \free{primes}}
+Next, create the stream of numbers of the form 2**p - 1 with p prime:
+\spadpaste{numbers := [f(n) for n in primes] \bound{numbers} \free{primes f}}
+Finally, form
+the stream of factorizations of the elements of \spad{numbers}:
+\spadpaste{factors := [factor n for n in numbers] \bound{factors} \free{numbers}}
+You can see that the fifth number in the stream (2047 = 23*89)
+is the first one that has a non-trivial factorization.
+Since 2**11 = 2048, the solution to the problem is 11.
+\newline
+Here's another way to see that 2047 is the first number in the stream that
+is composite:
+\spadpaste{nums := [x for x in numbers | not prime? x] \bound{nums} \free{numbers}}
+\endscroll
+\autobuttons
+\end{page}
+
+%-------------------------------------------------------------------------
+\begin{page}{IntegerProblemAnswerPage2}{Solution to Problem \#2}
+%-------------------------------------------------------------------------
+\beginscroll
+Problem \#2: Find the smallest positive integer n such that
+\spad{n**2 - n + 41} is not prime.
+\newline
+When n = 41, n**2 - n + 41 = 41**2, which certainly isn't prime.
+Let's see if any smaller integer works.
+Here are the first 40 values:
+\spadpaste{numbers := [n**2 - n + 41 for n in 0..40] \bound{numbers}}
+Now have \Language{} factor the numbers on this list:
+\spadpaste{[factor n for n in numbers] \free{numbers}}
+You can see that 41 is the smallest positive integer n such that
+n**n - n + 41 is not prime.
+\endscroll
+\autobuttons
+\end{page}