header {* Order and linear order: min and max *}
theory Util_MinMax
imports Lattices
begin
subsection {* Additional lemmata about @{term min} and @{term max} *}
thm min_less_iff_conj
lemma min_less_imp_conj: "(z::'a::linorder) < min x y ==> z < x ∧ z < y" by simp
lemma conj_less_imp_min: "[| z < x; z < y |] ==> (z::'a::linorder) < min x y" by simp
lemmas min_le_iff_conj = min_max.le_inf_iff
lemma min_le_imp_conj: "(z::'a::linorder) ≤ min x y ==> z ≤ x ∧ z ≤ y" by simp
lemmas conj_le_imp_min = min_max.le_infI
thm min_max.inf_absorb1
lemmas min_eqL = min_max.inf_absorb1
lemmas min_eqR = min_max.inf_absorb2
lemmas min_eq = min_eqL min_eqR
thm min_eq
thm max_less_iff_conj
lemma max_less_imp_conj:"max x y < b ==> x < (b::('a::linorder)) ∧ y < b" by simp
lemma conj_less_imp_max:"[| x < (b::('a::linorder)); y < b |] ==> max x y < b" by simp
lemmas max_le_iff_conj = min_max.le_sup_iff
lemma max_le_imp_conj:"max x y ≤ b ==> x ≤ (b::('a::linorder)) ∧ y ≤ b" by simp
lemmas conj_le_imp_max = min_max.le_supI
thm min_max.sup_absorb1
lemmas max_eqL = min_max.sup_absorb1
lemmas max_eqR = min_max.sup_absorb2
lemmas max_eq = max_eqL max_eqR
thm max_eq
thm
le_maxI1
le_maxI2
lemmas le_minI1 = min_max.inf_le1
lemmas le_minI2 = min_max.inf_le2
lemma
min_le_monoR: "(a::'a::linorder) ≤ b ==> min x a ≤ min x b" and
min_le_monoL: "(a::'a::linorder) ≤ b ==> min a x ≤ min b x"
by (fastsimp simp: min_max.inf_mono min_def)+
lemma
max_le_monoR: "(a::'a::linorder) ≤ b ==> max x a ≤ max x b" and
max_le_monoL: "(a::'a::linorder) ≤ b ==> max a x ≤ max b x"
by (fastsimp simp: min_max.sup_mono max_def)+
end