[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PVS-Help] Re: Problem with the RANDOM function




> As it is implemented right now, I don't see any way to fix an array of
> random values. Therefore, initial_random(i) will potentially have a
> different value every time you evaluate it. 
> 
> Cesar
> 

Actually, I found a way to (locally) fix an array of random values. 
The solution is not elegant, but it works. The reason an array of random 
values is not fix in let-in expressions is that arrays are just functions in PVS. 
Therefore, the evaluation of arrays is lazy. On the other hand, lists are 
"objects" and they are evaluated in let-in expressions such as 
let <x> = <list> in <expr> before the evaluation of expr.

Define:
 
  List(n:nat): TYPE = {l:list[node_status] | length(l) = n}

  initial_random_list(n:nat) : RECURSIVE List(n) =
    if (n=0) then null
    else
      let s = IF BRANDOM THEN on ELSE off ENDIF in
      cons(s,initial_random_list(n-1))
    endif
  MEASURE n   

Notice that

  test3 : bool =
    let i = initial_random_list(10) in
     nth(i,1) = nth(i,1) 

always prints TRUE. Now, define initial_random_state_fix as follows:

  list2network_state(l:List(10))(i:node_id):node_status =
    nth(l,i)

  initial_random_state_fix : network_state =
    list2network_state(initial_random_list(10))

Notice that
  test4 : bool =
    let i = initial_random_state_fix in
      i(1) = i(1) 
always prints TRUE.

Your original definition of print_state

  print_state(ns: network_state, i: node_id): void =
      IF on?(ns(i)) THEN print("ON ")
      ELSIF off?(ns(i)) THEN print("OFF ")
      ELSE print("? ") 
      ENDIF

works for initial_random_state_fix:

  test5 : void = 
    print_node_states(initial_random_state_fix) % Never prints "?"

<PVSio> test5;
ON OFF OFF ON ON ON ON OFF ON OFF 

<PVSio> test5;
ON ON OFF OFF ON ON ON OFF OFF ON 

<PVSio> test5;
OFF OFF ON ON OFF ON OFF ON ON OFF 

<PVSio> test5;
ON OFF OFF OFF ON ON ON OFF ON OFF 

<PVSio> test5;
OFF ON ON OFF ON OFF OFF ON OFF OFF 

<PVSio> test5;
OFF OFF OFF ON OFF OFF OFF OFF ON ON 

Of course, every invocation of test5 generates a new list of random
values. Locally, the values in the array are fix.
 
Cesar
-- 
Cesar A. Munoz H., Senior Staff Scientist     mailto:munoz@nianet.org
National Institute of Aerospace         mailto:Cesar.A.Munoz@nasa.gov
100 Exploration Way  Room 214       http://research.nianet.org/~munoz
Hampton, VA 23666, USA   Tel. +1 (757) 325 6907 Fax +1 (757) 325 6988
GPGP Finger Print: 9F10 F3DF 9D76 1377 BCB6  1A18 6000 89F5 C114 E6C4