66 |
66 |
67 CompleteLattice :: "('a potype) set" |
67 CompleteLattice :: "('a potype) set" |
68 "CompleteLattice == {cl. cl: PartialOrder & |
68 "CompleteLattice == {cl. cl: PartialOrder & |
69 (\<forall>S. S \<subseteq> pset cl --> (\<exists>L. isLub S cl L)) & |
69 (\<forall>S. S \<subseteq> pset cl --> (\<exists>L. isLub S cl L)) & |
70 (\<forall>S. S \<subseteq> pset cl --> (\<exists>G. isGlb S cl G))}" |
70 (\<forall>S. S \<subseteq> pset cl --> (\<exists>G. isGlb S cl G))}" |
71 |
|
72 CLF :: "('a potype * ('a => 'a)) set" |
|
73 "CLF == SIGMA cl: CompleteLattice. |
|
74 {f. f: pset cl -> pset cl & monotone f (pset cl) (order cl)}" |
|
75 |
71 |
76 induced :: "['a set, ('a * 'a) set] => ('a *'a)set" |
72 induced :: "['a set, ('a * 'a) set] => ('a *'a)set" |
77 "induced A r == {(a,b). a : A & b: A & (a,b): r}" |
73 "induced A r == {(a,b). a : A & b: A & (a,b): r}" |
78 |
74 |
79 constdefs |
75 constdefs |
91 |
87 |
92 constdefs |
88 constdefs |
93 dual :: "'a potype => 'a potype" |
89 dual :: "'a potype => 'a potype" |
94 "dual po == (| pset = pset po, order = converse (order po) |)" |
90 "dual po == (| pset = pset po, order = converse (order po) |)" |
95 |
91 |
96 locale (open) PO = |
92 locale PO = |
97 fixes cl :: "'a potype" |
93 fixes cl :: "'a potype" |
98 and A :: "'a set" |
94 and A :: "'a set" |
99 and r :: "('a * 'a) set" |
95 and r :: "('a * 'a) set" |
100 assumes cl_po: "cl : PartialOrder" |
96 assumes cl_po: "cl : PartialOrder" |
101 defines A_def: "A == pset cl" |
97 defines A_def: "A == pset cl" |
102 and r_def: "r == order cl" |
98 and r_def: "r == order cl" |
103 |
99 |
104 locale (open) CL = PO + |
100 locale CL = PO + |
105 assumes cl_co: "cl : CompleteLattice" |
101 assumes cl_co: "cl : CompleteLattice" |
106 |
102 |
107 locale (open) CLF = CL + |
103 definition CLF_set :: "('a potype * ('a => 'a)) set" where |
|
104 "CLF_set = (SIGMA cl: CompleteLattice. |
|
105 {f. f: pset cl -> pset cl & monotone f (pset cl) (order cl)})" |
|
106 |
|
107 locale CLF = CL + |
108 fixes f :: "'a => 'a" |
108 fixes f :: "'a => 'a" |
109 and P :: "'a set" |
109 and P :: "'a set" |
110 assumes f_cl: "(cl,f) : CLF" (*was the equivalent "f : CLF``{cl}"*) |
110 assumes f_cl: "(cl,f) : CLF_set" (*was the equivalent "f : CLF``{cl}"*) |
111 defines P_def: "P == fix f A" |
111 defines P_def: "P == fix f A" |
112 |
112 |
113 |
113 |
114 locale (open) Tarski = CLF + |
114 locale Tarski = CLF + |
115 fixes Y :: "'a set" |
115 fixes Y :: "'a set" |
116 and intY1 :: "'a set" |
116 and intY1 :: "'a set" |
117 and v :: "'a" |
117 and v :: "'a" |
118 assumes |
118 assumes |
119 Y_ss: "Y \<subseteq> P" |
119 Y_ss: "Y \<subseteq> P" |
228 lemma CL_subset_PO: "CompleteLattice \<subseteq> PartialOrder" |
228 lemma CL_subset_PO: "CompleteLattice \<subseteq> PartialOrder" |
229 by (simp add: PartialOrder_def CompleteLattice_def, fast) |
229 by (simp add: PartialOrder_def CompleteLattice_def, fast) |
230 |
230 |
231 lemmas CL_imp_PO = CL_subset_PO [THEN subsetD] |
231 lemmas CL_imp_PO = CL_subset_PO [THEN subsetD] |
232 |
232 |
233 declare CL_imp_PO [THEN PO.PO_imp_refl, simp] |
233 declare PO.PO_imp_refl [OF PO.intro [OF CL_imp_PO], simp] |
234 declare CL_imp_PO [THEN PO.PO_imp_sym, simp] |
234 declare PO.PO_imp_sym [OF PO.intro [OF CL_imp_PO], simp] |
235 declare CL_imp_PO [THEN PO.PO_imp_trans, simp] |
235 declare PO.PO_imp_trans [OF PO.intro [OF CL_imp_PO], simp] |
236 |
236 |
237 lemma (in CL) CO_refl: "refl A r" |
237 lemma (in CL) CO_refl: "refl A r" |
238 by (rule PO_imp_refl) |
238 by (rule PO_imp_refl) |
239 |
239 |
240 lemma (in CL) CO_antisym: "antisym r" |
240 lemma (in CL) CO_antisym: "antisym r" |
383 lemma (in CL) glb_in_lattice: "S \<subseteq> A ==> glb S cl \<in> A" |
383 lemma (in CL) glb_in_lattice: "S \<subseteq> A ==> glb S cl \<in> A" |
384 apply (subst glb_dual_lub) |
384 apply (subst glb_dual_lub) |
385 apply (simp add: A_def) |
385 apply (simp add: A_def) |
386 apply (rule dualA_iff [THEN subst]) |
386 apply (rule dualA_iff [THEN subst]) |
387 apply (rule CL.lub_in_lattice) |
387 apply (rule CL.lub_in_lattice) |
|
388 apply (rule CL.intro) |
|
389 apply (rule PO.intro) |
388 apply (rule dualPO) |
390 apply (rule dualPO) |
|
391 apply (rule CL_axioms.intro) |
389 apply (rule CL_dualCL) |
392 apply (rule CL_dualCL) |
390 apply (simp add: dualA_iff) |
393 apply (simp add: dualA_iff) |
391 done |
394 done |
392 |
395 |
393 lemma (in CL) glb_lower: "[|S \<subseteq> A; x \<in> S|] ==> (glb S cl, x) \<in> r" |
396 lemma (in CL) glb_lower: "[|S \<subseteq> A; x \<in> S|] ==> (glb S cl, x) \<in> r" |
394 apply (subst glb_dual_lub) |
397 apply (subst glb_dual_lub) |
395 apply (simp add: r_def) |
398 apply (simp add: r_def) |
396 apply (rule dualr_iff [THEN subst]) |
399 apply (rule dualr_iff [THEN subst]) |
397 apply (rule CL.lub_upper) |
400 apply (rule CL.lub_upper) |
|
401 apply (rule CL.intro) |
|
402 apply (rule PO.intro) |
398 apply (rule dualPO) |
403 apply (rule dualPO) |
|
404 apply (rule CL_axioms.intro) |
399 apply (rule CL_dualCL) |
405 apply (rule CL_dualCL) |
400 apply (simp add: dualA_iff A_def, assumption) |
406 apply (simp add: dualA_iff A_def, assumption) |
401 done |
407 done |
402 |
408 |
403 text {* |
409 text {* |
412 allow reasoning with rules like conjE, which is essential here.*) |
418 allow reasoning with rules like conjE, which is essential here.*) |
413 ML_command{*ResAtp.problem_name:="Tarski__CLF_unnamed_lemma"*} |
419 ML_command{*ResAtp.problem_name:="Tarski__CLF_unnamed_lemma"*} |
414 lemma (in CLF) [simp]: |
420 lemma (in CLF) [simp]: |
415 "f: pset cl -> pset cl & monotone f (pset cl) (order cl)" |
421 "f: pset cl -> pset cl & monotone f (pset cl) (order cl)" |
416 apply (insert f_cl) |
422 apply (insert f_cl) |
417 apply (unfold CLF_def) |
423 apply (unfold CLF_set_def) |
418 apply (erule SigmaE2) |
424 apply (erule SigmaE2) |
419 apply (erule CollectE) |
425 apply (erule CollectE) |
420 apply assumption; |
426 apply assumption |
421 done |
427 done |
422 |
428 |
423 lemma (in CLF) f_in_funcset: "f \<in> A -> A" |
429 lemma (in CLF) f_in_funcset: "f \<in> A -> A" |
424 by (simp add: A_def) |
430 by (simp add: A_def) |
425 |
431 |
426 lemma (in CLF) monotone_f: "monotone f A r" |
432 lemma (in CLF) monotone_f: "monotone f A r" |
427 by (simp add: A_def r_def) |
433 by (simp add: A_def r_def) |
428 |
434 |
429 (*never proved, 2007-01-22*) |
435 (*never proved, 2007-01-22*) |
430 ML_command{*ResAtp.problem_name:="Tarski__CLF_CLF_dual"*} |
436 ML_command{*ResAtp.problem_name:="Tarski__CLF_CLF_dual"*} |
431 declare (in CLF) CLF_def[simp] CL_dualCL[simp] monotone_dual[simp] dualA_iff[simp] |
437 declare (in CLF) CLF_set_def [simp] CL_dualCL [simp] monotone_dual [simp] dualA_iff [simp] |
432 lemma (in CLF) CLF_dual: "(dual cl, f) \<in> CLF" |
438 |
|
439 lemma (in CLF) CLF_dual: "(dual cl, f) \<in> CLF_set" |
433 apply (simp del: dualA_iff) |
440 apply (simp del: dualA_iff) |
434 apply (simp) |
441 apply (simp) |
435 done |
442 done |
436 declare (in CLF) CLF_def[simp del] CL_dualCL[simp del] monotone_dual[simp del] |
443 |
|
444 declare (in CLF) CLF_set_def[simp del] CL_dualCL[simp del] monotone_dual[simp del] |
437 dualA_iff[simp del] |
445 dualA_iff[simp del] |
438 |
446 |
439 |
447 |
440 subsection {* fixed points *} |
448 subsection {* fixed points *} |
441 |
449 |
637 -- {* Tarski for glb *} |
645 -- {* Tarski for glb *} |
638 (*sledgehammer;*) |
646 (*sledgehammer;*) |
639 apply (simp add: glb_dual_lub P_def A_def r_def) |
647 apply (simp add: glb_dual_lub P_def A_def r_def) |
640 apply (rule dualA_iff [THEN subst]) |
648 apply (rule dualA_iff [THEN subst]) |
641 apply (rule CLF.lubH_is_fixp) |
649 apply (rule CLF.lubH_is_fixp) |
|
650 apply (rule CLF.intro) |
|
651 apply (rule CL.intro) |
|
652 apply (rule PO.intro) |
642 apply (rule dualPO) |
653 apply (rule dualPO) |
|
654 apply (rule CL_axioms.intro) |
643 apply (rule CL_dualCL) |
655 apply (rule CL_dualCL) |
|
656 apply (rule CLF_axioms.intro) |
644 apply (rule CLF_dual) |
657 apply (rule CLF_dual) |
645 apply (simp add: dualr_iff dualA_iff) |
658 apply (simp add: dualr_iff dualA_iff) |
646 done |
659 done |
647 declare glb_dual_lub[simp del] PO.dualA_iff[rule del] CLF.lubH_is_fixp[rule del] |
660 declare glb_dual_lub[simp del] PO.dualA_iff[rule del] CLF.lubH_is_fixp[rule del] |
648 PO.dualPO[rule del] CL.CL_dualCL[rule del] PO.dualr_iff[simp del] |
661 PO.dualPO[rule del] CL.CL_dualCL[rule del] PO.dualr_iff[simp del] |
655 apply (simp add: glb_dual_lub P_def A_def r_def) |
668 apply (simp add: glb_dual_lub P_def A_def r_def) |
656 apply (rule dualA_iff [THEN subst]) |
669 apply (rule dualA_iff [THEN subst]) |
657 (*never proved, 2007-01-22*) |
670 (*never proved, 2007-01-22*) |
658 ML_command{*ResAtp.problem_name:="Tarski__T_thm_1_glb_simpler"*} (*ALL THEOREMS*) |
671 ML_command{*ResAtp.problem_name:="Tarski__T_thm_1_glb_simpler"*} (*ALL THEOREMS*) |
659 (*sledgehammer;*) |
672 (*sledgehammer;*) |
660 apply (simp add: CLF.T_thm_1_lub [of _ f, OF dualPO CL_dualCL] |
673 apply (simp add: CLF.T_thm_1_lub [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro, |
661 dualPO CL_dualCL CLF_dual dualr_iff) |
674 OF dualPO CL_dualCL] dualPO CL_dualCL CLF_dual dualr_iff) |
662 done |
675 done |
663 |
676 |
664 subsection {* interval *} |
677 subsection {* interval *} |
665 |
678 |
666 |
679 |
727 ML{*ResAtp.problem_name:="Tarski__G_in_interval"*} (*ALL THEOREMS*) |
740 ML{*ResAtp.problem_name:="Tarski__G_in_interval"*} (*ALL THEOREMS*) |
728 lemma (in CLF) G_in_interval: |
741 lemma (in CLF) G_in_interval: |
729 "[| a \<in> A; b \<in> A; interval r a b \<noteq> {}; S \<subseteq> interval r a b; isGlb S cl G; |
742 "[| a \<in> A; b \<in> A; interval r a b \<noteq> {}; S \<subseteq> interval r a b; isGlb S cl G; |
730 S \<noteq> {} |] ==> G \<in> interval r a b" |
743 S \<noteq> {} |] ==> G \<in> interval r a b" |
731 apply (simp add: interval_dual) |
744 apply (simp add: interval_dual) |
732 apply (simp add: CLF.L_in_interval [of _ f] |
745 apply (simp add: CLF.L_in_interval [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro] |
733 dualA_iff A_def dualPO CL_dualCL CLF_dual isGlb_dual_isLub) |
746 dualA_iff A_def dualPO CL_dualCL CLF_dual isGlb_dual_isLub) |
734 done |
747 done |
735 |
748 |
736 ML{*ResAtp.problem_name:="Tarski__intervalPO"*} (*ALL THEOREMS*) |
749 ML{*ResAtp.problem_name:="Tarski__intervalPO"*} (*ALL THEOREMS*) |
737 lemma (in CLF) intervalPO: |
750 lemma (in CLF) intervalPO: |
849 apply (simp add: Top_dual_Bot A_def) |
862 apply (simp add: Top_dual_Bot A_def) |
850 (*first proved 2007-01-25 after relaxing relevance*) |
863 (*first proved 2007-01-25 after relaxing relevance*) |
851 ML_command{*ResAtp.problem_name:="Tarski__Top_in_lattice_simpler"*} (*ALL THEOREMS*) |
864 ML_command{*ResAtp.problem_name:="Tarski__Top_in_lattice_simpler"*} (*ALL THEOREMS*) |
852 (*sledgehammer*) |
865 (*sledgehammer*) |
853 apply (rule dualA_iff [THEN subst]) |
866 apply (rule dualA_iff [THEN subst]) |
854 apply (blast intro!: CLF.Bot_in_lattice dualPO CL_dualCL CLF_dual) |
867 apply (blast intro!: CLF.Bot_in_lattice [OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro] dualPO CL_dualCL CLF_dual) |
855 done |
868 done |
856 |
869 |
857 lemma (in CLF) Top_prop: "x \<in> A ==> (x, Top cl) \<in> r" |
870 lemma (in CLF) Top_prop: "x \<in> A ==> (x, Top cl) \<in> r" |
858 apply (simp add: Top_def greatest_def) |
871 apply (simp add: Top_def greatest_def) |
859 apply (rule_tac a="lub A cl" in someI2) |
872 apply (rule_tac a="lub A cl" in someI2) |
866 ML_command{*ResAtp.problem_name:="Tarski__Bot_prop"*} (*ALL THEOREMS*) |
879 ML_command{*ResAtp.problem_name:="Tarski__Bot_prop"*} (*ALL THEOREMS*) |
867 lemma (in CLF) Bot_prop: "x \<in> A ==> (Bot cl, x) \<in> r" |
880 lemma (in CLF) Bot_prop: "x \<in> A ==> (Bot cl, x) \<in> r" |
868 (*sledgehammer*) |
881 (*sledgehammer*) |
869 apply (simp add: Bot_dual_Top r_def) |
882 apply (simp add: Bot_dual_Top r_def) |
870 apply (rule dualr_iff [THEN subst]) |
883 apply (rule dualr_iff [THEN subst]) |
871 apply (simp add: CLF.Top_prop [of _ f] |
884 apply (simp add: CLF.Top_prop [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro] |
872 dualA_iff A_def dualPO CL_dualCL CLF_dual) |
885 dualA_iff A_def dualPO CL_dualCL CLF_dual) |
873 done |
886 done |
874 |
887 |
875 ML_command{*ResAtp.problem_name:="Tarski__Bot_in_lattice"*} (*ALL THEOREMS*) |
888 ML_command{*ResAtp.problem_name:="Tarski__Bot_in_lattice"*} (*ALL THEOREMS*) |
876 lemma (in CLF) Top_intv_not_empty: "x \<in> A ==> interval r x (Top cl) \<noteq> {}" |
889 lemma (in CLF) Top_intv_not_empty: "x \<in> A ==> interval r x (Top cl) \<noteq> {}" |
994 lemma (in Tarski) v_in_P: "v \<in> P" |
1007 lemma (in Tarski) v_in_P: "v \<in> P" |
995 (*sledgehammer*) |
1008 (*sledgehammer*) |
996 apply (unfold P_def) |
1009 apply (unfold P_def) |
997 apply (rule_tac A = "intY1" in fixf_subset) |
1010 apply (rule_tac A = "intY1" in fixf_subset) |
998 apply (rule intY1_subset) |
1011 apply (rule intY1_subset) |
999 apply (simp add: CLF.glbH_is_fixp [OF _ intY1_is_cl, simplified] |
1012 apply (simp add: CLF.glbH_is_fixp [OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified] |
1000 v_def CL_imp_PO intY1_is_cl CLF_def intY1_func intY1_mono) |
1013 v_def CL_imp_PO intY1_is_cl CLF_set_def intY1_func intY1_mono) |
1001 done |
1014 done |
1002 |
1015 |
1003 ML_command{*ResAtp.problem_name:="Tarski__z_in_interval"*} (*ALL THEOREMS*) |
1016 ML_command{*ResAtp.problem_name:="Tarski__z_in_interval"*} (*ALL THEOREMS*) |
1004 lemma (in Tarski) z_in_interval: |
1017 lemma (in Tarski) z_in_interval: |
1005 "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |] ==> z \<in> intY1" |
1018 "[| z \<in> P; \<forall>y\<in>Y. (y, z) \<in> induced P r |] ==> z \<in> intY1" |
1040 apply (rule lub_upper) |
1053 apply (rule lub_upper) |
1041 apply (rule Y_subset_A, assumption) |
1054 apply (rule Y_subset_A, assumption) |
1042 apply (rule_tac b = "Top cl" in interval_imp_mem) |
1055 apply (rule_tac b = "Top cl" in interval_imp_mem) |
1043 apply (simp add: v_def) |
1056 apply (simp add: v_def) |
1044 apply (fold intY1_def) |
1057 apply (fold intY1_def) |
1045 apply (rule CL.glb_in_lattice [OF _ intY1_is_cl, simplified]) |
1058 apply (rule CL.glb_in_lattice [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified]) |
1046 apply (simp add: CL_imp_PO intY1_is_cl, force) |
1059 apply (simp add: CL_imp_PO intY1_is_cl, force) |
1047 -- {* @{text v} is LEAST ub *} |
1060 -- {* @{text v} is LEAST ub *} |
1048 apply clarify |
1061 apply clarify |
1049 apply (rule indI) |
1062 apply (rule indI) |
1050 prefer 3 apply assumption |
1063 prefer 3 apply assumption |
1056 apply (rule indE) |
1069 apply (rule indE) |
1057 apply (rule_tac [2] intY1_subset) |
1070 apply (rule_tac [2] intY1_subset) |
1058 (*never proved, 2007-01-22*) |
1071 (*never proved, 2007-01-22*) |
1059 ML_command{*ResAtp.problem_name:="Tarski__tarski_full_lemma_simplest"*} |
1072 ML_command{*ResAtp.problem_name:="Tarski__tarski_full_lemma_simplest"*} |
1060 (*sledgehammer*) |
1073 (*sledgehammer*) |
1061 apply (rule CL.glb_lower [OF _ intY1_is_cl, simplified]) |
1074 apply (rule CL.glb_lower [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified]) |
1062 apply (simp add: CL_imp_PO intY1_is_cl) |
1075 apply (simp add: CL_imp_PO intY1_is_cl) |
1063 apply force |
1076 apply force |
1064 apply (simp add: induced_def intY1_f_closed z_in_interval) |
1077 apply (simp add: induced_def intY1_f_closed z_in_interval) |
1065 apply (simp add: P_def fix_imp_eq [of _ f A] reflE |
1078 apply (simp add: P_def fix_imp_eq [of _ f A] reflE |
1066 fix_subset [of f A, THEN subsetD]) |
1079 fix_subset [of f A, THEN subsetD]) |
1085 apply (rule fixf_po, clarify) |
1098 apply (rule fixf_po, clarify) |
1086 (*never proved, 2007-01-22*) |
1099 (*never proved, 2007-01-22*) |
1087 ML_command{*ResAtp.problem_name:="Tarski__Tarski_full_simpler"*} |
1100 ML_command{*ResAtp.problem_name:="Tarski__Tarski_full_simpler"*} |
1088 (*sledgehammer*) |
1101 (*sledgehammer*) |
1089 apply (simp add: P_def A_def r_def) |
1102 apply (simp add: P_def A_def r_def) |
1090 apply (blast intro!: Tarski.tarski_full_lemma cl_po cl_co f_cl) |
1103 apply (blast intro!: Tarski.tarski_full_lemma [OF Tarski.intro, OF CLF.intro Tarski_axioms.intro, |
|
1104 OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro] cl_po cl_co f_cl) |
1091 done |
1105 done |
1092 declare (in CLF) fixf_po[rule del] P_def [simp del] A_def [simp del] r_def [simp del] |
1106 declare (in CLF) fixf_po[rule del] P_def [simp del] A_def [simp del] r_def [simp del] |
1093 Tarski.tarski_full_lemma [rule del] cl_po [rule del] cl_co [rule del] |
1107 Tarski.tarski_full_lemma [rule del] cl_po [rule del] cl_co [rule del] |
1094 CompleteLatticeI_simp [rule del] |
1108 CompleteLatticeI_simp [rule del] |
1095 |
1109 |