Theory ISQ_Algebra
section ‹ Algebraic Laws ›
theory ISQ_Algebra
imports ISQ_Proof
begin
subsection ‹ Quantity Scale ›
lemma scaleQ_add_right: "a *⇩Q x + y = (a *⇩Q x) + (a *⇩Q y)"
by (si_simp add: distrib_left)
lemma scaleQ_add_left: "a + b *⇩Q x = (a *⇩Q x) + (b *⇩Q x)"
by (si_simp add: distrib_right)
lemma scaleQ_scaleQ [simp]: "a *⇩Q b *⇩Q x = a ⋅ b *⇩Q x"
by si_simp
lemma scaleQ_one [simp]: "1 *⇩Q x = x"
by si_simp
lemma scaleQ_zero [simp]: "0 *⇩Q x = 0"
by si_simp
lemma scaleQ_inv: "-a *⇩Q x = a *⇩Q -x"
by si_calc
lemma scaleQ_as_qprod: "a *⇩Q x ≅⇩Q (a *⇩Q 𝟭) ❙⋅ x"
by si_simp
lemma mult_scaleQ_left [simp]: "(a *⇩Q x) ❙⋅ y = a *⇩Q x ❙⋅ y"
by si_simp
lemma mult_scaleQ_right [simp]: "x ❙⋅ (a *⇩Q y) = a *⇩Q x ❙⋅ y"
by si_simp
subsection ‹ Field Laws ›
lemma qtimes_commute: "x ❙⋅ y ≅⇩Q y ❙⋅ x"
by si_calc
lemma qtimes_assoc: "(x ❙⋅ y) ❙⋅ z ≅⇩Q x ❙⋅ (y ❙⋅ z)"
by (si_calc)
lemma qtimes_left_unit: "𝟭 ❙⋅ x ≅⇩Q x"
by (si_calc)
lemma qtimes_right_unit: "x ❙⋅ 𝟭 ≅⇩Q x"
by (si_calc)
text‹The following weak congruences will allow for replacing equivalences in contexts
built from product and inverse. ›
lemma qtimes_weak_cong_left:
assumes "x ≅⇩Q y"
shows "x❙⋅z ≅⇩Q y❙⋅z"
using assms by si_simp
lemma qtimes_weak_cong_right:
assumes "x ≅⇩Q y"
shows "z❙⋅x ≅⇩Q z❙⋅y"
using assms by si_calc
lemma qinverse_weak_cong:
assumes "x ≅⇩Q y"
shows "x⇧-⇧𝟭 ≅⇩Q y⇧-⇧𝟭"
using assms by si_calc
lemma scaleQ_cong:
assumes "y ≅⇩Q z"
shows "x *⇩Q y ≅⇩Q x *⇩Q z"
using assms by si_calc
lemma qinverse_qinverse: "x⇧-⇧𝟭⇧-⇧𝟭 ≅⇩Q x"
by si_calc
lemma qinverse_nonzero_iff_nonzero: "x⇧-⇧𝟭 = 0 ⟷ x = 0"
by (auto, si_calc+)
lemma qinverse_qtimes: "(x ❙⋅ y)⇧-⇧𝟭 ≅⇩Q x⇧-⇧𝟭 ❙⋅ y⇧-⇧𝟭"
by (si_simp add: inverse_distrib)
lemma qinverse_qdivide: "(x ❙/ y)⇧-⇧𝟭 ≅⇩Q y ❙/ x"
by si_simp
lemma qtimes_cancel: "x ≠ 0 ⟹ x ❙/ x ≅⇩Q 𝟭"
by si_calc
end