Theory Boolean_Algebra
section ‹Boolean Algebra›
theory Boolean_Algebra
imports
"ZFC_in_HOL.ZFC_Typeclasses"
begin
text ‹This theory contains an embedding of two-valued boolean algebra into \<^term>‹V›.›
hide_const (open) List.set
definition bool_to_V :: "bool ⇒ V" where
"bool_to_V = (SOME f. inj f)"
lemma bool_to_V_injectivity [simp]:
shows "inj bool_to_V"
unfolding bool_to_V_def by (fact someI_ex[OF embeddable_class.ex_inj])
definition bool_from_V :: "V ⇒ bool" where
[simp]: "bool_from_V = inv bool_to_V"
definition top :: V (‹❙T›) where
[simp]: "❙T = bool_to_V True"
definition bottom :: V (‹❙F›) where
[simp]: "❙F = bool_to_V False"
definition two_valued_boolean_algebra_universe :: V (‹𝔹›) where
[simp]: "𝔹 = set {❙T, ❙F}"
definition negation :: "V ⇒ V" (‹∼ _› [141] 141) where
[simp]: "∼ p = bool_to_V (¬ bool_from_V p)"
definition conjunction :: "V ⇒ V ⇒ V" (infixr ‹❙∧› 136) where
[simp]: "p ❙∧ q = bool_to_V (bool_from_V p ∧ bool_from_V q)"
definition disjunction :: "V ⇒ V ⇒ V" (infixr ‹❙∨› 131) where
[simp]: "p ❙∨ q = ∼ (∼ p ❙∧ ∼ q)"
definition implication :: "V ⇒ V ⇒ V" (infixr ‹❙⊃› 121) where
[simp]: "p ❙⊃ q = ∼ p ❙∨ q"
definition iff :: "V ⇒ V ⇒ V" (infixl ‹❙≡› 150) where
[simp]: "p ❙≡ q = (p ❙⊃ q) ❙∧ (q ❙⊃ p)"
lemma boolean_algebra_simps [simp]:
assumes "p ∈ elts 𝔹" and "q ∈ elts 𝔹" and "r ∈ elts 𝔹"
shows "∼ ∼ p = p"
and "((∼ p) ❙≡ (∼ q)) = (p ❙≡ q)"
and "∼ (p ❙≡ q) = (p ❙≡ (∼ q))"
and "(p ❙∨ ∼ p) = ❙T"
and "(∼ p ❙∨ p) = ❙T"
and "(p ❙≡ p) = ❙T"
and "(∼ p) ≠ p"
and "p ≠ (∼ p)"
and "(❙T ❙≡ p) = p"
and "(p ❙≡ ❙T) = p"
and "(❙F ❙≡ p) = (∼ p)"
and "(p ❙≡ ❙F) = (∼ p)"
and "(❙T ❙⊃ p) = p"
and "(❙F ❙⊃ p) = ❙T"
and "(p ❙⊃ ❙T) = ❙T"
and "(p ❙⊃ p) = ❙T"
and "(p ❙⊃ ❙F) = (∼ p)"
and "(p ❙⊃ ∼ p) = (∼ p)"
and "(p ❙∧ ❙T) = p"
and "(❙T ❙∧ p) = p"
and "(p ❙∧ ❙F) = ❙F"
and "(❙F ❙∧ p) = ❙F"
and "(p ❙∧ p) = p"
and "(p ❙∧ (p ❙∧ q)) = (p ❙∧ q)"
and "(p ❙∧ ∼ p) = ❙F"
and "(∼ p ❙∧ p) = ❙F"
and "(p ❙∨ ❙T) = ❙T"
and "(❙T ❙∨ p) = ❙T"
and "(p ❙∨ ❙F) = p"
and "(❙F ❙∨ p) = p"
and "(p ❙∨ p) = p"
and "(p ❙∨ (p ❙∨ q)) = (p ❙∨ q)"
and "p ❙∧ q = q ❙∧ p"
and "p ❙∧ (q ❙∧ r) = q ❙∧ (p ❙∧ r)"
and "p ❙∨ q = q ❙∨ p"
and "p ❙∨ (q ❙∨ r) = q ❙∨ (p ❙∨ r)"
and "(p ❙∨ q) ❙∨ r = p ❙∨ (q ❙∨ r)"
and "p ❙∧ (q ❙∨ r) = p ❙∧ q ❙∨ p ❙∧ r"
and "(p ❙∨ q) ❙∧ r = p ❙∧ r ❙∨ q ❙∧ r"
and "p ❙∨ (q ❙∧ r) = (p ❙∨ q) ❙∧ (p ❙∨ r)"
and "(p ❙∧ q) ❙∨ r = (p ❙∨ r) ❙∧ (q ❙∨ r)"
and "(p ❙⊃ (q ❙∧ r)) = ((p ❙⊃ q) ❙∧ (p ❙⊃ r))"
and "((p ❙∧ q) ❙⊃ r) = (p ❙⊃ (q ❙⊃ r))"
and "((p ❙∨ q) ❙⊃ r) = ((p ❙⊃ r) ❙∧ (q ❙⊃ r))"
and "((p ❙⊃ q) ❙∨ r) = (p ❙⊃ q ❙∨ r)"
and "(q ❙∨ (p ❙⊃ r)) = (p ❙⊃ q ❙∨ r)"
and "∼ (p ❙∨ q) = ∼ p ❙∧ ∼ q"
and "∼ (p ❙∧ q) = ∼ p ❙∨ ∼ q"
and "∼ (p ❙⊃ q) = p ❙∧ ∼ q"
and "∼ p ❙∨ q = (p ❙⊃ q)"
and "p ❙∨ ∼ q = (q ❙⊃ p)"
and "(p ❙⊃ q) = (∼ p) ❙∨ q"
and "p ❙∨ q = ∼ p ❙⊃ q"
and "(p ❙≡ q) = (p ❙⊃ q) ❙∧ (q ❙⊃ p)"
and "(p ❙⊃ q) ❙∧ (∼ p ❙⊃ q) = q"
and "p = ❙T ⟹ ¬ (p = ❙F)"
and "p = ❙F ⟹ ¬ (p = ❙T)"
and "p = ❙T ∨ p = ❙F"
using assms by (auto simp add: inj_eq)
lemma tv_cases [consumes 1, case_names top bottom, cases type: V]:
assumes "p ∈ elts 𝔹"
and "p = ❙T ⟹ P"
and "p = ❙F ⟹ P"
shows P
using assms by auto
end