products/sources/formale sprachen/PVS/interval_arith image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: interval_expr.pvs   Sprache: PVS

Original von: PVS©

interval_expr : THEORY
BEGIN

  IMPORTING IntervalExpr,
            box,
     structures@more_list_props

  v,n  : VAR nat
  vs   : VAR Env
  box  : VAR Box
  pox,
  qox  : VAR ProperBox

  r2E(r:real) : RealExpr =
    CONST(LAMBDA(u:Unit):r,[| r |])

  I2E(X:ProperInterval) : RealExpr =
    CONST(LAMBDA(u:Unit):midpoint(X),X)

  PreTrue : (Precondition?) = LAMBDA (X:Interval) : true

  CONVERSION r2E
  CONVERSION I2E

  X(v:nat): RealExpr = VARIDX(v)

  realexpr?(expr:IntervalExpr) : bool =
    const?(expr) OR varidx?(expr) OR
    add?(expr) OR abs?(expr) OR
    neg?(expr) OR sub?(expr) OR
    mult?(expr) OR sq?(expr) OR
    pow?(expr) OR div?(expr) OR
    fun?(expr) OR letin?(expr)

  boolexpr?(expr:IntervalExpr) : bool =
    bconst?(expr) OR bnot?(expr) OR
    band?(expr) OR bor?(expr) OR
    bimplies?(expr) OR brel?(expr) OR
    bincludes?(expr) OR bite?(expr) OR
    bletin?(expr)

   real_bool_expr : LEMMA
     FORALL (expr:IntervalExpr):
       realexpr?(expr) OR boolexpr?(expr) 

  expr : VAR RealExpr

  eval(expr,vs,n) : RECURSIVE real =
    IF const?(expr) THEN opc(expr)(unit)
    ELSIF varidx?(expr) THEN 
       vs(varidx(expr))
    ELSIF add?(expr) THEN
      eval(op1(expr),vs,n)+eval(op2(expr),vs,n)
    ELSIF abs?(expr) THEN
      abs(eval(op(expr),vs,n))
    ELSIF neg?(expr) THEN
      -eval(op(expr),vs,n)
    ELSIF sub?(expr) THEN
      eval(op1(expr),vs,n)-eval(op2(expr),vs,n)
    ELSIF mult?(expr) THEN
      eval(op1(expr),vs,n)*eval(op2(expr),vs,n)
    ELSIF sq?(expr) THEN
      sq(eval(op(expr),vs,n))
    ELSIF pow?(expr) THEN
      eval(op(expr),vs,n)^opn(expr)
    ELSIF div?(expr) THEN
      LET d = eval(op2(expr),vs,n) IN
      IF d = 0 THEN 0 
      ELSE 
        eval(op1(expr),vs,n)/eval(op2(expr),vs,n)
      ENDIF
    ELSIF fun?(expr) THEN 
      opf(expr)(eval(op(expr),vs,n))
    ELSE
      LET rlet = eval(rlet(expr),vs,n) IN
        eval(rin(expr),vs WITH [`n := rlet],n+1)
    ENDIF
  MEASURE expr BY <<

  Eval(expr,box) : RECURSIVE Interval =
    IF const?(expr) THEN opC(expr)
    ELSIF varidx?(expr) THEN 
      IF varidx(expr) >= length(box) THEN EmptyInterval
      ELSE nth(box,varidx(expr))
      ENDIF
    ELSIF add?(expr) THEN
      LET op1 = Eval(op1(expr),box) IN
      IF Proper?(op1) THEN
        LET op2 = Eval(op2(expr),box) IN
        IF Proper?(op2) THEN Add(op1,op2) ELSE EmptyInterval ENDIF
      ELSE EmptyInterval
      ENDIF
    ELSIF abs?(expr) THEN
      LET op = Eval(op(expr),box) IN
      IF Proper?(op) THEN Abs(op) ELSE EmptyInterval ENDIF
    ELSIF neg?(expr) THEN
      Neg(Eval(op(expr),box))
    ELSIF sub?(expr) THEN
      LET op1 = Eval(op1(expr),box) IN
      IF Proper?(op1) THEN
        LET op2 = Eval(op2(expr),box) IN
        IF Proper?(op2) THEN Sub(op1,op2) ELSE EmptyInterval ENDIF
      ELSE EmptyInterval
      ENDIF
    ELSIF mult?(expr) THEN
      LET op1 = Eval(op1(expr),box) IN
      IF Proper?(op1) THEN
        LET op2 = Eval(op2(expr),box) IN
        IF Proper?(op2) THEN Mult(op1,op2) ELSE EmptyInterval ENDIF
      ELSE EmptyInterval
      ENDIF
    ELSIF sq?(expr) THEN
      LET op = Eval(op(expr),box) IN
      IF Proper?(op) THEN Sq(op) ELSE EmptyInterval ENDIF
    ELSIF pow?(expr) THEN
      LET op = Eval(op(expr),box) IN
      IF Proper?(op) THEN Pow(op,opn(expr)) ELSE EmptyInterval ENDIF
    ELSIF div?(expr) THEN
      LET op1 = Eval(op1(expr),box) IN
      IF Proper?(op1) THEN
        LET op2 = Eval(op2(expr),box) IN
        IF Proper?(op2) AND Zeroless?(op2) THEN Div(op1,op2) 
        ELSE EmptyInterval ENDIF
      ELSE EmptyInterval
      ENDIF
    ELSIF fun?(expr) THEN
      LET op = Eval(op(expr),box) IN
      IF Proper?(op) AND pre(expr)(op) THEN opF(expr)(op) ELSE EmptyInterval ENDIF
    ELSE
      LET rlet = Eval(rlet(expr),box) IN
      IF Proper?(rlet) THEN
        Eval(rin(expr),append(box,(: rlet :)))
      ELSE EmptyInterval
      ENDIF
    ENDIF
  MEASURE expr BY <<

  Eval(expr) : Interval = Eval(expr,null)

  well_typed?(box)(expr) : INDUCTIVE bool =
    const?(expr) OR
    (varidx?(expr) AND varidx(expr) < length(box)) OR
    (add?(expr) AND well_typed?(box)(op1(expr)) AND well_typed?(box)(op2(expr))) OR
    (abs?(expr) AND well_typed?(box)(op(expr))) OR
    (sub?(expr) AND well_typed?(box)(op1(expr)) AND well_typed?(box)(op2(expr))) OR
    (neg?(expr) AND well_typed?(box)(op(expr))) OR
    (mult?(expr) AND well_typed?(box)(op1(expr)) AND well_typed?(box)(op2(expr))) OR
    (sq?(expr) AND well_typed?(box)(op(expr))) OR
    (div?(expr) AND well_typed?(box)(op1(expr)) AND well_typed?(box)(op2(expr)) AND
     Zeroless?(Eval(op2(expr),box))) OR
    (pow?(expr) AND well_typed?(box)(op(expr))) OR
    (fun?(expr) AND well_typed?(box)(op(expr)) AND pre(expr)(Eval(op(expr),box))) OR
    (letin?(expr) AND well_typed?(box)(rlet(expr)) AND 
      well_typed?(append(box,(: Eval(rlet(expr),box) :)))(rin(expr)))

  Proper_well_typed : LEMMA
    Proper?(Eval(expr,box)) IMPLIES
    well_typed?(box)(expr) 

  Eval_inclusion : THEOREM
     FORALL (box:Box,vs:(vars_in_box?(box)),expr) :
        well_typed?(box)(expr) IMPLIES
        eval(expr,vs,length(box)) ## Eval(expr,box)

  Eval_inclusion_Proper : THEOREM
    FORALL (box:Box,vs:(vars_in_box?(box)))(expr) :
      LET E = Eval(expr,box) IN
        Proper?(E) IMPLIES
        eval(expr,vs,length(box)) ## E

  well_typed_Proper : LEMMA
    well_typed?(pox)(expr) IMPLIES
    Proper?(Eval(expr,pox))

  Eval_fundamental_aux : LEMMA
    FORALL (expr):
      Inclusion?(box,pox) IMPLIES 
      well_typed?(pox)(expr) AND Proper?(Eval(expr,box)) IMPLIES 
      Eval(expr,box) << Eval(expr,pox)

  well_typed_Inclusion_aux : LEMMA
    FORALL (expr):
      Inclusion?(pox,box) IMPLIES
      well_typed?(box)(expr) 
      IMPLIES
      well_typed?(pox)(expr)

  well_typed_Inclusion : LEMMA
    Inclusion?(pox,box) IMPLIES
    FORALL (expr):
      well_typed?(box)(expr) 
      IMPLIES
      well_typed?(pox)(expr)

  Proper_Inclusion : LEMMA
    Inclusion?(pox,box) IMPLIES
      FORALL (expr):
        Proper?(Eval(expr,box))
        IMPLIES
        Proper?(Eval(expr,pox))

  Eval_fundamental : THEOREM
    Inclusion?(pox,box) IMPLIES 
    FORALL (expr):
      well_typed?(box)(expr) IMPLIES 
      Eval(expr,pox) << Eval(expr,box)

  Eval_fundamental_proper : THEOREM
    Inclusion?(pox,box) IMPLIES 
    FORALL (expr):
      LET E = Eval(expr,box) IN
      Proper?(E) IMPLIES
      Eval(expr,pox) << E

  split(v,box) : RECURSIVE {lrb:[Box,Box] | LET (lb,rb) = lrb IN 
                            length(lb) = length(box) AND length(rb) = length(box) AND
                            FORALL (i:below(length(box))) : IF i=v THEN nth(lb,i) = HalfLeft(nth(box,i)) AND
                                                                          nth(rb,i) = HalfRight(nth(box,i)) 
                                                              ELSE nth(lb,i) = nth(box,i) AND
                                                                   nth(rb,i) = nth(box,i)
                                                              ENDIF} =
    IF null?(box) THEN (null,null)
    ELSIF v = 0 THEN (cons(HalfLeft(car(box)),cdr(box)),
                      cons(HalfRight(car(box)),cdr(box)))
    ELSE LET (lb,rb) = split(v-1,cdr(box)) IN
             (cons(car(box),lb),cons(car(box),rb))
    ENDIF
  MEASURE box BY <<

  split_eq : RECURSIVE JUDGEMENT 
    split(v,(box:Box|length(box) <= v)) HAS_TYPE {lrb:[Box,Box] | LET (lb,rb)=lrb IN lb = box AND rb=box}

  split_vars_in_box : LEMMA
    FORALL (box:Box,vs:(vars_in_box?(box)),v) :
      LET (bl,br) = split(v,box) IN
        vars_in_box?(bl)(vs) OR vars_in_box?(br)(vs)

  split_Inclusion : LEMMA
    FORALL (pox,v):
      LET (bl,br) = split(v,pox) IN
      Inclusion?(bl,pox) AND Inclusion?(br,pox)

  split_Proper : JUDGEMENT split(v,pox) HAS_TYPE [ProperBox,ProperBox]

  length_split_1 : LEMMA
    length(split(v,pox)`1) = length(pox)

  length_split_2 : LEMMA
    length(split(v,pox)`2) = length(pox)
 
END interval_expr

¤ Dauer der Verarbeitung: 0.2 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