Theory: halts

Parents


Type constants


Term constants


Axioms


Definitions

HALTS
|- !p c. HALTS p c = (!s. p s ==> (?s'. c (s,s')))
DEC_SEQ
|- (!s c b. DEC_SEQ 0 s c b = s) /\
   (!n s c b.
     DEC_SEQ (SUC n) s c b =
     ((~(b (DEC_SEQ n s c b)))
      => (DEC_SEQ n s c b)
      | (@z. c (DEC_SEQ n s c b,z))))

Theorems

SKIP_HALTS
|- !p. HALTS p MK_SKIP
ASSIGN_HALTS
|- !p x f. HALTS p (MK_ASSIGN (x,f))
SEQ_HALTS
|- !p c c' q.
     HALTS p c /\ MK_SPEC (p,c,q) /\ HALTS q c' ==> HALTS p (MK_SEQ (c,c'))
IF1_HALTS
|- !p c b. HALTS (\s. p s /\ b s) c ==> HALTS p (MK_IF1 (b,c))
IF2_HALTS
|- !p c1 c2 b.
     HALTS (\s. p s /\ b s) c1 /\ HALTS (\s. p s /\ ~(b s)) c2 ==>
     HALTS p (MK_IF2 (b,c1,c2))
PRE_STRENGTH_HALTS
|- !p p' c. (!s. p' s ==> p s) /\ HALTS p c ==> HALTS p' c
SPEC_LEMMA1
|- (?x.
     !n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) ==>
   MK_SPEC ((\s. p s /\ b s),c,p)
SEQ_LEMMA1
|- (!n. b (DEC_SEQ n s c b)) /\
   MK_SPEC ((\s. p s /\ b s),c,p) /\
   HALTS (\s. p s /\ b s) c /\
   p s ==>
   (!m. p (DEC_SEQ m s c b) /\ c (DEC_SEQ m s c b,DEC_SEQ (SUC m) s c b))
SEQ_LEMMA2
|- (!n. b (DEC_SEQ n s c b)) /\
   (?x. !n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) /\
   HALTS (\s. p s /\ b s) c /\
   p s ==>
   (?x. !m. DEC_SEQ m s c b x > DEC_SEQ (SUC m) s c b x)
WF_LEMMA
|- (!n. f n > f (SUC n)) ==> (!n m. f m > n)
WF_THM
|- ~(?f. !n. f n > f (SUC n))
SEQ_LEMMA3
|- (?x. !n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) /\
   HALTS (\s. p s /\ b s) c /\
   p s ==>
   ~(!n. b (DEC_SEQ n s c b))
SEQ_LEMMA4
|- (?x. !n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) /\
   HALTS (\s. p s /\ b s) c /\
   p s ==>
   (?n. ~(b (DEC_SEQ n s c b)))
SEQ_LEMMA5
|- (?x. !n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) /\
   HALTS (\s. p s /\ b s) c /\
   p s ==>
   (?n. ~(b (DEC_SEQ n s c b)) /\ (!m. m < n ==> b (DEC_SEQ m s c b)))
SEQ_LEMMA6
|- !n. DEC_SEQ n (DEC_SEQ (SUC 0) s c b) c b = DEC_SEQ (SUC n) s c b
SEQ_LEMMA7
|- MK_SPEC ((\s. p s /\ b s),c,p) /\ HALTS (\s. p s /\ b s) c ==>
   (!n s.
     p s /\ ~(b (DEC_SEQ n s c b)) /\ (!m. m < n ==> b (DEC_SEQ m s c b)) ==>
     MK_FINITE_WHILE (SUC n) (b,c) (s,DEC_SEQ n s c b))
WHILE_HALTS
|- !b c x.
     (!n. MK_SPEC ((\s. p s /\ b s /\ (s x = n)),c,(\s. p s /\ s x < n))) /\
     HALTS (\s. p s /\ b s) c ==>
     HALTS p (MK_WHILE (b,c))