(* Title: HOL/Metis_Examples/Tarski.thy Author: Lawrence C. Paulson, Cambridge University Computer Laboratory Author: Jasmin Blanchette, TU Muenchen Metis example featuring the full theorem of Tarski. *)
section‹Metis Example Featuring the Full Theorem of Tarski›
theory Tarski imports Main "HOL-Library.FuncSet" begin
declare [[metis_new_skolem]]
(*Many of these higher-order problems appear to be impossible using the current linkup. They often seem to need either higher-order unification or explicit reasoning about connectives such as conjunction. The numerous set comprehensions are to blame.*)
record 'a potype =
pset :: "'a set"
order :: "('a * 'a) set"
definition monotone :: "['a => 'a, 'a set, ('a *'a)set] => bool"where "monotone f A r == ∀x∈A. ∀y∈A. (x, y) ∈ r --> ((f x), (f y)) ∈ r"
definition least :: "['a => bool, 'a potype] => 'a"where "least P po ≡ SOME x. x ∈ pset po ∧ P x ∧ (∀y ∈ pset po. P y ⟶ (x,y) ∈ order po)"
definition greatest :: "['a => bool, 'a potype] => 'a"where "greatest P po ≡ SOME x. x ∈ pset po ∧ P x ∧ (∀y ∈ pset po. P y ⟶ (y,x) ∈ order po)"
definition lub :: "['a set, 'a potype] => 'a"where "lub S po == least (λx. ∀y∈S. (y,x) ∈ order po) po"
definition glb :: "['a set, 'a potype] => 'a"where "glb S po ≡ greatest (λx. ∀y∈S. (x,y) ∈ order po) po"
definition isLub :: "['a set, 'a potype, 'a] => bool"where "isLub S po ≡ λL. (L ∈ pset po ∧ (∀y∈S. (y,L) ∈ order po) ∧ (∀z∈pset po. (∀y∈S. (y,z) ∈ order po) ⟶ (L,z) ∈ order po))"
definition isGlb :: "['a set, 'a potype, 'a] => bool"where "isGlb S po ≡ λG. (G ∈ pset po ∧ (∀y∈S. (G,y) ∈ order po) ∧ (∀z ∈ pset po. (∀y∈S. (z,y) ∈ order po) ⟶ (z,G) ∈ order po))"
definition"fix" :: "[('a => 'a), 'a set] => 'a set"where "fix f A ≡ {x. x ∈ A ∧ f x = x}"
definition interval :: "[('a*'a) set,'a, 'a ] => 'a set"where "interval r a b == {x. (a,x) ∈ r & (x,b) ∈ r}"
definition Bot :: "'a potype => 'a"where "Bot po == least (λx. True) po"
definition Top :: "'a potype => 'a"where "Top po == greatest (λx. True) po"
definition PartialOrder :: "('a potype) set"where "PartialOrder ≡ {P. order P ⊆ pset P × pset P ∧ refl_on (pset P) (order P) ∧ antisym (order P) ∧ trans (order P)}"
definition CompleteLattice :: "('a potype) set"where "CompleteLattice == {cl. cl ∈ PartialOrder ∧ (∀S. S ⊆ pset cl ⟶ (∃L. isLub S cl L)) ∧ (∀S. S ⊆ pset cl ⟶ (∃G. isGlb S cl G))}"
definition induced :: "['a set, ('a * 'a) set] => ('a *'a)set"where "induced A r ≡ {(a,b). a ∈ A ∧ b ∈ A ∧ (a,b) ∈ r}"
definition sublattice :: "('a potype * 'a set)set"where "sublattice ≡ SIGMA cl : CompleteLattice. {S. S ⊆ pset cl ∧ (pset = S, order = induced S (order cl))∈ CompleteLattice}"
definition dual :: "'a potype => 'a potype"where "dual po == (| pset = pset po, order = converse (order po) |)"
locale PO = fixes cl :: "'a potype" and A :: "'a set" and r :: "('a * 'a) set" assumes cl_po: "cl ∈ PartialOrder" defines A_def: "A == pset cl" and r_def: "r == order cl"
locale CL = PO + assumes cl_co: "cl ∈ CompleteLattice"
locale CLF = CL + fixes f :: "'a => 'a" and P :: "'a set" assumes f_cl: "(cl,f) ∈ CLF_set"(*was the equivalent "f : CLF``{cl}"*) defines P_def: "P == fix f A"
locale Tarski = CLF + fixes Y :: "'a set" and intY1 :: "'a set" and v :: "'a" assumes
Y_ss: "Y ⊆ P" defines
intY1_def: "intY1 == interval r (lub Y cl) (Top cl)" and v_def: "v == glb {x. ((λx ∈ intY1. f x) x, x) ∈ induced intY1 r ∧ x ∈ intY1} (pset=intY1, order=induced intY1 r)"
subsection‹Partial Order›
lemma (in PO) PO_imp_refl_on: "refl_on A r" apply (insert cl_po) apply (simp add: PartialOrder_def A_def r_def) done
lemma Rdual: "∀S. (S ⊆ A -->( ∃L. isLub S (| pset = A, order = r|) L)) ==> ∀S. (S ⊆ A --> (∃G. isGlb S (| pset = A, order = r|) G))" apply safe apply (rule_tac x = "lub {y. y ∈ A & (∀k ∈ S. (y, k) ∈ r)} (|pset = A, order = r|) "in exI) apply (drule_tac x = "{y. y ∈ A & (∀k ∈ S. (y,k) ∈ r) }"in spec) apply (drule mp, fast) apply (simp add: isLub_lub isGlb_def) apply (simp add: isLub_def, blast) done
lemma lub_dual_glb: "lub S cl = glb S (dual cl)" by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold)
lemma glb_dual_lub: "glb S cl = lub S (dual cl)" by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold)
lemma (in CL) CO_refl_on: "refl_on A r" by (rule PO_imp_refl_on)
lemma (in CL) CO_antisym: "antisym r" by (rule PO_imp_sym)
lemma (in CL) CO_trans: "trans r" by (rule PO_imp_trans)
lemma CompleteLatticeI: "[| po ∈ PartialOrder; (∀S. S ⊆ pset po --> (∃L. isLub S po L)); (∀S. S ⊆ pset po --> (∃G. isGlb S po G))|] ==> po ∈ CompleteLattice" apply (unfold CompleteLattice_def, blast) done
lemma (in PO) dualA_iff: "pset (dual cl) = pset cl" by (simp add: dual_def)
lemma (in PO) dualr_iff: "((x, y) ∈ (order(dual cl))) = ((y, x) ∈ order cl)" by (simp add: dual_def)
lemma (in PO) monotone_dual: "monotone f (pset cl) (order cl) ==> monotone f (pset (dual cl)) (order(dual cl))" by (simp add: monotone_def dualA_iff dualr_iff)
lemma (in PO) interval_dual: "[| x ∈ A; y ∈ A|] ==> interval r x y = interval (order(dual cl)) y x" apply (simp add: interval_def dualr_iff) apply (fold r_def, fast) done
lemma (in PO) interval_not_empty: "[| trans r; interval r a b ≠ {} |] ==> (a, b) ∈ r" apply (simp add: interval_def) apply (unfold trans_def, blast) done
lemma (in PO) interval_imp_mem: "x ∈ interval r a b ==> (a, x) ∈ r" by (simp add: interval_def)
lemma (in PO) left_in_interval: "[| a ∈ A; b ∈ A; interval r a b ≠ {} |] ==> a ∈ interval r a b" apply (simp (no_asm_simp) add: interval_def) apply (simp add: PO_imp_trans interval_not_empty) apply (simp add: reflE) done
lemma (in PO) right_in_interval: "[| a ∈ A; b ∈ A; interval r a b ≠ {} |] ==> b ∈ interval r a b" apply (simp (no_asm_simp) add: interval_def) apply (simp add: PO_imp_trans interval_not_empty) apply (simp add: reflE) done
subsection‹sublattice›
lemma (in PO) sublattice_imp_CL: "S <<= cl ==> (| pset = S, order = induced S r |) ∈ CompleteLattice" by (simp add: sublattice_def CompleteLattice_def A_def r_def)
lemma (in CL) sublatticeI: "[| S ⊆ A; (| pset = S, order = induced S r |) ∈ CompleteLattice |] ==> S <<= cl" by (simp add: sublattice_def A_def r_def)
subsection‹lub›
lemma (in CL) lub_unique: "[| S ⊆ A; isLub S cl x; isLub S cl L|] ==> x = L" apply (rule antisymE) apply (auto simp add: isLub_def r_def) done
text‹ Reduce the sublattice property by using substructural properties; abandoned see ‹Tarski_4.ML›. ›
declare (in CLF) f_cl [simp]
lemma (in CLF) [simp]: "f ∈ pset cl → pset cl ∧ monotone f (pset cl) (order cl)" proof - have"∀u v. (v, u) ∈ CLF_set ⟶ u ∈ {R ∈ pset v → pset v. monotone R (pset v) (order v)}" unfolding CLF_set_def using SigmaE2 by blast hence F1: "∀u v. (v, u) ∈ CLF_set ⟶ u ∈ pset v → pset v ∧ monotone u (pset v) (order v)" using CollectE by blast hence"Tarski.monotone f (pset cl) (order cl)"by (metis f_cl) hence"(cl, f) ∈ CLF_set ∧ Tarski.monotone f (pset cl) (order cl)" by (metis f_cl) thus"f ∈ pset cl → pset cl ∧ Tarski.monotone f (pset cl) (order cl)" using F1 by metis qed
lemma (in CLF) f_in_funcset: "f ∈ A → A" by (simp add: A_def)
lemma (in CLF) monotone_f: "monotone f A r" by (simp add: A_def r_def)
lemma (in CLF) lubH_le_flubH: "H = {x. (x, f x) ∈ r & x ∈ A} ==> (lub H cl, f (lub H cl)) ∈ r" apply (rule lub_least, fast) apply (rule f_in_funcset [THEN funcset_mem]) apply (rule lub_in_lattice, fast) 🍋‹‹∀x:H. (x, f (lub H r)) ∈ r›\apply (rule ballI) (*never proved, 2007-01-22*) apply (rule transE) 🍋‹instantiates ‹(x, ?z) ∈ order cl to (x, f x)›,\<close> 🍋‹because of the definition of ‹H›\apply fast 🍋‹so it remains to show ‹(f x, f (lub H cl)) ∈ r›\apply (rule_tac f = "f"in monotoneE) apply (rule monotone_f, fast) apply (rule lub_in_lattice, fast) apply (rule lub_upper, fast) apply assumption done
lemma (in CLF) flubH_le_lubH: "[| H = {x. (x, f x) ∈ r & x ∈ A} |] ==> (f (lub H cl), lub H cl) ∈ r" apply (rule lub_upper, fast) apply (rule_tac t = "H"in ssubst, assumption) apply (rule CollectI) by (metis (lifting) Pi_iff f_in_funcset lubH_le_flubH lub_in_lattice
mem_Collect_eq monotoneE monotone_f subsetI)
(* Single-step version fails. The conjecture clauses refer to local abstraction functions (Frees). *) lemma (in CLF) lubH_is_fixp: "H = {x. (x, f x) ∈ r & x ∈ A} ==> lub H cl ∈ fix f A" apply (simp add: fix_def) apply (rule conjI) proof - assume A1: "H = {x. (x, f x) ∈ r ∧ x ∈ A}" have F1: "∀u v. v ∩ u ⊆ u"by (metis Int_commute Int_lower1) have"{R. (R, f R) ∈ r} ∩ {R. R ∈ A} = H"using A1 by (metis Collect_conj_eq) hence"H ⊆ {R. R ∈ A}"using F1 by metis hence"H ⊆ A"by (metis Collect_mem_eq) hence"lub H cl ∈ A"by (metis lub_in_lattice) thus"lub {x. (x, f x) ∈ r ∧ x ∈ A} cl ∈ A"using A1 by metis next assume A1: "H = {x. (x, f x) ∈ r ∧ x ∈ A}" have F1: "∀v. {R. R ∈ v} = v"by (metis Collect_mem_eq) have F2: "∀w u. {R. R ∈ u ∧ R ∈ w} = u ∩ w" by (metis Collect_conj_eq Collect_mem_eq) have F3: "∀x v. {R. v R ∈ x} = v -` x"by (metis vimage_def) hence F4: "A ∩ (λR. (R, f R)) -` r = H"using A1 by auto hence F5: "(f (lub H cl), lub H cl) ∈ r" by (metis A1 flubH_le_lubH) have F6: "(lub H cl, f (lub H cl)) ∈ r" by (metis A1 lubH_le_flubH) have"(lub H cl, f (lub H cl)) ∈ r ⟶ f (lub H cl) = lub H cl" using F5 by (metis antisymE) hence"f (lub H cl) = lub H cl"using F6 by metis thus"H = {x. (x, f x) ∈ r ∧ x ∈ A} ==> f (lub {x. (x, f x) ∈ r ∧ x ∈ A} cl) = lub {x. (x, f x) ∈ r ∧ x ∈ A} cl" by metis qed
lemma (in CLF) (*lubH_is_fixp:*) "H = {x. (x, f x) ∈ r & x ∈ A} ==> lub H cl ∈ fix f A" apply (simp add: fix_def) apply (rule conjI)
subgoal by (metis (lifting) fix_def lubH_is_fixp mem_Collect_eq)
subgoal by (metis antisymE flubH_le_lubH lubH_le_flubH) done
lemma (in CLF) fix_in_H: "[| H = {x. (x, f x) ∈ r & x ∈ A}; x ∈ P |] ==> x ∈ H" by (simp add: P_def fix_imp_eq [of _ f A] reflE CO_refl_on
fix_subset [of f A, THEN subsetD])
lemma (in CLF) fixf_le_lubH: "H = {x. (x, f x) ∈ r & x ∈ A} ==> ∀x ∈ fix f A. (x, lub H cl) ∈ r" apply (rule ballI) apply (rule lub_upper, fast) apply (rule fix_in_H) apply (simp_all add: P_def) done
lemma (in CLF) lubH_least_fixf: "H = {x. (x, f x) ∈ r & x ∈ A} ==> ∀L. (∀y ∈ fix f A. (y,L) ∈ r) --> (lub H cl, L) ∈ r" apply (metis P_def lubH_is_fixp) done
lemma (in CLF) T_thm_1_glb: "glb P cl = glb {x. (f x, x) ∈ r & x ∈ A} cl" (*sledgehammer;*) apply (simp add: glb_dual_lub P_def A_def r_def) apply (rule dualA_iff [THEN subst]) (*never proved, 2007-01-22*) (*sledgehammer;*) 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,
OF dualPO CL_dualCL] dualPO CL_dualCL CLF_dual dualr_iff) done
subsection‹interval›
declare (in CLF) CO_refl_on[simp] refl_on_def [simp]
lemma (in CLF) rel_imp_elem: "(x, y) ∈ r ==> x ∈ A" by (metis (no_types, lifting) A_def PartialOrder_def cl_po mem_Collect_eq
mem_Sigma_iff r_def subsetD)
declare (in CLF) CO_refl_on[simp del] refl_on_def [simp del]
declare (in CLF) rel_imp_elem[intro] declare interval_def [simp]
lemma (in CLF) interval_subset: "[| a ∈ A; b ∈ A |] ==> interval r a b ⊆ A" by (metis PO.interval_imp_mem PO.intro dualPO dualr_iff interval_dual r_def
rel_imp_elem subsetI)
declare (in CLF) rel_imp_elem[rule del] declare interval_def [simp del]
lemma (in CLF) intervalI: "[| (a, x) ∈ r; (x, b) ∈ r |] ==> x ∈ interval r a b" by (simp add: interval_def)
lemma (in CLF) interval_lemma1: "[| S ⊆ interval r a b; x ∈ S |] ==> (a, x) ∈ r" by (unfold interval_def, fast)
lemma (in CLF) interval_lemma2: "[| S ⊆ interval r a b; x ∈ S |] ==> (x, b) ∈ r" by (unfold interval_def, fast)
lemma (in CLF) a_less_lub: "[| S ⊆ A; S ≠ {}; ∀x ∈ S. (a,x) ∈ r; ∀y ∈ S. (y, L) ∈ r |] ==> (a,L) ∈ r" by (blast intro: transE)
lemma (in CLF) glb_less_b: "[| S ⊆ A; S ≠ {}; ∀x ∈ S. (x,b) ∈ r; ∀y ∈ S. (G, y) ∈ r |] ==> (G,b) ∈ r" by (blast intro: transE)
lemma (in CLF) S_intv_cl: "[| a ∈ A; b ∈ A; S ⊆ interval r a b |]==> S ⊆ A" by (simp add: subset_trans [OF _ interval_subset])
lemma (in CLF) L_in_interval: "[| a ∈ A; b ∈ A; S ⊆ interval r a b; S ≠ {}; isLub S cl L; interval r a b ≠ {} |] ==> L ∈ interval r a b" (*WON'T TERMINATE apply (metis CO_trans intervalI interval_lemma1 interval_lemma2 isLub_least isLub_upper subset_empty subset_iff trans_def) *) apply (rule intervalI) apply (rule a_less_lub) prefer 2 apply assumption apply (simp add: S_intv_cl) apply (rule ballI) apply (simp add: interval_lemma1) apply (simp add: isLub_upper) 🍋‹‹(L, b) ∈ r›\› apply (simp add: isLub_least interval_lemma2) done
(*never proved, 2007-01-22*)
lemma (in CLF) G_in_interval: "[| a ∈ A; b ∈ A; interval r a b ≠ {}; S ⊆ interval r a b; isGlb S cl G; S ≠ {} |] ==> G ∈ interval r a b" apply (simp add: interval_dual) apply (simp add: CLF.L_in_interval [of _ f, OF CLF.intro, OF CL.intro CLF_axioms.intro, OF PO.intro CL_axioms.intro]
dualA_iff A_def dualPO CL_dualCL CLF_dual isGlb_dual_isLub) done
lemma (in CLF) intervalPO: "[| a ∈ A; b ∈ A; interval r a b ≠ {} |] ==> (| pset = interval r a b, order = induced (interval r a b) r |) ∈ PartialOrder" proof - assume A1: "a ∈ A" assume"b ∈ A" hence"∀u. u ∈ A ⟶ interval r u b ⊆ A"by (metis interval_subset) hence"interval r a b ⊆ A"using A1 by metis hence"interval r a b ⊆ A"by metis thus ?thesis by (metis po_subset_po) qed
lemma (in CLF) intv_CL_lub: "[| a ∈ A; b ∈ A; interval r a b ≠ {} |] ==> ∀S. S ⊆ interval r a b --> (∃L. isLub S (| pset = interval r a b, order = induced (interval r a b) r |) L)" apply (intro strip) apply (frule S_intv_cl [THEN CL_imp_ex_isLub]) prefer 2 apply assumption apply assumption apply (erule exE) 🍋‹define the lub for the interval as› apply (rule_tac x = "if S = {} then a else L"in exI) apply (simp (no_asm_simp) add: isLub_def split del: if_split) apply (intro impI conjI) 🍋‹‹(if S = {} then a else L) ∈ interval r a b›\apply (simp add: CL_imp_PO L_in_interval) apply (simp add: left_in_interval) 🍋‹lub prop 1› apply (case_tac "S = {}") 🍋‹‹S = {}, y ∈ S = False => everything›\› apply fast 🍋‹‹S ≠ {}›\› apply simp 🍋‹‹∀y:S. (y, L) ∈ induced (interval r a b) r›\› apply (rule ballI) apply (simp add: induced_def L_in_interval) apply (rule conjI) apply (rule subsetD) apply (simp add: S_intv_cl, assumption) apply (simp add: isLub_upper) 🍋‹‹∀z:interval r a b. (∀y:S. (y, z) ∈ induced (interval r a b) r ⟶ (if S = {} then a else L, z) ∈ induced (interval r a b) r›\› apply (rule ballI) apply (rule impI) apply (case_tac "S = {}") 🍋‹‹S = {}›\› apply simp apply (simp add: induced_def interval_def) apply (rule conjI) apply (rule reflE, assumption) apply (rule interval_not_empty) apply (rule CO_trans) apply (simp add: interval_def) 🍋‹‹S ≠ {}›\› apply simp apply (simp add: induced_def L_in_interval) apply (rule isLub_least, assumption) apply (rule subsetD) prefer 2 apply assumption apply (simp add: S_intv_cl, fast) done
lemmas (in CLF) intv_CL_glb = intv_CL_lub [THEN Rdual]
(*never proved, 2007-01-22*)
lemma (in CLF) interval_is_sublattice: "[| a ∈ A; b ∈ A; interval r a b ≠ {} |] ==> interval r a b <<= cl" (*sledgehammer *) apply (rule sublatticeI) apply (simp add: interval_subset) (*never proved, 2007-01-22*) (*sledgehammer *) apply (rule CompleteLatticeI) apply (simp add: intervalPO) apply (simp add: intv_CL_lub) apply (simp add: intv_CL_glb) done
lemmas (in CLF) interv_is_compl_latt =
interval_is_sublattice [THEN sublattice_imp_CL]
subsection‹Top and Bottom› lemma (in CLF) Top_dual_Bot: "Top cl = Bot (dual cl)" by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
lemma (in CLF) Bot_dual_Top: "Bot cl = Top (dual cl)" by (simp add: Top_def Bot_def least_def greatest_def dualA_iff dualr_iff)
lemma (in Tarski) v_in_P: "v ∈ P" (*sledgehammer*) apply (unfold P_def) apply (rule_tac A = "intY1"in fixf_subset) apply (rule intY1_subset) 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]
v_def CL_imp_PO intY1_is_cl CLF_set_def intY1_func intY1_mono) done
lemma (in Tarski) z_in_interval: "[| z ∈ P; ∀y∈Y. (y, z) ∈ induced P r |] ==> z ∈ intY1" (*sledgehammer *) apply (unfold intY1_def P_def) apply (rule intervalI) prefer 2 apply (erule fix_subset [THEN subsetD, THEN Top_prop]) apply (rule lub_least) apply (rule Y_subset_A) apply (fast elim!: fix_subset [THEN subsetD]) apply (simp add: induced_def) done
lemma (in Tarski) f'z_in_int_rel: "[| z ∈ P; ∀y∈Y. (y, z) ∈ induced P r |] ==> ((λx ∈ intY1. f x) z, z) ∈ induced intY1 r" using P_def fix_imp_eq indI intY1_elem reflE z_in_interval by fastforce
(*never proved, 2007-01-22*)
lemma (in Tarski) tarski_full_lemma: "∃L. isLub Y (| pset = P, order = induced P r |) L" apply (rule_tac x = "v"in exI) apply (simp add: isLub_def) 🍋‹‹v ∈ P›\apply (simp add: v_in_P) apply (rule conjI) (*sledgehammer*) 🍋‹‹v› is lub› 🍋‹‹1. ∀y:Y. (y, v) ∈ induced P r›\apply (rule ballI) apply (simp add: induced_def subsetD v_in_P) apply (rule conjI) apply (erule Y_ss [THEN subsetD]) apply (rule_tac b = "lub Y cl"in transE) apply (rule lub_upper) apply (rule Y_subset_A, assumption) apply (rule_tac b = "Top cl"in interval_imp_mem) apply (simp add: v_def) apply (fold intY1_def) apply (rule CL.glb_in_lattice [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified]) apply (simp add: CL_imp_PO intY1_is_cl, force) 🍋‹‹v› is LEAST ub› apply clarify apply (rule indI) prefer 3 apply assumption prefer 2 apply (simp add: v_in_P) apply (unfold v_def) (*never proved, 2007-01-22*) (*sledgehammer*) apply (rule indE) apply (rule_tac [2] intY1_subset) (*never proved, 2007-01-22*) (*sledgehammer*) apply (rule CL.glb_lower [OF CL.intro, OF PO.intro CL_axioms.intro, OF _ intY1_is_cl, simplified]) apply (simp add: CL_imp_PO intY1_is_cl) apply force apply (simp add: induced_def intY1_f_closed z_in_interval) apply (simp add: P_def fix_imp_eq [of _ f A] reflE
fix_subset [of f A, THEN subsetD]) done
lemma CompleteLatticeI_simp: "[| (| pset = A, order = r |) ∈ PartialOrder; ∀S. S ⊆ A --> (∃L. isLub S (| pset = A, order = r |) L) |] ==> (| pset = A, order = r |) ∈ CompleteLattice" by (simp add: CompleteLatticeI Rdual)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.