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

Another Problem during a proof !



My retrieve Function looks like:
retrDictc (d_c): Dicta = {w:Word | length(w)<length(d_c) and
(member(w,(d_c(length(w)))))}

Where Dicta is a finite_set of Word, and
 Section : TYPE = finite_set[Word]
 Dictc : TYPE = {d:finite_sequence[Section] | inv_Dictc(d)} 

This yields a TCC:
retrDictc_TCC1: OBLIGATION
      (FORALL (d_c: Dictc):
         is_finite[Word]({w: Word |
                           length[character](w) < length(d_c)
                               AND (member[list[character]](w,
(finseq_appl[Section](d_c)(length[character](w)))))}));

which i have to proof !!

I tried this by a finite_sequence induction of the form:

fsinduction[T : TYPE]: THEORY
BEGIN

empty_fin_seq : TYPE = {fs: finite_sequence[T] | length(fs) = 0}
p : VAR pred[finite_sequence[T]]
e : VAR T
fs : VAR finite_sequence[T]
empty_fs : VAR empty_fin_seq

  finite_sequence_induction : THEOREM
      FORALL (p : pred[finseq[T]]) :
          ((FORALL (fs : finseq[T] | length(fs) = 0) : p(fs)) AND
            (FORALL (l : nat) :
                        (FORALL (fs : finseq[T] | length(fs) = l)       
: p(fs)) =>
                        (FORALL (fs : finseq[T] | length(fs) = l + 1) :
p(fs))))
          IMPLIES FORALL (fs : finseq[T]) : p(fs)
END fsinduction

the proof leeds me to this subgoal:

[-1]    length(fs!1) = 1 + l!1
[-2]    (FORALL (fs: finseq[Section] | length(fs) = l!1):
         inv_Dictc(fs)
             IMPLIES
           is_finite[Word]({w: Word |
                             length[character](w) < length(fs)
                                 AND (member[list[character]](w,
(finseq_appl[Section](fs)(length[character](w)))))}))
{-3}    inv_Dictc(fs!1)
  |-------
{1}    is_finite[Word]({w: Word |
                        length[character](w) < length(fs!1)
                            AND (member[list[character]](w,
(finseq_appl[Section](fs!1)(length[character](w)))))})

which i tried to proof with (inst?), this yields two subgoals.
The first one is easily proofed with (ground). But the second one looks
like:

[-1]    length(fs!1) = 1 + l!1
[-2]    inv_Dictc(fs!1)
  |-------
[1]    is_finite[Word]({w: Word |
                        length[character](w) < length(fs!1)
                            AND (member[list[character]](w,
(finseq_appl[Section](fs!1)(length[character](w)))))})

Which is nearly the expression i wanted to proof at the beginning. 
Can i do a workaround at this problem, by defining an AXIOM: is_finite
(retrDictc), or would this cause inconsitance ? If this is the fact, has
anyone an idea, how i can proof the above expression ?

Thanks to all

-- 
---------------------------------------------------------
 ("\''/").__..-''"`-. .         Gernot Lepuschitz
 `9_ 9  )   `-. (    ).`-._.`)gernot@sbox.tu-graz.ac.at 
 (_Y_.)' ._   ) `._`.  " -.-'   Telematik - Student
 ..`-'_..-_/ /-'_.'/               TU - Graz
(l)-'' ((i).' ((!.'              
In the softwarerequirements they said Win95 or better
so I installed Linux.