Theory Quasi_Order
theory Quasi_Order
imports Main
begin
locale quasi_order =
fixes qle :: "'a ⇒ 'a ⇒ bool" (infix "≼" 60)
assumes qle_refl[iff]: "x ≼ x"
and qle_trans: "x ≼ y ⟹ y ≼ z ⟹ x ≼ z"
begin
definition in_qle :: "'a ⇒ 'a set ⇒ bool" (infix "∈⇩≼" 60) where
"x ∈⇩≼ M ≡ ∃y ∈ M. x ≼ y"
definition subseteq_qle :: "'a set ⇒ 'a set ⇒ bool" (infix "⊆⇩≼" 60) where
"M ⊆⇩≼ N ≡ ∀x ∈ M. x ∈⇩≼ N"
definition seteq_qle :: "'a set ⇒ 'a set ⇒ bool" (infix "=⇩≼" 60) where
"M =⇩≼ N ≡ M ⊆⇩≼ N ∧ N ⊆⇩≼ M"
lemmas "defs" = in_qle_def subseteq_qle_def seteq_qle_def
lemma subseteq_qle_refl[simp]: "M ⊆⇩≼ M"
by(auto simp add: subseteq_qle_def in_qle_def)
lemma subseteq_qle_trans: "A ⊆⇩≼ B ⟹ B ⊆⇩≼ C ⟹ A ⊆⇩≼ C"
by (simp add: subseteq_qle_def in_qle_def) (metis qle_trans)
lemma empty_subseteq_qle[simp]: "{} ⊆⇩≼ A"
by (simp add: subseteq_qle_def)
lemma subseteq_qleI2: "(⋀x. x ∈ M ⟹ ∃y ∈ N. x ≼ y) ⟹ M ⊆⇩≼ N"
by (auto simp add: subseteq_qle_def in_qle_def)
lemma subseteq_qleD2: "M ⊆⇩≼ N ⟹ x ∈ M ⟹ ∃y ∈ N. x ≼ y"
by (auto simp add: subseteq_qle_def in_qle_def)
lemma seteq_qle_refl[iff]: "A =⇩≼ A"
by (simp add: seteq_qle_def)
lemma seteq_qle_trans: "A =⇩≼ B ⟹ B =⇩≼ C ⟹ A =⇩≼ C"
by (simp add: seteq_qle_def) (metis subseteq_qle_trans)
end
end