src/HOL/Calculation.thy
author wenzelm
Mon, 09 Aug 1999 22:25:27 +0200
changeset 7202 6fcaf006cc40
parent 6945 eeeef70c8fe3
child 7381 1bd8633e8f90
permissions -rw-r--r--
added asym rule;

(*  Title:      HOL/Calculation.thy
    ID:         $Id$
    Author:     Markus Wenzel, TU Muenchen

Setup transitivity rules for calculational proofs.  Note that in the
list below later rules have priority.
*)

theory Calculation = Int:;


theorems [trans] = HOL.ssubst;                              (*  =  x  x  *)
theorems [trans] = HOL.subst[COMP swap_prems_rl];           (*  x  =  x  *)

theorems [trans] = Divides.dvd_trans;                       (* dvd dvd dvd *)

theorem [trans]: "[| (x::'a::order) < y; y < x |] ==> P";   (*  <  >  P  *)
  by (rule Ord.order_less_asym);

theorems [trans] = Ord.order_less_trans;                    (*  <  <  <  *)
theorems [trans] = Ord.order_le_less_trans;                 (*  <= <  <  *)
theorems [trans] = Ord.order_less_le_trans;                 (*  <  <= <  *)
theorems [trans] = Ord.order_trans;                         (*  <= <= <= *)
theorems [trans] = Ord.order_antisym;                       (*  <= >= =  *)

theorem [trans]: "[| x <= y; y = z |] ==> x <= z";	    (*  <= =  <= *)
  by (rule HOL.subst);

theorem [trans]: "[| x = y; y <= z |] ==> x <= z";	    (*  =  <= <= *)
  by (rule HOL.ssubst);

theorem [trans]: "[| x < y; y = z |] ==> x < z";	    (*  <  =  <  *)
  by (rule HOL.subst);

theorem [trans]: "[| x = y; y < z |] ==> x < z";	    (*  =  <  <  *)
  by (rule HOL.ssubst);

theorems [trans] = HOL.trans                                (*  =  =  =  *)


end;