Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: interval_bexpr.pvs   Sprache: PVS

Original von: PVS©

interval_bexpr : THEORY
BEGIN

  IMPORTING interval_expr,
            structures@Maybe,
     reals@RealInt

  bexpr : VAR BoolExpr
  vs    : VAR Env
  b     : VAR bool
  box   : VAR Box
  pox   : VAR ProperBox 
  n     : VAR nat

  b2B(b) : BoolExpr =
    BCONST(b)

  CONVERSIOn b2B

  REL(rel:RealOrder)(e1,e2:RealExpr) : MACRO BoolExpr = 
    BREL(rel,e1,e2)

  EQ(e1,e2:RealExpr) : MACRO BoolExpr =
   BAND(BREL(<=,e1,e2),BREL(>=,e1,e2))

  POS?(e:RealExpr) : MACRO BoolExpr =
    BREL(>,e,0)

  BINCLUDEX(op:RealExpr,opi:Interval) : MACRO BoolExpr =
    BINCLUDES(op,opi)

  BINCLUDEX(op:RealExpr,ri:RealInt) : MACRO BoolExpr =
    IF ri`bounded_below AND ri`bounded_above THEN
      BAND(BREL(IF ri`closed_below THEN <= ELSE < ENDIF,
                r2E(ri`lb),op),
           BREL(IF ri`closed_above THEN <= ELSE < ENDIF,
                op,r2E(ri`ub)))
    ELSIF ri`bounded_below THEN
       BREL(IF ri`closed_below THEN <= ELSE < ENDIF,
            r2E(ri`lb),op)
    ELSIF ri`bounded_above THEN
       BREL(IF ri`closed_above THEN <= ELSE < ENDIF,
            op,r2E(ri`ub))
    ELSE b2B(TRUE)
    ENDIF

  beval(bexpr,vs,n) : RECURSIVE bool =
    IF bconst?(bexpr) THEN opb(bexpr)
    ELSIF bnot?(bexpr) THEN  
      NOT beval(bop(bexpr),vs,n)   
    ELSIF band?(bexpr) THEN  
      beval(bop1(bexpr),vs,n) AND beval(bop2(bexpr),vs,n)
    ELSIF bor?(bexpr) THEN  
      beval(bop1(bexpr),vs,n) OR beval(bop2(bexpr),vs,n)
    ELSIF bimplies?(bexpr) THEN  
      beval(bop1(bexpr),vs,n) IMPLIES beval(bop2(bexpr),vs,n)
    ELSIF brel?(bexpr) THEN 
      rel(bexpr)(eval(op1(bexpr),vs,n),eval(op2(bexpr),vs,n)) 
    ELSIF bincludes?(bexpr) THEN
      eval(op(bexpr),vs,n) ## opi(bexpr) 
    ELSIF bletin?(bexpr) THEN
      IF realexpr?(blet(bexpr)) THEN
        LET blet = eval(blet(bexpr),vs,n) IN
          beval(bin(bexpr),vs WITH [`n := blet],n+1)
      ELSE
        LET blet = beval(blet(bexpr),vs,n) IN
          beval(bin(bexpr),vs WITH [`n := IF blet THEN 1 ELSE -1 ENDIF],n+1)
      ENDIF 
    ELSIF beval(bif(bexpr),vs,n) THEN 
      beval(bthen(bexpr),vs,n) 
    ELSE beval(belse(bexpr),vs,n)
    ENDIF
  MEASURE bexpr BY <<

  BEval(bexpr,box) : RECURSIVE Maybe[bool] =
    IF bconst?(bexpr) THEN 
      Some(opb(bexpr))
    ELSIF bnot?(bexpr) THEN
      LET bop = BEval(bop(bexpr),box) IN
      IF none?(bop) THEN None
      ELSE Some(NOT val(bop))
      ENDIF
    ELSIF band?(bexpr) THEN 
      LET bop1 = BEval(bop1(bexpr),box) IN
      IF none?(bop1) OR val(bop1) THEN
        LET bop2 = BEval(bop2(bexpr),box) IN
        IF some?(bop2) AND val(bop2) THEN bop1
        ELSE bop2
        ENDIF
      ELSE bop1
      ENDIF
    ELSIF bor?(bexpr) THEN  
      LET bop1 = BEval(bop1(bexpr),box) IN
      IF none?(bop1) OR NOT val(bop1) THEN
        LET bop2 = BEval(bop2(bexpr),box) IN
        IF some?(bop2) AND (val(bop2) OR some?(bop1)) THEN bop2
        ELSE None
        ENDIF
      ELSE bop1
      ENDIF
    ELSIF bimplies?(bexpr) THEN  
      LET bop1 = BEval(bop1(bexpr),box) IN
      IF none?(bop1) OR val(bop1) THEN
        LET bop2 = BEval(bop2(bexpr),box) IN
        IF some?(bop2) AND (val(bop2) OR some?(bop1)) THEN bop2
        ELSE None
        ENDIF
      ELSE Some(TRUE)
      ENDIF
    ELSIF brel?(bexpr) THEN 
      LET op1 = Eval(op1(bexpr),box) IN
      IF Proper?(op1) THEN
        LET op2 = Eval(op2(bexpr),box) IN
        IF Proper?(op2) THEN
          IF rel(bexpr)(0,1) THEN % Case <= or <
            IF rel(bexpr)(op1`ub,op2`lb) THEN Some(TRUE)
            ELSIF neg_rel(rel(bexpr))(op1`lb,op2`ub) THEN Some(FALSE)
            ELSE None
            ENDIF
          ELSIF rel(bexpr)(op1`lb,op2`ub) THEN Some(TRUE% Case >, >=
          ELSIF neg_rel(rel(bexpr))(op1`ub,op2`lb) THEN Some(FALSE)
          ELSE None
          ENDIF
        ELSE None
        ENDIF
      ELSE None
      ENDIF
    ELSIF bincludes?(bexpr) THEN
      LET op = Eval(op(bexpr),box) IN
      IF Proper?(op) THEN
        LET opi = opi(bexpr) IN
        IF Proper?(opi) THEN
          IF op << opi THEN Some(TRUE)
          ELSIF opi`ub < op`lb OR op`ub < opi`lb THEN Some(FALSE)
          ELSE None
          ENDIF
        ELSE 
          None
        ENDIF
      ELSE
        None
      ENDIF
    ELSIF bletin?(bexpr) THEN
      IF realexpr?(blet(bexpr)) THEN
        LET blet = Eval(blet(bexpr),box) IN
        IF Proper?(blet) THEN
          BEval(bin(bexpr),append(box,(: blet :)))
        ELSE None 
        ENDIF
      ELSE
        LET blet = BEval(blet(bexpr),box) IN
        BEval(bin(bexpr),
              append(box,(: IF none?(blet) THEN [|-1,1|] 
                            ELSIF val(blet) THEN [|1/2,1|]
                            ELSE [|-1,-1/2|] ENDIF :)))
      ENDIF 
    ELSE 
      LET bif = BEval(bif(bexpr),box) IN
      IF some?(bif) AND val(bif) THEN
        BEval(bthen(bexpr),box)
      ELSIF some?(bif) AND NOT val(bif) THEN
        BEval(belse(bexpr),box)
      ELSE 
        LET bt = BEval(bthen(bexpr),box) IN
        IF some?(bt) THEN
          LET be = BEval(belse(bexpr),box) IN
            IF some?(be) AND val(bt)=val(be) THEN bt
            ELSE None
            ENDIF
          ELSE None
        ENDIF
      ENDIF
    ENDIF
  MEASURE bexpr BY <<

  BEval_inclusion : THEOREM
    FORALL (box:Box,vs:(vars_in_box?(box)),bexpr) :
      LET be = BEval(bexpr,box) IN
      some?(be) IMPLIES
        val(be) = beval(bexpr,vs,length(box)) 

  BEval_inclusion_Proper : THEOREM
    LET be = BEval(bexpr,pox) IN
    some?(be) IMPLIES
      val(be) = FORALL(vs:(vars_in_box?(pox))): beval(bexpr,vs,length(pox)) 

  BEval_fundamental : THEOREM
    Inclusion?(pox,box) IMPLIES
      LET beb = BEval(bexpr,box),
          bep = BEval(bexpr,pox) IN
      some?(beb) IMPLIES 
      some?(bep) AND val(bep) = val(beb)

END interval_bexpr

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

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.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik