section \ Algebraic Laws \ theory ISQ_Algebra imports ISQ_Proof begin subsection \ Quantity Scale \ lemma scaleQ_add_right: "a \ x + y = (a \ x) + (a \ y)" by (si_simp add: distrib_left) lemma scaleQ_add_left: "a + b \ x = (a \ x) + (b \ x)" by (si_simp add: distrib_right) lemma scaleQ_scaleQ: "a \ b \ x = a \ b \ x" by si_simp lemma scaleQ_one [simp]: "1 \ x = x" by si_simp lemma scaleQ_zero [simp]: "0 \ x = 0" by si_simp lemma scaleQ_inv: "-a \ x = a \ -x" by si_calc lemma scaleQ_as_qprod: "a \ x \\<^sub>Q (a \ \) \<^bold>\ x" by (si_simp) lemma mult_scaleQ_left [simp]: "(a \ x) \<^bold>\ y = a \ x \<^bold>\ y" by (si_simp add: mult.assoc) lemma mult_scaleQ_right [simp]: "x \<^bold>\ (a \ y) = a \ x \<^bold>\ y" by si_simp subsection \ Field Laws \ lemma qtimes_commute: "x \<^bold>\ y \\<^sub>Q y \<^bold>\ x" by si_calc lemma qtimes_assoc: "(x \<^bold>\ y) \<^bold>\ z \\<^sub>Q x \<^bold>\ (y \<^bold>\ z)" by (si_calc) lemma qtimes_left_unit: "\ \<^bold>\ x \\<^sub>Q x" by (si_calc) lemma qtimes_right_unit: "x \<^bold>\ \ \\<^sub>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 \\<^sub>Q y" shows "x\<^bold>\z \\<^sub>Q y\<^bold>\z" using assms by si_simp lemma qtimes_weak_cong_right: assumes "x \\<^sub>Q y" shows "z\<^bold>\x \\<^sub>Q z\<^bold>\y" using assms by si_calc lemma qinverse_weak_cong: assumes "x \\<^sub>Q y" shows "x\<^sup>-\<^sup>\ \\<^sub>Q y\<^sup>-\<^sup>\" using assms by si_calc lemma scaleQ_cong: assumes "y \\<^sub>Q z" shows "x \ y \\<^sub>Q x \ z" using assms by si_calc lemma qinverse_qinverse: "x\<^sup>-\<^sup>\\<^sup>-\<^sup>\ \\<^sub>Q x" by si_calc lemma qinverse_nonzero_iff_nonzero: "x\<^sup>-\<^sup>\ = 0 \ x = 0" by (auto, si_calc+) lemma qinverse_qtimes: "(x \<^bold>\ y)\<^sup>-\<^sup>\ \\<^sub>Q x\<^sup>-\<^sup>\ \<^bold>\ y\<^sup>-\<^sup>\" by si_calc lemma qinverse_qdivide: "(x \<^bold>/ y)\<^sup>-\<^sup>\ \\<^sub>Q y \<^bold>/ x" by si_calc lemma qtimes_cancel: "x \ 0 \ x \<^bold>/ x \\<^sub>Q \" by si_calc end