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

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



On Thu, May 29, 2008 at 08:56:18PM -0600, Jerry James wrote:
>What do you think of the version I'm attaching here?  I like
>"doubleton".  It makes more sense than "dualton". :-)

I like the doubleton theory; doubleton_singleton is especially
helpful. A little bit more is required, however, and I've been trying
to figure out just what. Here are my thoughts:

Before the doubleton theory, one of the open subgoals was as follows:

  curry_x.2.3 :

  {-1}  singleton?(remove(choose(U!1), U!1))
  [-2]  U!1(k!1)
    |-------
  [1]   empty?[index](U!1)
  [2]   singleton?(U!1)
  {3}   s!1(choose(U!1)) o curry(s!1, remove(choose(U!1), U!1)) =
	 s!1(k!1) o curry(s!1, remove(k!1, U!1))

There are two plausible cases here: k!1 = choose(U!1) and k!1 /=
choose(U!1). In the case of former, the proof is trivial; in the
latter, doubleton_singleton can be used, but produces two subgoals:

  curry_x.2.3.2.1 :

  {-1}  remove(k!1, U!1) = singleton(choose(U!1))
  {-2}  remove(choose(U!1), U!1) = singleton(k!1)
  [-3]  singleton?(remove(choose(U!1), U!1))
  [-4]  U!1(k!1)
    |-------
  [1]   choose(U!1) = k!1
  [2]   empty?[index](U!1)
  [3]   singleton?(U!1)
  [4]   s!1(choose(U!1)) o curry(s!1, remove(choose(U!1), U!1)) =
	 s!1(k!1) o curry(s!1, remove(k!1, U!1))

  curry_x.2.3.2.2 :

  [-1]  singleton?(remove(choose(U!1), U!1))
  [-2]  U!1(k!1)
    |-------
  {1}   U!1 = doubleton(k!1, choose(U!1))
  [2]   choose(U!1) = k!1
  [3]   empty?[index](U!1)
  [4]   singleton?(U!1)
  [5]   s!1(choose(U!1)) o curry(s!1, remove(choose(U!1), U!1)) =
	 s!1(k!1) o curry(s!1, remove(k!1, U!1))

2.3.2.1 goes easily with some help from commutivity and associativity;
2.3.2.2 on the other hand is more difficult. I don't think the other
lemmas in your doubleton theory can handle this case, so I've added
the following:

  singleton_doubleton: LEMMA
    FORALL S: doubleton?(S) IMPLIES
      FORALL t, u: member(t, S) AND member(u, S) AND t /= u IMPLIES
        S = doubleton(t, u)

Do you agree that this is what we need? Unfortunately, I can't quite
prove it.

jerome