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

Re: PVS questions




> For instance, I want to define an array S containing 50 elements. Each
> element is a tuple/record in the form (a, b). Suppose S={(a_1,b_1),
> (a_2,b_2), ... , (a_50, b_50)}
> 
> (1) How to define such an array using PVS?

You could use either the tuple or record constructs:

   A_TYPE, B_TYPE : TYPE+

   % Tuple version
   S_TYPE : TYPE = [below(50) -> [A_TYPE, B_TYPE]]

   % Record version
   S_TYPE : TYPE = [below(50) -> [# a : A_TYPE, b : B_TYPE #]]


below() is defined in the PVS prelude (view it using M-x vpf) as a subtype
of the natural numbers, so below(50) is the type of the range 0...49.


> (2) If I need to use/quote/reference a_2 and b_2 separately, how can I 
>  that? I'm   afraid that I cannot reference them in C style such as
> S[2].a and S[2].b, so how can I do that in  PVS?

There are several syntactic forms available.  Here are some examples
for both the tuple and record methods:

   s : S_TYPE

   % Tuple version
   an_a : A_TYPE = s(2)`1
   another_a : A_TYPE = proj_1(s(2))
 

   % Record version
   an_a      : A_TYPE = s(2)`a
   another_a : A_TYPE = a(s(2))


You'll find all this documented, with examples, in the PVS language
reference manual at http://pvs.csl.sri.com/manuals.html

Dave