/usr/lib/open-axiom/src/algebra/variable.spad is in open-axiom-source 1.4.1+svn~2626-2ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | --Copyright (C) 1991-2002, The Numerical Algorithms Group Ltd.
--All rights reserved.
--Copyright (C) 2007-2008, Gabriel Dos Reis.
--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.
)abbrev domain VARIABLE Variable
++ Description:
++ This domain implements variables
Variable(sym:Symbol): Join(SetCategory, CoercibleTo Symbol) with
coerce : % -> Symbol
++ coerce(x) returns the symbol
variable: () -> Symbol
++ variable() returns the symbol
== add
coerce(x:%):Symbol == sym
coerce(x:%):OutputForm == sym::OutputForm
variable() == sym
x = y == true
latex(x:%):String == latex sym
)abbrev domain RULECOLD RuleCalled
++ Description:
++ This domain implements named rules
RuleCalled(f:Symbol): SetCategory with
name: % -> Symbol
++ name(x) returns the symbol
== add
name r == f
coerce(r:%):OutputForm == f::OutputForm
x = y == true
latex(x:%):String == latex f
)abbrev domain FUNCTION FunctionCalled
++ Description:
++ This domain implements named functions
FunctionCalled(f:Symbol): SetCategory with
name: % -> Symbol
++ name(x) returns the symbol
== add
name r == f
coerce(r:%):OutputForm == f::OutputForm
x = y == true
latex(x:%):String == latex f
)abbrev domain OVAR OrderedVariableList
++ Description:
++ This domain implements ordered variables
OrderedVariableList(VariableList:List Symbol):
Join(OrderedFinite, ConvertibleTo Symbol, ConvertibleTo InputForm,
ConvertibleTo Pattern Float, ConvertibleTo Pattern Integer) with
variable: Symbol -> Union(%,"failed")
++ variable(s) returns a member of the variable set or failed
== add
VariableList := removeDuplicates VariableList
Rep := PositiveInteger
s1,s2:%
convert(s1):Symbol == VariableList.((s1::Rep)::PositiveInteger)
coerce(s1):OutputForm == (convert(s1)@Symbol)::OutputForm
convert(s1):InputForm == convert(convert(s1)@Symbol)
convert(s1):Pattern(Integer) == convert(convert(s1)@Symbol)
convert(s1):Pattern(Float) == convert(convert(s1)@Symbol)
index i == i::%
lookup j == j :: Rep
size () == #VariableList
variable(exp:Symbol) ==
for i in 1.. for exp2 in VariableList repeat
if exp=exp2 then return i::PositiveInteger::%
"failed"
s1 < s2 == s2 <$Rep s1
s1 = s2 == s1 =$Rep s2
latex(x:%):String == latex(convert(x)@Symbol)
)abbrev domain ANON AnonymousFunction
++ Date Last Modified: April 20, 2009
++ Description:
++ This domain implements anonymous functions
AnonymousFunction():SetCategory with
parameters: % -> List Identifier
++ parameters(f) returns the list of parameters bound by `f'.
body: % -> Syntax
++ body(f) returns the body of the unnamed function `f'.
== add
import Syntax
import %lsecond: % -> Syntax from Foreign Builtin
import %lthird: % -> Syntax from Foreign Builtin
coerce(x:%):OutputForm ==
x pretend OutputForm
parameters f ==
ps := %lsecond f
ps case Identifier => [ps]$List(Identifier)
getOperands(ps) pretend List(Identifier)
body f ==
%lthird f
|