[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PVS-Help] record types and boolean relations
Hi,
When I want to prove the theorem proba as in:
proba1 % [ parameters ]
: THEORY
BEGIN
% ASSUMING
% assuming declaratio%ns
% ENDASSUMING
state: TYPE+ = [#a: int, b: int#]
x: state
P(x: state): bool = (a(x) = 2)
f(x :{x: state | a(x) /= 1}, y: state): bool =
table
|a(x) = 1| ||
|P(x)| a(y) = a(x) + 3||
|a(x) = 5| a(y) = a(x) + 5||
endtable
proba: THEOREM forall (x: state): P(x) => exists (y: state): f(x, y)
END proba1
I can do it only by exlicitly using the record type while instantiating
as in:
(proba1
(proba 0
(proba-1 nil 3325859506 3325901665
("" (skolem!)
(("" (expand "f")
(("" (ground)
((""
(inst +
"LET a = 3 + a(x!1), b = b(x!1) IN (#a := a, b := b#)")
(("" (grind) nil nil)) nil))
nil))
nil))
nil)
However, since the function f given here is rather simplified version
of my function, I find it tedious and sometimes even impossible to do a
translation of the boolean relations by which the f is given to the
assignment (or LET) statements of record types. Is there any way of
instatiating in the previous proof without using the assignment
statements, but rather just boolean relation ?
Thanks.
Vera