From @IRAUN1.IRA.UKA.DE:kumar@ira.uka.de  Mon Jul 30 02:38:00 1990
Received: by iris.ucdavis.edu (5.57/UCD.EECS.2.0)
        id AA14872; Mon, 30 Jul 90 02:38:00 PDT
Received: from relay.cs.net by clover.ucdavis.edu (5.59/UCD.EECS.1.11)
        id AA11502; Mon, 30 Jul 90 02:41:51 PDT
Message-Id: <9007300941.AA11502@clover.ucdavis.edu>
Received: from iraun1.ira.uka.de by RELAY.CS.NET id ab09030; 30 Jul 90 5:37 EDT
Received: from i81s1.ira.uka.de by iraun1.ira.uka.de id aa14356;
          30 Jul 90 11:29 MET DST
Date:     Mon, 30 Jul 90 11:23:41 MET DST
From: Ramayya Kumar <kumar%ira.uka.de@RELAY.CS.NET>
To: info-hol@CLOVER.UCDAVIS.EDU
Subject:  Definition of turnstile operator


Dear HOL Users,
We have been using HOL as a breadboard for testing the sufficiency of
First-Order temporal logic for H/W specification and verification.
The temporal operators "next, always and sometimes", have been
defined as new operators from bool to bool, i.e. they can be used
only on Predicates. The necessary axioms for these operators [ref. Kroeger],
have been defined as new_axioms.

A sample of the definitions:-
**************************************************************************
new_constant(`NEXT`, ":bool->bool");;
new_constant(`ALWAYS`, ":bool->bool");;

let NEXT_NOT_AX = new_axiom(`NEXT_NOT_AX`,
      "!A:bool. ~(NEXT A) = NEXT(~A)");;
let NEXT_IMP_AX = new_axiom(`NEXT_IMP_AX`,
      "!A B. NEXT(A ==> B) ==> ((NEXT A) ==> (NEXT B))");;
let FOREVER_AX = new_axiom(`FOREVER_AX`,
      "(ALWAYS A) ==> (A /\ (NEXT(ALWAYS A)))");;
**************************************************************************
Note that using such definitions we do not need to redefine
the normal logical operators such as "/\, \/, ~, ==>, etc.".

We had thought that having specified H/W using these temporal operators,
we could apply these new temporal axioms wherever these operators appear
and otherwise use the normal HOL axioms and inference rules. On taking
this approach we realized that the definition of the turnstile operator
"|-" is not the same within the temporal framework.

In normal predicate logic this operator is defined in the following manner:

     Given
        H |- A ==> B  is equivalent to H,A |- B
         where H is some hypothesis.

    In temporal logic the semantics of the turnstile operator is,
       H |- []A ==> B is equivalent to H,A |- B
        where "[]" denotes the always symbol.

Since the definition of the turnstile operator is really deep down
in HOL I am not sure if such a definition is possible at all. My
queries therefore are:

1. If one proposes to use HOL for temporal logic and perform rewrites
   using assumptions, then should the turnstile operator be redefined ?

2. What are the effects on the subgoal package with the redefinition?

3. Am I missing some basic point in understanding HOL which creates
   this problem ?

Thanks in advance,
Kumar (kumar@ira.uka.de)

