SplittingTree(V, C)
newdata.spad line 295
[edit on github]
This domain exports a modest implementation of splitting trees. Splitting trees are needed when the evaluation of some quantity under some hypothesis requires to split the hypothesis into sub-cases. For instance by adding some new hypothesis on one hand and its negation on another hand. The computations are terminated for a splitting tree a
when status(value(a))
is true
. Thus, if for the splitting tree a
the flag status(value(a))
is true
, then status(value(d))
is true
for any subtree d
of a
. This property of splitting trees is called the termination condition. If no vertex in a splitting tree a
is equal to another, a
is said to satisfy the no-duplicates condition. The splitting tree a
will satisfy this condition if nodes are added to a
by means of splitNodeOf!
and if construct
is only used to create the root of a
with no children.
- # : % -> NonNegativeInteger
- from Aggregate
- = : (%, %) -> Boolean
- from BasicType
- any? : (Mapping(Boolean, SplittingNode(V, C)), %) -> Boolean
- from HomogeneousAggregate(SplittingNode(V, C))
- child? : (%, %) -> Boolean
- from RecursiveAggregate(SplittingNode(V, C))
- children : % -> List(%)
- from RecursiveAggregate(SplittingNode(V, C))
- coerce : % -> OutputForm
- from CoercibleTo(OutputForm)
- conditions : % -> List(C)
conditions(a)
returns the list of the conditions of the leaves of a
- construct : (V, C, V, List(C)) -> %
construct(v1, t, v2, lt)
creates a splitting tree with value (i.e. root vertex) given by [v, t]$S
and with children list given by [[[v, t]$S]$% for s in ls]
.
- construct : (V, C, List(%)) -> %
construct(v, t, la)
creates a splitting tree with value (i.e. root vertex) given by [v, t]$S
and with la
as children list.
- construct : (V, C, List(SplittingNode(V, C))) -> %
construct(v, t, ls)
creates a splitting tree with value (i.e. root vertex) given by [v, t]$S
and with children list given by [[s]$% for s in ls]
.
- construct : SplittingNode(V, C) -> %
construct(s)
creates a splitting tree with value (i.e. root vertex) given by s
and no children. Thus, if the status of s
is false
, [s]
represents the starting point of the evaluation value(s)
under the hypothesis condition(s)
.
- copy : % -> %
- from Aggregate
- count : (Mapping(Boolean, SplittingNode(V, C)), %) -> NonNegativeInteger
- from HomogeneousAggregate(SplittingNode(V, C))
- count : (SplittingNode(V, C), %) -> NonNegativeInteger
- from HomogeneousAggregate(SplittingNode(V, C))
- cyclic? : % -> Boolean
- from RecursiveAggregate(SplittingNode(V, C))
- distance : (%, %) -> Integer
- from RecursiveAggregate(SplittingNode(V, C))
- elt : (%, "value") -> SplittingNode(V, C)
- from RecursiveAggregate(SplittingNode(V, C))
- empty : () -> %
- from Aggregate
- empty? : % -> Boolean
- from Aggregate
- eq? : (%, %) -> Boolean
- from Aggregate
- eval : (%, Equation(SplittingNode(V, C))) -> % if SplittingNode(V, C) has Evalable(SplittingNode(V, C))
- from Evalable(SplittingNode(V, C))
- eval : (%, List(Equation(SplittingNode(V, C)))) -> % if SplittingNode(V, C) has Evalable(SplittingNode(V, C))
- from Evalable(SplittingNode(V, C))
- eval : (%, List(SplittingNode(V, C)), List(SplittingNode(V, C))) -> % if SplittingNode(V, C) has Evalable(SplittingNode(V, C))
- from InnerEvalable(SplittingNode(V, C), SplittingNode(V, C))
- eval : (%, SplittingNode(V, C), SplittingNode(V, C)) -> % if SplittingNode(V, C) has Evalable(SplittingNode(V, C))
- from InnerEvalable(SplittingNode(V, C), SplittingNode(V, C))
- every? : (Mapping(Boolean, SplittingNode(V, C)), %) -> Boolean
- from HomogeneousAggregate(SplittingNode(V, C))
- extractSplittingLeaf : % -> Union(%, "failed")
extractSplittingLeaf(a)
returns the left most leaf (as a tree) whose status is false
if any, else "failed" is returned.
- latex : % -> String
- from SetCategory
- leaf? : % -> Boolean
- from RecursiveAggregate(SplittingNode(V, C))
- leaves : % -> List(SplittingNode(V, C))
- from RecursiveAggregate(SplittingNode(V, C))
- less? : (%, NonNegativeInteger) -> Boolean
- from Aggregate
- map : (Mapping(SplittingNode(V, C), SplittingNode(V, C)), %) -> %
- from HomogeneousAggregate(SplittingNode(V, C))
- map! : (Mapping(SplittingNode(V, C), SplittingNode(V, C)), %) -> %
- from HomogeneousAggregate(SplittingNode(V, C))
- max : % -> SplittingNode(V, C) if SplittingNode(V, C) has OrderedSet
- from HomogeneousAggregate(SplittingNode(V, C))
- max : (Mapping(Boolean, SplittingNode(V, C), SplittingNode(V, C)), %) -> SplittingNode(V, C)
- from HomogeneousAggregate(SplittingNode(V, C))
- member? : (SplittingNode(V, C), %) -> Boolean
- from HomogeneousAggregate(SplittingNode(V, C))
- members : % -> List(SplittingNode(V, C))
- from HomogeneousAggregate(SplittingNode(V, C))
- min : % -> SplittingNode(V, C) if SplittingNode(V, C) has OrderedSet
- from HomogeneousAggregate(SplittingNode(V, C))
- more? : (%, NonNegativeInteger) -> Boolean
- from Aggregate
- node? : (%, %) -> Boolean
- from RecursiveAggregate(SplittingNode(V, C))
- nodeOf? : (SplittingNode(V, C), %) -> Boolean
nodeOf?(s, a)
returns true
iff some node of a
is equal to s
- nodes : % -> List(%)
- from RecursiveAggregate(SplittingNode(V, C))
- parts : % -> List(SplittingNode(V, C))
- from HomogeneousAggregate(SplittingNode(V, C))
- remove : (SplittingNode(V, C), %) -> %
remove(s, a)
returns the splitting tree obtained from a by removing every sub-tree b
such that value(b)
and s
have the same value, condition and status.
- remove! : (SplittingNode(V, C), %) -> %
remove!(s, a)
replaces a by remove(s
, a)
- result : % -> List(Record(val : V, tower : C))
result(a)
where ls
is the leaves list of a
returns [[value(s), condition(s)]$VT for s in ls]
if the computations are terminated in a
else an error is produced.
- sample : () -> %
- from Aggregate
- setchildren! : (%, List(%)) -> %
- from RecursiveAggregate(SplittingNode(V, C))
- setelt! : (%, "value", SplittingNode(V, C)) -> SplittingNode(V, C)
- from RecursiveAggregate(SplittingNode(V, C))
- setvalue! : (%, SplittingNode(V, C)) -> SplittingNode(V, C)
- from RecursiveAggregate(SplittingNode(V, C))
- size? : (%, NonNegativeInteger) -> Boolean
- from Aggregate
- splitNodeOf! : (%, %, List(SplittingNode(V, C))) -> %
splitNodeOf!(l, a, ls)
returns a
where the children list of l
has been set to [[s]$% for s in ls | not nodeOf?(s, a)]
. Thus, if l
is not a node of a
, this latter splitting tree is unchanged.
- splitNodeOf! : (%, %, List(SplittingNode(V, C)), Mapping(Boolean, C, C)) -> %
splitNodeOf!(l, a, ls, sub?)
returns a
where the children list of l
has been set to [[s]$% for s in ls | not subNodeOf?(s, a, sub?)]
. Thus, if l
is not a node of a
, this latter splitting tree is unchanged.
- subNodeOf? : (SplittingNode(V, C), %, Mapping(Boolean, C, C)) -> Boolean
subNodeOf?(s, a, sub?)
returns true
iff for some node n
in a
we have s = n
or status(n)
and subNode?(s, n, sub?)
.
- updateStatus! : % -> %
updateStatus!(a)
returns a where the status of the vertices are updated to satisfy the "termination condition".
- value : % -> SplittingNode(V, C)
- from RecursiveAggregate(SplittingNode(V, C))
- ~= : (%, %) -> Boolean
- from BasicType
Evalable(SplittingNode(V, C))
RecursiveAggregate(SplittingNode(V, C))
BasicType
InnerEvalable(SplittingNode(V, C), SplittingNode(V, C))
shallowlyMutable
SetCategory
finiteAggregate
HomogeneousAggregate(SplittingNode(V, C))
CoercibleTo(OutputForm)
Aggregate