src/ZF/Inductive_ZF.thy
changeset 26189 9808cca5c54d
parent 26056 6a0801279f4c
child 26190 cf51a23c0cd0
--- a/src/ZF/Inductive_ZF.thy	Sat Mar 01 14:10:14 2008 +0100
+++ b/src/ZF/Inductive_ZF.thy	Sat Mar 01 14:10:15 2008 +0100
@@ -1,4 +1,4 @@
-(*  Title:      ZF/Inductive.thy
+(*  Title:      ZF/Inductive_ZF.thy
     ID:         $Id$
     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     Copyright   1993  University of Cambridge
@@ -12,14 +12,31 @@
 
 header{*Inductive and Coinductive Definitions*}
 
-theory Inductive_ZF imports Fixedpt QPair Nat_ZF
-  uses
-    "ind_syntax.ML"
-    "Tools/cartprod.ML"
-    "Tools/ind_cases.ML"
-    "Tools/inductive_package.ML"
-    "Tools/induct_tacs.ML"
-    "Tools/primrec_package.ML" begin
+theory Inductive_ZF
+imports Fixedpt QPair Nat_ZF
+uses
+  ("ind_syntax.ML")
+  ("Tools/cartprod.ML")
+  ("Tools/ind_cases.ML")
+  ("Tools/inductive_package.ML")
+  ("Tools/induct_tacs.ML")
+  ("Tools/primrec_package.ML")
+begin
+
+lemma def_swap_iff: "a == b ==> a = c <-> c = b"
+  by blast
+
+lemma def_trans: "f == g ==> g(a) = b ==> f(a) = b"
+  by simp
+
+lemma refl_thin: "!!P. a = a ==> P ==> P" .
+
+use "ind_syntax.ML"
+use "Tools/cartprod.ML"
+use "Tools/ind_cases.ML"
+use "Tools/inductive_package.ML"
+use "Tools/induct_tacs.ML"
+use "Tools/primrec_package.ML"
 
 setup IndCases.setup
 setup DatatypeTactics.setup
@@ -30,8 +47,8 @@
 
 structure Lfp =
   struct
-  val oper      = Const("Fixedpt.lfp", [iT,iT-->iT]--->iT)
-  val bnd_mono  = Const("Fixedpt.bnd_mono", [iT,iT-->iT]--->oT)
+  val oper      = @{const lfp}
+  val bnd_mono  = @{const bnd_mono}
   val bnd_monoI = @{thm bnd_monoI}
   val subs      = @{thm def_lfp_subset}
   val Tarski    = @{thm def_lfp_unfold}
@@ -40,9 +57,9 @@
 
 structure Standard_Prod =
   struct
-  val sigma     = Const("Sigma", [iT, iT-->iT]--->iT)
-  val pair      = Const("Pair", [iT,iT]--->iT)
-  val split_name = "split"
+  val sigma     = @{const Sigma}
+  val pair      = @{const Pair}
+  val split_name = @{const_name split}
   val pair_iff  = @{thm Pair_iff}
   val split_eq  = @{thm split}
   val fsplitI   = @{thm splitI}
@@ -54,10 +71,10 @@
 
 structure Standard_Sum =
   struct
-  val sum       = Const(@{const_name sum}, [iT,iT]--->iT)
-  val inl       = Const("Inl", iT-->iT)
-  val inr       = Const("Inr", iT-->iT)
-  val elim      = Const("case", [iT-->iT, iT-->iT, iT]--->iT)
+  val sum       = @{const sum}
+  val inl       = @{const Inl}
+  val inr       = @{const Inr}
+  val elim      = @{const case}
   val case_inl  = @{thm case_Inl}
   val case_inr  = @{thm case_Inr}
   val inl_iff   = @{thm Inl_iff}
@@ -77,8 +94,8 @@
 
 structure Gfp =
   struct
-  val oper      = Const("Fixedpt.gfp", [iT,iT-->iT]--->iT)
-  val bnd_mono  = Const("Fixedpt.bnd_mono", [iT,iT-->iT]--->oT)
+  val oper      = @{const gfp}
+  val bnd_mono  = @{const bnd_mono}
   val bnd_monoI = @{thm bnd_monoI}
   val subs      = @{thm def_gfp_subset}
   val Tarski    = @{thm def_gfp_unfold}
@@ -87,9 +104,9 @@
 
 structure Quine_Prod =
   struct
-  val sigma     = Const("QPair.QSigma", [iT, iT-->iT]--->iT)
-  val pair      = Const("QPair.QPair", [iT,iT]--->iT)
-  val split_name = "QPair.qsplit"
+  val sigma     = @{const QSigma}
+  val pair      = @{const QPair}
+  val split_name = @{const_name qsplit}
   val pair_iff  = @{thm QPair_iff}
   val split_eq  = @{thm qsplit}
   val fsplitI   = @{thm qsplitI}
@@ -101,10 +118,10 @@
 
 structure Quine_Sum =
   struct
-  val sum       = Const("QPair.op <+>", [iT,iT]--->iT)
-  val inl       = Const("QPair.QInl", iT-->iT)
-  val inr       = Const("QPair.QInr", iT-->iT)
-  val elim      = Const("QPair.qcase", [iT-->iT, iT-->iT, iT]--->iT)
+  val sum       = @{const qsum}
+  val inl       = @{const QInl}
+  val inr       = @{const QInr}
+  val elim      = @{const qcase}
   val case_inl  = @{thm qcase_QInl}
   val case_inr  = @{thm qcase_QInr}
   val inl_iff   = @{thm QInl_iff}