diff -r 32b3feb6f965 -r dec96cb3fbe0 src/HOL/Hilbert_Choice.thy --- a/src/HOL/Hilbert_Choice.thy Sat May 27 22:52:08 2017 +0200 +++ b/src/HOL/Hilbert_Choice.thy Sun May 28 08:07:40 2017 +0200 @@ -523,64 +523,6 @@ by (blast intro: someI) -subsection \Least value operator\ - -definition LeastM :: "('a \ 'b::ord) \ ('a \ bool) \ 'a" - where "LeastM m P \ (SOME x. P x \ (\y. P y \ m x \ m y))" - -syntax - "_LeastM" :: "pttrn \ ('a \ 'b::ord) \ bool \ 'a" ("LEAST _ WRT _. _" [0, 4, 10] 10) -translations - "LEAST x WRT m. P" \ "CONST LeastM m (\x. P)" - -lemma LeastMI2: - "P x \ - (\y. P y \ m x \ m y) \ - (\x. P x \ \y. P y \ m x \ m y \ Q x) \ - Q (LeastM m P)" - apply (simp add: LeastM_def) - apply (rule someI2_ex) - apply blast - apply blast - done - -lemma LeastM_equality: "P k \ (\x. P x \ m k \ m x) \ m (LEAST x WRT m. P x) = m k" - for m :: "_ \ 'a::order" - apply (rule LeastMI2) - apply assumption - apply blast - apply (blast intro!: order_antisym) - done - -lemma wf_linord_ex_has_least: - "wf r \ \x y. (x, y) \ r\<^sup>+ \ (y, x) \ r\<^sup>* \ P k \ \x. P x \ (\y. P y \ (m x, m y) \ r\<^sup>*)" - apply (drule wf_trancl [THEN wf_eq_minimal [THEN iffD1]]) - apply (drule_tac x = "m ` Collect P" in spec) - apply force - done - -lemma ex_has_least_nat: "P k \ \x. P x \ (\y. P y \ m x \ m y)" - for m :: "'a \ nat" - apply (simp only: pred_nat_trancl_eq_le [symmetric]) - apply (rule wf_pred_nat [THEN wf_linord_ex_has_least]) - apply (simp add: less_eq linorder_not_le pred_nat_trancl_eq_le) - apply assumption - done - -lemma LeastM_nat_lemma: "P k \ P (LeastM m P) \ (\y. P y \ m (LeastM m P) \ m y)" - for m :: "'a \ nat" - apply (simp add: LeastM_def) - apply (rule someI_ex) - apply (erule ex_has_least_nat) - done - -lemmas LeastM_natI = LeastM_nat_lemma [THEN conjunct1] - -lemma LeastM_nat_le: "P x \ m (LeastM m P) \ m x" - for m :: "'a \ nat" - by (rule LeastM_nat_lemma [THEN conjunct2, THEN spec, THEN mp]) - - subsection \Greatest value operator\ definition GreatestM :: "('a \ 'b::ord) \ ('a \ bool) \ 'a"