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

Re: [PVS-Help] Non empty finite set induction

Given the previous definition of curry:

>example[R: TYPE, o: FUNCTION[R, R -> R]]: THEORY
>    comm:  ASSUMPTION commutative?(o)
>    assoc: ASSUMPTION associative?(o)
>  IMPORTING finite_sets@finite_sets_inductions[posnat]
>  myset:   TYPE = ARRAY[posnat -> R]
>  indices: TYPE = non_empty_finite_set[posnat]
>  curry(s: myset, K: indices): RECURSIVE R =
>    IF singleton?(K) THEN s(the(K))
>    ELSE s(choose(K)) o curry(s, rest(K))
>    ENDIF
>  MEASURE card(K)
>END example

A subgoal to a lemma I'm trying to prove looks like the following:

   [-1]  singleton?(remove(k!1, U!1))
   [-2]  U!1(k!1)
   [1]   empty?[index[N, value]](U!1)
   [2]   singleton?(U!1)
   [3]   s!1(choose(U!1)) o curry(s!1, rest(U!1)) =
	   s!1(k!1) o curry(s!1, remove(k!1, U!1))

The antecedents imply that U!1 has two elements: k!1 and something
else. Given this fact, [3] should be able to be expanded so that the
curry's are removed:

   [3]   s!1(choose(U!1)) o s!1(k!1) = s!1(k!1) o s!1(the(U!1))

Does anyone know how I can perform these rewrites in PVS? Thanks