src/HOL/ex/Tarski.thy
changeset 14569 78b75a9eec01
parent 13585 db4005b40cc6
child 16417 9bc16273c2d4
equal deleted inserted replaced
14568:1acde8c39179 14569:78b75a9eec01
   123     and v_def: "v == glb {x. ((%x: intY1. f x) x, x): induced intY1 r &
   123     and v_def: "v == glb {x. ((%x: intY1. f x) x, x): induced intY1 r &
   124                              x: intY1}
   124                              x: intY1}
   125                       (| pset=intY1, order=induced intY1 r|)"
   125                       (| pset=intY1, order=induced intY1 r|)"
   126 
   126 
   127 
   127 
   128 subsubsection {* Partial Order *}
   128 subsection {* Partial Order *}
   129 
   129 
   130 lemma (in PO) PO_imp_refl: "refl A r"
   130 lemma (in PO) PO_imp_refl: "refl A r"
   131 apply (insert cl_po)
   131 apply (insert cl_po)
   132 apply (simp add: PartialOrder_def A_def r_def)
   132 apply (simp add: PartialOrder_def A_def r_def)
   133 done
   133 done
   298 apply (simp add: PO_imp_trans interval_not_empty)
   298 apply (simp add: PO_imp_trans interval_not_empty)
   299 apply (simp add: PO_imp_refl [THEN reflE])
   299 apply (simp add: PO_imp_refl [THEN reflE])
   300 done
   300 done
   301 
   301 
   302 
   302 
   303 subsubsection {* sublattice *}
   303 subsection {* sublattice *}
   304 
   304 
   305 lemma (in PO) sublattice_imp_CL:
   305 lemma (in PO) sublattice_imp_CL:
   306      "S <<= cl  ==> (| pset = S, order = induced S r |) \<in> CompleteLattice"
   306      "S <<= cl  ==> (| pset = S, order = induced S r |) \<in> CompleteLattice"
   307 by (simp add: sublattice_def CompleteLattice_def A_def r_def)
   307 by (simp add: sublattice_def CompleteLattice_def A_def r_def)
   308 
   308 
   310      "[| S <= A; (| pset = S, order = induced S r |) \<in> CompleteLattice |]
   310      "[| S <= A; (| pset = S, order = induced S r |) \<in> CompleteLattice |]
   311       ==> S <<= cl"
   311       ==> S <<= cl"
   312 by (simp add: sublattice_def A_def r_def)
   312 by (simp add: sublattice_def A_def r_def)
   313 
   313 
   314 
   314 
   315 subsubsection {* lub *}
   315 subsection {* lub *}
   316 
   316 
   317 lemma (in CL) lub_unique: "[| S <= A; isLub S cl x; isLub S cl L|] ==> x = L"
   317 lemma (in CL) lub_unique: "[| S <= A; isLub S cl x; isLub S cl L|] ==> x = L"
   318 apply (rule antisymE)
   318 apply (rule antisymE)
   319 apply (rule CO_antisym)
   319 apply (rule CO_antisym)
   320 apply (auto simp add: isLub_def r_def)
   320 apply (auto simp add: isLub_def r_def)
   377      "[| L \<in> A; \<forall>y \<in> S. (y, L) \<in> r;
   377      "[| L \<in> A; \<forall>y \<in> S. (y, L) \<in> r;
   378          (\<forall>z \<in> A. (\<forall>y \<in> S. (y, z):r) --> (L, z) \<in> r)|] ==> isLub S cl L"
   378          (\<forall>z \<in> A. (\<forall>y \<in> S. (y, z):r) --> (L, z) \<in> r)|] ==> isLub S cl L"
   379 by (simp add: isLub_def A_def r_def)
   379 by (simp add: isLub_def A_def r_def)
   380 
   380 
   381 
   381 
   382 subsubsection {* glb *}
   382 subsection {* glb *}
   383 
   383 
   384 lemma (in CL) glb_in_lattice: "S <= A ==> glb S cl \<in> A"
   384 lemma (in CL) glb_in_lattice: "S <= A ==> glb S cl \<in> A"
   385 apply (subst glb_dual_lub)
   385 apply (subst glb_dual_lub)
   386 apply (simp add: A_def)
   386 apply (simp add: A_def)
   387 apply (rule dualA_iff [THEN subst])
   387 apply (rule dualA_iff [THEN subst])
   425 apply (simp add: CLF_def  CL_dualCL monotone_dual)
   425 apply (simp add: CLF_def  CL_dualCL monotone_dual)
   426 apply (simp add: dualA_iff)
   426 apply (simp add: dualA_iff)
   427 done
   427 done
   428 
   428 
   429 
   429 
   430 subsubsection {* fixed points *}
   430 subsection {* fixed points *}
   431 
   431 
   432 lemma fix_subset: "fix f A <= A"
   432 lemma fix_subset: "fix f A <= A"
   433 by (simp add: fix_def, fast)
   433 by (simp add: fix_def, fast)
   434 
   434 
   435 lemma fix_imp_eq: "x \<in> fix f A ==> f x = x"
   435 lemma fix_imp_eq: "x \<in> fix f A ==> f x = x"
   439      "[| A <= B; x \<in> fix (%y: A. f y) A |] ==> x \<in> fix f B"
   439      "[| A <= B; x \<in> fix (%y: A. f y) A |] ==> x \<in> fix f B"
   440 apply (simp add: fix_def, auto)
   440 apply (simp add: fix_def, auto)
   441 done
   441 done
   442 
   442 
   443 
   443 
   444 subsubsection {* lemmas for Tarski, lub *}
   444 subsection {* lemmas for Tarski, lub *}
   445 lemma (in CLF) lubH_le_flubH:
   445 lemma (in CLF) lubH_le_flubH:
   446      "H = {x. (x, f x) \<in> r & x \<in> A} ==> (lub H cl, f (lub H cl)) \<in> r"
   446      "H = {x. (x, f x) \<in> r & x \<in> A} ==> (lub H cl, f (lub H cl)) \<in> r"
   447 apply (rule lub_least, fast)
   447 apply (rule lub_least, fast)
   448 apply (rule f_in_funcset [THEN funcset_mem])
   448 apply (rule f_in_funcset [THEN funcset_mem])
   449 apply (rule lub_in_lattice, fast)
   449 apply (rule lub_in_lattice, fast)
   509 apply (rule impI)
   509 apply (rule impI)
   510 apply (erule bspec)
   510 apply (erule bspec)
   511 apply (rule lubH_is_fixp, assumption)
   511 apply (rule lubH_is_fixp, assumption)
   512 done
   512 done
   513 
   513 
   514 subsubsection {* Tarski fixpoint theorem 1, first part *}
   514 subsection {* Tarski fixpoint theorem 1, first part *}
   515 lemma (in CLF) T_thm_1_lub: "lub P cl = lub {x. (x, f x) \<in> r & x \<in> A} cl"
   515 lemma (in CLF) T_thm_1_lub: "lub P cl = lub {x. (x, f x) \<in> r & x \<in> A} cl"
   516 apply (rule sym)
   516 apply (rule sym)
   517 apply (simp add: P_def)
   517 apply (simp add: P_def)
   518 apply (rule lubI)
   518 apply (rule lubI)
   519 apply (rule fix_subset)
   519 apply (rule fix_subset)
   538 apply (rule dualA_iff [THEN subst])
   538 apply (rule dualA_iff [THEN subst])
   539 apply (simp add: Tarski.T_thm_1_lub [of _ f, OF dualPO CL_dualCL]
   539 apply (simp add: Tarski.T_thm_1_lub [of _ f, OF dualPO CL_dualCL]
   540                  dualPO CL_dualCL CLF_dual dualr_iff)
   540                  dualPO CL_dualCL CLF_dual dualr_iff)
   541 done
   541 done
   542 
   542 
   543 subsubsection {* interval *}
   543 subsection {* interval *}
   544 
   544 
   545 lemma (in CLF) rel_imp_elem: "(x, y) \<in> r ==> x \<in> A"
   545 lemma (in CLF) rel_imp_elem: "(x, y) \<in> r ==> x \<in> A"
   546 apply (insert CO_refl)
   546 apply (insert CO_refl)
   547 apply (simp add: refl_def, blast)
   547 apply (simp add: refl_def, blast)
   548 done
   548 done
   678 
   678 
   679 lemmas (in CLF) interv_is_compl_latt =
   679 lemmas (in CLF) interv_is_compl_latt =
   680     interval_is_sublattice [THEN sublattice_imp_CL]
   680     interval_is_sublattice [THEN sublattice_imp_CL]
   681 
   681 
   682 
   682 
   683 subsubsection {* Top and Bottom *}
   683 subsection {* Top and Bottom *}
   684 lemma (in CLF) Top_dual_Bot: "Top cl = Bot (dual cl)"
   684 lemma (in CLF) Top_dual_Bot: "Top cl = Bot (dual cl)"
   685 by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
   685 by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
   686 
   686 
   687 lemma (in CLF) Bot_dual_Top: "Bot cl = Top (dual cl)"
   687 lemma (in CLF) Bot_dual_Top: "Bot cl = Top (dual cl)"
   688 by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
   688 by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
   739                  f_cl dualPO CL_dualCL CLF_dual)
   739                  f_cl dualPO CL_dualCL CLF_dual)
   740 apply (simp add: Tarski.Top_intv_not_empty [of _ f]
   740 apply (simp add: Tarski.Top_intv_not_empty [of _ f]
   741                  dualA_iff A_def dualPO CL_dualCL CLF_dual)
   741                  dualA_iff A_def dualPO CL_dualCL CLF_dual)
   742 done
   742 done
   743 
   743 
   744 subsubsection {* fixed points form a partial order *}
   744 subsection {* fixed points form a partial order *}
   745 
   745 
   746 lemma (in CLF) fixf_po: "(| pset = P, order = induced P r|) \<in> PartialOrder"
   746 lemma (in CLF) fixf_po: "(| pset = P, order = induced P r|) \<in> PartialOrder"
   747 by (simp add: P_def fix_subset po_subset_po)
   747 by (simp add: P_def fix_subset po_subset_po)
   748 
   748 
   749 lemma (in Tarski) Y_subset_A: "Y <= A"
   749 lemma (in Tarski) Y_subset_A: "Y <= A"