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

another TCC question



I have a theory in which I introduce a few types, and one operation; here
are the relevant types:

VERTEX_PAIR : TYPE+ = {x: finite_set[nat]| 0 < card(x) and card(x) < 3}

EDGE : TYPE = [# pair: VERTEX_PAIR, wt: nat #]

GRAPH : TYPE = finite_set[EDGE]

I then define the following operation:

g, g_result: VAR GRAPH
v1, v2, w: VAR nat

GotByIncluding(v1, v2, w, g, g_result): bool =
    (g_result = union(g, singleton((# pair := {v: nat| v=v1 or v=v2},
                                      wt := old_w
                                    #))
                      ))

When I typecheck the theory, this definition generates an unprovable TCC,
namely:

Insert_TCC1: OBLIGATION
  (FORALL (x: [# pair: [nat -> bool], wt: nat #]): TRUE) AND
   (FORALL (x: [nat -> bool]):
      is_finite[nat](x) AND 0 < card[nat](x) AND card[nat](x) < 3);

Why is the second universal in this conjunctive TCC getting generated? I'm
being asked to show that any predicate on the naturals is finite and
between 0 and 3 in size???  There's probably some obvious point I'm
missing, but I'm not seeing it.

Anyone to the rescue?

Mark Aronszajn
WVU-RSRG