v : VAR nat
maxdepth : VAR nat
dir,
eamd : VAR bool
expr : VAR BoolExpr
box : VAR ProperBox
dirvar : VAR DirVar
dirvars : VAR DirVarStack
M,M1,M2 : VAR IntervalOutput
out : VAR Output
select : VAR DirVarSelector
acc : VAR IntervalOutput
evaluate(box,expr) : IntervalOutput = LET bet = BEval(expr,box),
bef = IF none?(bet) THEN LET bm = BEval(expr,Midbox(box)) IN IF some?(bm) ANDNOT val(bm) THEN bm ELSE bet ENDIF ELSE bet ENDIFIN
(#
answer := bef,
counterex := IF some?(bef) ANDNOT val(bef) THEN
map(LAMBDA(i:Interval):midpoint(i))(box) ELSE null ENDIF
#)
combine(v,M1,M2) : IntervalOutput = (#
answer := IF (some?(M1`answer) ANDNOT val(M1`answer)) OR
(some?(M2`answer) ANDNOT val(M2`answer)) THEN
Some(FALSE) ELSIF some?(M1`answer) AND some?(M2`answer) THEN
Some(TRUE) ELSE None ENDIF,
counterex := IF cons?(M1`counterex) THEN M1`counterex ELSE M2`counterex ENDIF
#)
prune_chk(dirvars,acc,M) : bool = FALSE
% Exit when true or false
le_chk(M) : bool = some?(M`answer)
%% eamd (exit at maxdepth) must be set to false when looking for a countexample
ge_chk(eamd,maxdepth)(dirvars,acc,M) : bool =
(eamd AND length(dirvars) >= maxdepth) OR
some?(M`answer) ANDNOT val(M`answer)
max_rec(n:posnat,m:real,v:below(n),
i:subrange(1,n),b:Box | n = length(b)+i) : RECURSIVE below(n) = IF null?(b) THEN v ELSELET mm = size(car(b)) IN IF mm > m THEN max_rec(n,mm,i,i+1,cdr(b)) ELSE max_rec(n,m,v,i+1,cdr(b)) ENDIF ENDIF MEASURE b BY <<
max_aux(box) : nat = IF length(box) <= 1 THEN 0 ELSE max_rec(length(box),size(car(box)),0,1,cdr(box)) ENDIF
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.