diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/moebius.spad.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/algebra/moebius.spad.pamphlet')
-rw-r--r-- | src/algebra/moebius.spad.pamphlet | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/algebra/moebius.spad.pamphlet b/src/algebra/moebius.spad.pamphlet new file mode 100644 index 00000000..2185b426 --- /dev/null +++ b/src/algebra/moebius.spad.pamphlet @@ -0,0 +1,154 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/algebra moebius.spad} +\author{Stephen M. Watt} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{domain MOEBIUS MoebiusTransform} +<<domain MOEBIUS MoebiusTransform>>= +)abbrev domain MOEBIUS MoebiusTransform +++ 2-by-2 matrices acting on P1(F). +++ Author: Stephen "Say" Watt +++ Date Created: January 1987 +++ Date Last Updated: 11 April 1990 +++ Keywords: +++ Examples: +++ References: +MoebiusTransform(F): Exports == Implementation where + ++ MoebiusTransform(F) is the domain of fractional linear (Moebius) + ++ transformations over F. + F : Field + OUT ==> OutputForm + P1F ==> OnePointCompletion F -- projective 1-space over F + + Exports ==> Group with + + moebius: (F,F,F,F) -> % + ++ moebius(a,b,c,d) returns \spad{matrix [[a,b],[c,d]]}. + shift: F -> % + ++ shift(k) returns \spad{matrix [[1,k],[0,1]]} representing the map + ++ \spad{x -> x + k}. + scale: F -> % + ++ scale(k) returns \spad{matrix [[k,0],[0,1]]} representing the map + ++ \spad{x -> k * x}. + recip: () -> % + ++ recip() returns \spad{matrix [[0,1],[1,0]]} representing the map + ++ \spad{x -> 1 / x}. + shift: (%,F) -> % + ++ shift(m,h) returns \spad{shift(h) * m} + ++ (see \spadfunFrom{shift}{MoebiusTransform}). + scale: (%,F) -> % + ++ scale(m,h) returns \spad{scale(h) * m} + ++ (see \spadfunFrom{shift}{MoebiusTransform}). + recip: % -> % + ++ recip(m) = recip() * m + eval: (%,F) -> F + ++ eval(m,x) returns \spad{(a*x + b)/(c*x + d)} + ++ where \spad{m = moebius(a,b,c,d)} + ++ (see \spadfunFrom{moebius}{MoebiusTransform}). + eval: (%,P1F) -> P1F + ++ eval(m,x) returns \spad{(a*x + b)/(c*x + d)} + ++ where \spad{m = moebius(a,b,c,d)} + ++ (see \spadfunFrom{moebius}{MoebiusTransform}). + + Implementation ==> add + + Rep := Record(a: F,b: F,c: F,d: F) + + moebius(aa,bb,cc,dd) == [aa,bb,cc,dd] + + a(t:%):F == t.a + b(t:%):F == t.b + c(t:%):F == t.c + d(t:%):F == t.d + + 1 == moebius(1,0,0,1) + t * s == + moebius(b(t)*c(s) + a(t)*a(s), b(t)*d(s) + a(t)*b(s), _ + d(t)*c(s) + c(t)*a(s), d(t)*d(s) + c(t)*b(s)) + inv t == moebius(d(t),-b(t),-c(t),a(t)) + + shift f == moebius(1,f,0,1) + scale f == moebius(f,0,0,1) + recip() == moebius(0,1,1,0) + + shift(t,f) == moebius(a(t) + f*c(t), b(t) + f*d(t), c(t), d(t)) + scale(t,f) == moebius(f*a(t),f*b(t),c(t),d(t)) + recip t == moebius(c(t),d(t),a(t),b(t)) + + eval(t:%,f:F) == (a(t)*f + b(t))/(c(t)*f + d(t)) + eval(t:%,f:P1F) == + (ff := retractIfCan(f)@Union(F,"failed")) case "failed" => + (a(t)/c(t)) :: P1F + zero?(den := c(t) * (fff := ff :: F) + d(t)) => infinity() + ((a(t) * fff + b(t))/den) :: P1F + + coerce t == + var := "%x" :: OUT + num := (a(t) :: OUT) * var + (b(t) :: OUT) + den := (c(t) :: OUT) * var + (d(t) :: OUT) + rarrow(var,num/den) + + proportional?: (List F,List F) -> Boolean + proportional?(list1,list2) == + empty? list1 => empty? list2 + empty? list2 => false + zero? (x1 := first list1) => + (zero? first list2) and proportional?(rest list1,rest list2) + zero? (x2 := first list2) => false + map(#1 / x1,list1) = map(#1 / x2,list2) + + t = s == + list1 : List F := [a(t),b(t),c(t),d(t)] + list2 : List F := [a(s),b(s),c(s),d(s)] + proportional?(list1,list2) + +@ +\section{License} +<<license>>= +--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +--All rights reserved. +-- +--Redistribution and use in source and binary forms, with or without +--modification, are permitted provided that the following conditions are +--met: +-- +-- - Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- +-- - Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in +-- the documentation and/or other materials provided with the +-- distribution. +-- +-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the +-- names of its contributors may be used to endorse or promote products +-- derived from this software without specific prior written permission. +-- +--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@ +<<*>>= +<<license>> + +<<domain MOEBIUS MoebiusTransform>> +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |