doc-src/Logics/HOL.tex
changeset 1489 78e1ce42a825
parent 1471 b088c0a1f2bd
child 1490 713256365b92
--- a/doc-src/Logics/HOL.tex	Fri Feb 09 18:25:27 1996 +0100
+++ b/doc-src/Logics/HOL.tex	Fri Feb 09 18:29:01 1996 +0100
@@ -209,13 +209,13 @@
 
 \begin{figure}
 \begin{ttbox}\makeatother
-\tdx{refl}           t = (t::'a)
-\tdx{subst}          [| s=t; P s |] ==> P(t::'a)
-\tdx{ext}            (!!x::'a. (f x::'b) = g x) ==> (\%x.f x) = (\%x.g x)
+\tdx{refl}           t = t
+\tdx{subst}          [| s=t; P s |] ==> P t
+\tdx{ext}            (!!x. f x = g x) ==> (\%x.f x) = (\%x.g x)
 \tdx{impI}           (P ==> Q) ==> P-->Q
 \tdx{mp}             [| P-->Q;  P |] ==> Q
 \tdx{iff}            (P-->Q) --> (Q-->P) --> (P=Q)
-\tdx{selectI}        P(x::'a) ==> P(@x.P x)
+\tdx{selectI}        P(x) ==> P(@x.P x)
 \tdx{True_or_False}  (P=True) | (P=False)
 \end{ttbox}
 \caption{The {\tt HOL} rules} \label{hol-rules}
@@ -233,9 +233,9 @@
 \tdx{or_def}     op |     == (\%P Q. !R. (P-->R) --> (Q-->R) --> R)
 \tdx{Ex1_def}    Ex1      == (\%P. ? x. P x & (! y. P y --> y=x))
 
-\tdx{Inv_def}    Inv      == (\%(f::'a=>'b) y. @x. f x=y)
-\tdx{o_def}      op o     == (\%(f::'b=>'c) g (x::'a). f(g x))
-\tdx{if_def}     If P x y == (\%P x y.@z::'a.(P=True --> z=x) & (P=False --> z=y))
+\tdx{Inv_def}    Inv      == (\%f y. @x. f x = y)
+\tdx{o_def}      op o     == (\%f g x. f(g x))
+\tdx{if_def}     If P x y == (\%P x y.@z.(P=True --> z=x) & (P=False --> z=y))
 \tdx{Let_def}    Let s f  == f s
 \end{ttbox}
 \caption{The {\tt HOL} definitions} \label{hol-defs}
@@ -295,10 +295,12 @@
 \begin{ttbox}
 \tdx{sym}         s=t ==> t=s
 \tdx{trans}       [| r=s; s=t |] ==> r=t
-\tdx{ssubst}      [| t=s; P s |] ==> P(t::'a)
+\tdx{ssubst}      [| t=s; P s |] ==> P t
 \tdx{box_equals}  [| a=b;  a=c;  b=d |] ==> c=d  
-\tdx{arg_cong}    x=y ==> f x=f y
-\tdx{fun_cong}    f=g ==> f x=g x
+\tdx{arg_cong}    x = y ==> f x = f y
+\tdx{fun_cong}    f = g ==> f x = g x
+\tdx{cong}        [| f = g; x = y |] ==> f x = g y
+\tdx{not_sym}     t ~= s ==> s ~= t
 \subcaption{Equality}
 
 \tdx{TrueI}       True 
@@ -322,9 +324,9 @@
 \tdx{iffD1}       [| P=Q; P |] ==> Q
 \tdx{iffD2}       [| P=Q; Q |] ==> P
 \tdx{iffE}        [| P=Q; [| P --> Q; Q --> P |] ==> R |] ==> R
-
-\tdx{eqTrueI}     P ==> P=True 
-\tdx{eqTrueE}     P=True ==> P 
+%
+%\tdx{eqTrueI}     P ==> P=True 
+%\tdx{eqTrueE}     P=True ==> P 
 \subcaption{Logical equivalence}
 
 \end{ttbox}
@@ -334,13 +336,13 @@
 
 \begin{figure}
 \begin{ttbox}\makeatother
-\tdx{allI}      (!!x::'a. P x) ==> !x. P x
-\tdx{spec}      !x::'a.P x ==> P x
+\tdx{allI}      (!!x. P x) ==> !x. P x
+\tdx{spec}      !x.P x ==> P x
 \tdx{allE}      [| !x.P x;  P x ==> R |] ==> R
 \tdx{all_dupE}  [| !x.P x;  [| P x; !x.P x |] ==> R |] ==> R
 
-\tdx{exI}       P x ==> ? x::'a.P x
-\tdx{exE}       [| ? x::'a.P x; !!x. P x ==> Q |] ==> Q
+\tdx{exI}       P x ==> ? x. P x
+\tdx{exE}       [| ? x. P x; !!x. P x ==> Q |] ==> Q
 
 \tdx{ex1I}      [| P a;  !!x. P x ==> x=a |] ==> ?! x. P x
 \tdx{ex1E}      [| ?! x.P x;  !!x. [| P x;  ! y. P y --> y=x |] ==> R 
@@ -361,8 +363,8 @@
 \tdx{swap}            ~P ==> (~Q ==> P) ==> Q
 \subcaption{Classical logic}
 
-\tdx{if_True}         (if True then x else y) = x
-\tdx{if_False}        (if False then x else y) = y
+%\tdx{if_True}         (if True then x else y) = x
+%\tdx{if_False}        (if False then x else y) = y
 \tdx{if_P}            P ==> (if P then x else y) = x
 \tdx{if_not_P}        ~ P ==> (if P then x else y) = y
 \tdx{expand_if}       P(if Q then x else y) = ((Q --> P x) & (~Q --> P y))
@@ -381,6 +383,16 @@
 backward proofs, while \tdx{box_equals} supports reasoning by
 simplifying both sides of an equation.
 
+The following simple tactics are occasionally useful:
+\begin{ttdescription}
+\item[\ttindexbold{strip_tac} $i$] applies {\tt allI} and {\tt impI}
+  repeatedly to remove all outermost universal quantifiers and implications
+  from subgoal $i$.
+\item[\ttindexbold{case_tac} {\tt"}$P${\tt"} $i$] performs case distinction
+  on $P$ for subgoal $i$: the latter is replaced by two identical subgoals
+  with the added assumptions $P$ and $\neg P$, respectively.
+\end{ttdescription}
+
 
 \begin{figure} 
 \begin{center}
@@ -852,6 +864,17 @@
   down rewriting and is therefore not included by default.
 \end{warn}
 
+In case a rewrite rule cannot be dealt with by the simplifier (either because
+of nontermination or because its left-hand side is too flexible), HOL
+provides {\tt stac}:
+\begin{ttdescription}
+\item[\ttindexbold{stac} $thm$ $i,$] where $thm$ is of the form $lhs = rhs$,
+  replaces in subgoal $i$ instances of $lhs$ by corresponding instances of
+  $rhs$. In case of multiple instances of $lhs$ in subgoal $i$, backtracking
+  may be necessary to select the desired ones.
+\end{ttdescription}
+
+
 \subsection{Classical reasoning}
 
 \HOL\ derives classical introduction rules for $\disj$ and~$\exists$, as
@@ -1018,12 +1041,12 @@
 \tdx{inj_Inl}        inj Inl
 \tdx{inj_Inr}        inj Inr
 
-\tdx{sumE}           [| !!x::'a. P(Inl x);  !!y::'b. P(Inr y) |] ==> P s
+\tdx{sumE}           [| !!x. P(Inl x);  !!y. P(Inr y) |] ==> P s
 
 \tdx{sum_case_Inl}   sum_case f g (Inl x) = f x
 \tdx{sum_case_Inr}   sum_case f g (Inr x) = g x
 
-\tdx{surjective_sum} sum_case (\%x::'a. f(Inl x)) (\%y::'b. f(Inr y)) s = f s
+\tdx{surjective_sum} sum_case (\%x. f(Inl x)) (\%y. f(Inr y)) s = f s
 \tdx{expand_sum_case} R(sum_case f g s) = ((! x. s = Inl(x) --> R(f(x))) &
                                      (! y. s = Inr(y) --> R(g(y))))
 \end{ttbox}
@@ -1253,8 +1276,6 @@
 
 
 \subsection{Introducing new types}
-%FIXME: syntax of typedef: subtype -> typedef; name -> id
-%FIXME: typevarlist and infix/mixfix in Ref manual and in sec:datatype
 
 The \HOL-methodology dictates that all extension to a theory should be
 conservative and thus preserve consistency. There are two basic type