GF0038

gaussian_multiply_add_distribute

An actual Gaussian product of a sum equals the actual sum of the two given products.

Alpha v34 checked-use · first admitted v30 · independently kernel and Lean verified; not Stable

Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.

Inputs are genuine canonical signed-pair codes, not arbitrary naturals. Products start at the actual Gaussian identity, whose code is six. The factor list uses the proved prime-divisor property; irreducibility alone is not silently renamed primality. Uniqueness supplies equal lengths, a bounded bijection, and an actual unit at each match, including repeated factors. Units have empty factorizations and zero is excluded. Sorted primary representatives, Gaussian prime classification, and Eisenstein factorization are separate targets.

Exact theorem in conservative defined notation

∀ a. ∀ b. ∀ c. ∀ s. ∀ p. ∀ q. ∀ t. ZPairAdd(b,c,s)GMul(a,b,p)GMul(a,c,q)GMul(a,s,t)ZPairAdd(p,q,t)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall a b c s p q t. (exists ge_first_rp_expand_sum ge_first_rn_expand_sum ge_first_ip_expand_sum ge_first_in_expand_sum ge_second_rp_expand_sum ge_second_rn_expand_sum ge_second_ip_expand_sum ge_second_in_expand_sum. ((exists ge_representation_real_code_expand_sumfirst ge_representation_imaginary_code_expand_sumfirst. (((b) = ((ge_representation_real_code_expand_sumfirst) + (ge_representation_imaginary_code_expand_sumfirst)) * S ((ge_representation_real_code_expand_sumfirst) + (ge_representation_imaginary_code_expand_sumfirst)) + ((ge_representation_imaginary_code_expand_sumfirst) + (ge_representation_imaginary_code_expand_sumfirst))) /\ ((exists ge_balance_positive_expand_sumfirstreal ge_balance_negative_expand_sumfirstreal. (((((ge_representation_real_code_expand_sumfirst) = 2 * (ge_balance_positive_expand_sumfirstreal) /\ (ge_balance_negative_expand_sumfirstreal) = 0) \/ exists ge_signed_half_expand_sumfirstrealdecode. (((ge_representation_real_code_expand_sumfirst) = 2 * ge_signed_half_expand_sumfirstrealdecode + 1 /\ (ge_balance_positive_expand_sumfirstreal) = 0) /\ (ge_balance_negative_expand_sumfirstreal) = S ge_signed_half_expand_sumfirstrealdecode))) /\ ((ge_first_rp_expand_sum) + ge_balance_negative_expand_sumfirstreal = (ge_first_rn_expand_sum) + ge_balance_positive_expand_sumfirstreal))) /\ (exists ge_balance_positive_expand_sumfirstimaginary ge_balance_negative_expand_sumfirstimaginary. (((((ge_representation_imaginary_code_expand_sumfirst) = 2 * (ge_balance_positive_expand_sumfirstimaginary) /\ (ge_balance_negative_expand_sumfirstimaginary) = 0) \/ exists ge_signed_half_expand_sumfirstimaginarydecode. (((ge_representation_imaginary_code_expand_sumfirst) = 2 * ge_signed_half_expand_sumfirstimaginarydecode + 1 /\ (ge_balance_positive_expand_sumfirstimaginary) = 0) /\ (ge_balance_negative_expand_sumfirstimaginary) = S ge_signed_half_expand_sumfirstimaginarydecode))) /\ ((ge_first_ip_expand_sum) + ge_balance_negative_expand_sumfirstimaginary = (ge_first_in_expand_sum) + ge_balance_positive_expand_sumfirstimaginary)))))) /\ ((exists ge_representation_real_code_expand_sumsecond ge_representation_imaginary_code_expand_sumsecond. (((c) = ((ge_representation_real_code_expand_sumsecond) + (ge_representation_imaginary_code_expand_sumsecond)) * S ((ge_representation_real_code_expand_sumsecond) + (ge_representation_imaginary_code_expand_sumsecond)) + ((ge_representation_imaginary_code_expand_sumsecond) + (ge_representation_imaginary_code_expand_sumsecond))) /\ ((exists ge_balance_positive_expand_sumsecondreal ge_balance_negative_expand_sumsecondreal. (((((ge_representation_real_code_expand_sumsecond) = 2 * (ge_balance_positive_expand_sumsecondreal) /\ (ge_balance_negative_expand_sumsecondreal) = 0) \/ exists ge_signed_half_expand_sumsecondrealdecode. (((ge_representation_real_code_expand_sumsecond) = 2 * ge_signed_half_expand_sumsecondrealdecode + 1 /\ (ge_balance_positive_expand_sumsecondreal) = 0) /\ (ge_balance_negative_expand_sumsecondreal) = S ge_signed_half_expand_sumsecondrealdecode))) /\ ((ge_second_rp_expand_sum) + ge_balance_negative_expand_sumsecondreal = (ge_second_rn_expand_sum) + ge_balance_positive_expand_sumsecondreal))) /\ (exists ge_balance_positive_expand_sumsecondimaginary ge_balance_negative_expand_sumsecondimaginary. (((((ge_representation_imaginary_code_expand_sumsecond) = 2 * (ge_balance_positive_expand_sumsecondimaginary) /\ (ge_balance_negative_expand_sumsecondimaginary) = 0) \/ exists ge_signed_half_expand_sumsecondimaginarydecode. (((ge_representation_imaginary_code_expand_sumsecond) = 2 * ge_signed_half_expand_sumsecondimaginarydecode + 1 /\ (ge_balance_positive_expand_sumsecondimaginary) = 0) /\ (ge_balance_negative_expand_sumsecondimaginary) = S ge_signed_half_expand_sumsecondimaginarydecode))) /\ ((ge_second_ip_expand_sum) + ge_balance_negative_expand_sumsecondimaginary = (ge_second_in_expand_sum) + ge_balance_positive_expand_sumsecondimaginary)))))) /\ (exists ge_representation_real_code_expand_sumoutput ge_representation_imaginary_code_expand_sumoutput. (((s) = ((ge_representation_real_code_expand_sumoutput) + (ge_representation_imaginary_code_expand_sumoutput)) * S ((ge_representation_real_code_expand_sumoutput) + (ge_representation_imaginary_code_expand_sumoutput)) + ((ge_representation_imaginary_code_expand_sumoutput) + (ge_representation_imaginary_code_expand_sumoutput))) /\ ((exists ge_balance_positive_expand_sumoutputreal ge_balance_negative_expand_sumoutputreal. (((((ge_representation_real_code_expand_sumoutput) = 2 * (ge_balance_positive_expand_sumoutputreal) /\ (ge_balance_negative_expand_sumoutputreal) = 0) \/ exists ge_signed_half_expand_sumoutputrealdecode. (((ge_representation_real_code_expand_sumoutput) = 2 * ge_signed_half_expand_sumoutputrealdecode + 1 /\ (ge_balance_positive_expand_sumoutputreal) = 0) /\ (ge_balance_negative_expand_sumoutputreal) = S ge_signed_half_expand_sumoutputrealdecode))) /\ ((((ge_first_rp_expand_sum) + (ge_second_rp_expand_sum))) + ge_balance_negative_expand_sumoutputreal = (((ge_first_rn_expand_sum) + (ge_second_rn_expand_sum))) + ge_balance_positive_expand_sumoutputreal))) /\ (exists ge_balance_positive_expand_sumoutputimaginary ge_balance_negative_expand_sumoutputimaginary. (((((ge_representation_imaginary_code_expand_sumoutput) = 2 * (ge_balance_positive_expand_sumoutputimaginary) /\ (ge_balance_negative_expand_sumoutputimaginary) = 0) \/ exists ge_signed_half_expand_sumoutputimaginarydecode. (((ge_representation_imaginary_code_expand_sumoutput) = 2 * ge_signed_half_expand_sumoutputimaginarydecode + 1 /\ (ge_balance_positive_expand_sumoutputimaginary) = 0) /\ (ge_balance_negative_expand_sumoutputimaginary) = S ge_signed_half_expand_sumoutputimaginarydecode))) /\ ((((ge_first_ip_expand_sum) + (ge_second_ip_expand_sum))) + ge_balance_negative_expand_sumoutputimaginary = (((ge_first_in_expand_sum) + (ge_second_in_expand_sum))) + ge_balance_positive_expand_sumoutputimaginary))))))))) -> (exists ge_first_rp_expand_first ge_first_rn_expand_first ge_first_ip_expand_first ge_first_in_expand_first ge_second_rp_expand_first ge_second_rn_expand_first ge_second_ip_expand_first ge_second_in_expand_first. ((exists ge_representation_real_code_expand_firstfirst ge_representation_imaginary_code_expand_firstfirst. (((a) = ((ge_representation_real_code_expand_firstfirst) + (ge_representation_imaginary_code_expand_firstfirst)) * S ((ge_representation_real_code_expand_firstfirst) + (ge_representation_imaginary_code_expand_firstfirst)) + ((ge_representation_imaginary_code_expand_firstfirst) + (ge_representation_imaginary_code_expand_firstfirst))) /\ ((exists ge_balance_positive_expand_firstfirstreal ge_balance_negative_expand_firstfirstreal. (((((ge_representation_real_code_expand_firstfirst) = 2 * (ge_balance_positive_expand_firstfirstreal) /\ (ge_balance_negative_expand_firstfirstreal) = 0) \/ exists ge_signed_half_expand_firstfirstrealdecode. (((ge_representation_real_code_expand_firstfirst) = 2 * ge_signed_half_expand_firstfirstrealdecode + 1 /\ (ge_balance_positive_expand_firstfirstreal) = 0) /\ (ge_balance_negative_expand_firstfirstreal) = S ge_signed_half_expand_firstfirstrealdecode))) /\ ((ge_first_rp_expand_first) + ge_balance_negative_expand_firstfirstreal = (ge_first_rn_expand_first) + ge_balance_positive_expand_firstfirstreal))) /\ (exists ge_balance_positive_expand_firstfirstimaginary ge_balance_negative_expand_firstfirstimaginary. (((((ge_representation_imaginary_code_expand_firstfirst) = 2 * (ge_balance_positive_expand_firstfirstimaginary) /\ (ge_balance_negative_expand_firstfirstimaginary) = 0) \/ exists ge_signed_half_expand_firstfirstimaginarydecode. (((ge_representation_imaginary_code_expand_firstfirst) = 2 * ge_signed_half_expand_firstfirstimaginarydecode + 1 /\ (ge_balance_positive_expand_firstfirstimaginary) = 0) /\ (ge_balance_negative_expand_firstfirstimaginary) = S ge_signed_half_expand_firstfirstimaginarydecode))) /\ ((ge_first_ip_expand_first) + ge_balance_negative_expand_firstfirstimaginary = (ge_first_in_expand_first) + ge_balance_positive_expand_firstfirstimaginary)))))) /\ ((exists ge_representation_real_code_expand_firstsecond ge_representation_imaginary_code_expand_firstsecond. (((b) = ((ge_representation_real_code_expand_firstsecond) + (ge_representation_imaginary_code_expand_firstsecond)) * S ((ge_representation_real_code_expand_firstsecond) + (ge_representation_imaginary_code_expand_firstsecond)) + ((ge_representation_imaginary_code_expand_firstsecond) + (ge_representation_imaginary_code_expand_firstsecond))) /\ ((exists ge_balance_positive_expand_firstsecondreal ge_balance_negative_expand_firstsecondreal. (((((ge_representation_real_code_expand_firstsecond) = 2 * (ge_balance_positive_expand_firstsecondreal) /\ (ge_balance_negative_expand_firstsecondreal) = 0) \/ exists ge_signed_half_expand_firstsecondrealdecode. (((ge_representation_real_code_expand_firstsecond) = 2 * ge_signed_half_expand_firstsecondrealdecode + 1 /\ (ge_balance_positive_expand_firstsecondreal) = 0) /\ (ge_balance_negative_expand_firstsecondreal) = S ge_signed_half_expand_firstsecondrealdecode))) /\ ((ge_second_rp_expand_first) + ge_balance_negative_expand_firstsecondreal = (ge_second_rn_expand_first) + ge_balance_positive_expand_firstsecondreal))) /\ (exists ge_balance_positive_expand_firstsecondimaginary ge_balance_negative_expand_firstsecondimaginary. (((((ge_representation_imaginary_code_expand_firstsecond) = 2 * (ge_balance_positive_expand_firstsecondimaginary) /\ (ge_balance_negative_expand_firstsecondimaginary) = 0) \/ exists ge_signed_half_expand_firstsecondimaginarydecode. (((ge_representation_imaginary_code_expand_firstsecond) = 2 * ge_signed_half_expand_firstsecondimaginarydecode + 1 /\ (ge_balance_positive_expand_firstsecondimaginary) = 0) /\ (ge_balance_negative_expand_firstsecondimaginary) = S ge_signed_half_expand_firstsecondimaginarydecode))) /\ ((ge_second_ip_expand_first) + ge_balance_negative_expand_firstsecondimaginary = (ge_second_in_expand_first) + ge_balance_positive_expand_firstsecondimaginary)))))) /\ (exists ge_representation_real_code_expand_firstoutput ge_representation_imaginary_code_expand_firstoutput. (((p) = ((ge_representation_real_code_expand_firstoutput) + (ge_representation_imaginary_code_expand_firstoutput)) * S ((ge_representation_real_code_expand_firstoutput) + (ge_representation_imaginary_code_expand_firstoutput)) + ((ge_representation_imaginary_code_expand_firstoutput) + (ge_representation_imaginary_code_expand_firstoutput))) /\ ((exists ge_balance_positive_expand_firstoutputreal ge_balance_negative_expand_firstoutputreal. (((((ge_representation_real_code_expand_firstoutput) = 2 * (ge_balance_positive_expand_firstoutputreal) /\ (ge_balance_negative_expand_firstoutputreal) = 0) \/ exists ge_signed_half_expand_firstoutputrealdecode. (((ge_representation_real_code_expand_firstoutput) = 2 * ge_signed_half_expand_firstoutputrealdecode + 1 /\ (ge_balance_positive_expand_firstoutputreal) = 0) /\ (ge_balance_negative_expand_firstoutputreal) = S ge_signed_half_expand_firstoutputrealdecode))) /\ ((((((((ge_first_rp_expand_first) * (ge_second_rp_expand_first))) + (((ge_first_rn_expand_first) * (ge_second_rn_expand_first))))) + (((((ge_first_ip_expand_first) * (ge_second_in_expand_first))) + (((ge_first_in_expand_first) * (ge_second_ip_expand_first))))))) + ge_balance_negative_expand_firstoutputreal = (((((((ge_first_rp_expand_first) * (ge_second_rn_expand_first))) + (((ge_first_rn_expand_first) * (ge_second_rp_expand_first))))) + (((((ge_first_ip_expand_first) * (ge_second_ip_expand_first))) + (((ge_first_in_expand_first) * (ge_second_in_expand_first))))))) + ge_balance_positive_expand_firstoutputreal))) /\ (exists ge_balance_positive_expand_firstoutputimaginary ge_balance_negative_expand_firstoutputimaginary. (((((ge_representation_imaginary_code_expand_firstoutput) = 2 * (ge_balance_positive_expand_firstoutputimaginary) /\ (ge_balance_negative_expand_firstoutputimaginary) = 0) \/ exists ge_signed_half_expand_firstoutputimaginarydecode. (((ge_representation_imaginary_code_expand_firstoutput) = 2 * ge_signed_half_expand_firstoutputimaginarydecode + 1 /\ (ge_balance_positive_expand_firstoutputimaginary) = 0) /\ (ge_balance_negative_expand_firstoutputimaginary) = S ge_signed_half_expand_firstoutputimaginarydecode))) /\ ((((((((ge_first_rp_expand_first) * (ge_second_ip_expand_first))) + (((ge_first_rn_expand_first) * (ge_second_in_expand_first))))) + (((((ge_first_ip_expand_first) * (ge_second_rp_expand_first))) + (((ge_first_in_expand_first) * (ge_second_rn_expand_first))))))) + ge_balance_negative_expand_firstoutputimaginary = (((((((ge_first_rp_expand_first) * (ge_second_in_expand_first))) + (((ge_first_rn_expand_first) * (ge_second_ip_expand_first))))) + (((((ge_first_ip_expand_first) * (ge_second_rn_expand_first))) + (((ge_first_in_expand_first) * (ge_second_rp_expand_first))))))) + ge_balance_positive_expand_firstoutputimaginary))))))))) -> (exists ge_first_rp_expand_second ge_first_rn_expand_second ge_first_ip_expand_second ge_first_in_expand_second ge_second_rp_expand_second ge_second_rn_expand_second ge_second_ip_expand_second ge_second_in_expand_second. ((exists ge_representation_real_code_expand_secondfirst ge_representation_imaginary_code_expand_secondfirst. (((a) = ((ge_representation_real_code_expand_secondfirst) + (ge_representation_imaginary_code_expand_secondfirst)) * S ((ge_representation_real_code_expand_secondfirst) + (ge_representation_imaginary_code_expand_secondfirst)) + ((ge_representation_imaginary_code_expand_secondfirst) + (ge_representation_imaginary_code_expand_secondfirst))) /\ ((exists ge_balance_positive_expand_secondfirstreal ge_balance_negative_expand_secondfirstreal. (((((ge_representation_real_code_expand_secondfirst) = 2 * (ge_balance_positive_expand_secondfirstreal) /\ (ge_balance_negative_expand_secondfirstreal) = 0) \/ exists ge_signed_half_expand_secondfirstrealdecode. (((ge_representation_real_code_expand_secondfirst) = 2 * ge_signed_half_expand_secondfirstrealdecode + 1 /\ (ge_balance_positive_expand_secondfirstreal) = 0) /\ (ge_balance_negative_expand_secondfirstreal) = S ge_signed_half_expand_secondfirstrealdecode))) /\ ((ge_first_rp_expand_second) + ge_balance_negative_expand_secondfirstreal = (ge_first_rn_expand_second) + ge_balance_positive_expand_secondfirstreal))) /\ (exists ge_balance_positive_expand_secondfirstimaginary ge_balance_negative_expand_secondfirstimaginary. (((((ge_representation_imaginary_code_expand_secondfirst) = 2 * (ge_balance_positive_expand_secondfirstimaginary) /\ (ge_balance_negative_expand_secondfirstimaginary) = 0) \/ exists ge_signed_half_expand_secondfirstimaginarydecode. (((ge_representation_imaginary_code_expand_secondfirst) = 2 * ge_signed_half_expand_secondfirstimaginarydecode + 1 /\ (ge_balance_positive_expand_secondfirstimaginary) = 0) /\ (ge_balance_negative_expand_secondfirstimaginary) = S ge_signed_half_expand_secondfirstimaginarydecode))) /\ ((ge_first_ip_expand_second) + ge_balance_negative_expand_secondfirstimaginary = (ge_first_in_expand_second) + ge_balance_positive_expand_secondfirstimaginary)))))) /\ ((exists ge_representation_real_code_expand_secondsecond ge_representation_imaginary_code_expand_secondsecond. (((c) = ((ge_representation_real_code_expand_secondsecond) + (ge_representation_imaginary_code_expand_secondsecond)) * S ((ge_representation_real_code_expand_secondsecond) + (ge_representation_imaginary_code_expand_secondsecond)) + ((ge_representation_imaginary_code_expand_secondsecond) + (ge_representation_imaginary_code_expand_secondsecond))) /\ ((exists ge_balance_positive_expand_secondsecondreal ge_balance_negative_expand_secondsecondreal. (((((ge_representation_real_code_expand_secondsecond) = 2 * (ge_balance_positive_expand_secondsecondreal) /\ (ge_balance_negative_expand_secondsecondreal) = 0) \/ exists ge_signed_half_expand_secondsecondrealdecode. (((ge_representation_real_code_expand_secondsecond) = 2 * ge_signed_half_expand_secondsecondrealdecode + 1 /\ (ge_balance_positive_expand_secondsecondreal) = 0) /\ (ge_balance_negative_expand_secondsecondreal) = S ge_signed_half_expand_secondsecondrealdecode))) /\ ((ge_second_rp_expand_second) + ge_balance_negative_expand_secondsecondreal = (ge_second_rn_expand_second) + ge_balance_positive_expand_secondsecondreal))) /\ (exists ge_balance_positive_expand_secondsecondimaginary ge_balance_negative_expand_secondsecondimaginary. (((((ge_representation_imaginary_code_expand_secondsecond) = 2 * (ge_balance_positive_expand_secondsecondimaginary) /\ (ge_balance_negative_expand_secondsecondimaginary) = 0) \/ exists ge_signed_half_expand_secondsecondimaginarydecode. (((ge_representation_imaginary_code_expand_secondsecond) = 2 * ge_signed_half_expand_secondsecondimaginarydecode + 1 /\ (ge_balance_positive_expand_secondsecondimaginary) = 0) /\ (ge_balance_negative_expand_secondsecondimaginary) = S ge_signed_half_expand_secondsecondimaginarydecode))) /\ ((ge_second_ip_expand_second) + ge_balance_negative_expand_secondsecondimaginary = (ge_second_in_expand_second) + ge_balance_positive_expand_secondsecondimaginary)))))) /\ (exists ge_representation_real_code_expand_secondoutput ge_representation_imaginary_code_expand_secondoutput. (((q) = ((ge_representation_real_code_expand_secondoutput) + (ge_representation_imaginary_code_expand_secondoutput)) * S ((ge_representation_real_code_expand_secondoutput) + (ge_representation_imaginary_code_expand_secondoutput)) + ((ge_representation_imaginary_code_expand_secondoutput) + (ge_representation_imaginary_code_expand_secondoutput))) /\ ((exists ge_balance_positive_expand_secondoutputreal ge_balance_negative_expand_secondoutputreal. (((((ge_representation_real_code_expand_secondoutput) = 2 * (ge_balance_positive_expand_secondoutputreal) /\ (ge_balance_negative_expand_secondoutputreal) = 0) \/ exists ge_signed_half_expand_secondoutputrealdecode. (((ge_representation_real_code_expand_secondoutput) = 2 * ge_signed_half_expand_secondoutputrealdecode + 1 /\ (ge_balance_positive_expand_secondoutputreal) = 0) /\ (ge_balance_negative_expand_secondoutputreal) = S ge_signed_half_expand_secondoutputrealdecode))) /\ ((((((((ge_first_rp_expand_second) * (ge_second_rp_expand_second))) + (((ge_first_rn_expand_second) * (ge_second_rn_expand_second))))) + (((((ge_first_ip_expand_second) * (ge_second_in_expand_second))) + (((ge_first_in_expand_second) * (ge_second_ip_expand_second))))))) + ge_balance_negative_expand_secondoutputreal = (((((((ge_first_rp_expand_second) * (ge_second_rn_expand_second))) + (((ge_first_rn_expand_second) * (ge_second_rp_expand_second))))) + (((((ge_first_ip_expand_second) * (ge_second_ip_expand_second))) + (((ge_first_in_expand_second) * (ge_second_in_expand_second))))))) + ge_balance_positive_expand_secondoutputreal))) /\ (exists ge_balance_positive_expand_secondoutputimaginary ge_balance_negative_expand_secondoutputimaginary. (((((ge_representation_imaginary_code_expand_secondoutput) = 2 * (ge_balance_positive_expand_secondoutputimaginary) /\ (ge_balance_negative_expand_secondoutputimaginary) = 0) \/ exists ge_signed_half_expand_secondoutputimaginarydecode. (((ge_representation_imaginary_code_expand_secondoutput) = 2 * ge_signed_half_expand_secondoutputimaginarydecode + 1 /\ (ge_balance_positive_expand_secondoutputimaginary) = 0) /\ (ge_balance_negative_expand_secondoutputimaginary) = S ge_signed_half_expand_secondoutputimaginarydecode))) /\ ((((((((ge_first_rp_expand_second) * (ge_second_ip_expand_second))) + (((ge_first_rn_expand_second) * (ge_second_in_expand_second))))) + (((((ge_first_ip_expand_second) * (ge_second_rp_expand_second))) + (((ge_first_in_expand_second) * (ge_second_rn_expand_second))))))) + ge_balance_negative_expand_secondoutputimaginary = (((((((ge_first_rp_expand_second) * (ge_second_in_expand_second))) + (((ge_first_rn_expand_second) * (ge_second_ip_expand_second))))) + (((((ge_first_ip_expand_second) * (ge_second_rn_expand_second))) + (((ge_first_in_expand_second) * (ge_second_rp_expand_second))))))) + ge_balance_positive_expand_secondoutputimaginary))))))))) -> (exists ge_first_rp_expand_product ge_first_rn_expand_product ge_first_ip_expand_product ge_first_in_expand_product ge_second_rp_expand_product ge_second_rn_expand_product ge_second_ip_expand_product ge_second_in_expand_product. ((exists ge_representation_real_code_expand_productfirst ge_representation_imaginary_code_expand_productfirst. (((a) = ((ge_representation_real_code_expand_productfirst) + (ge_representation_imaginary_code_expand_productfirst)) * S ((ge_representation_real_code_expand_productfirst) + (ge_representation_imaginary_code_expand_productfirst)) + ((ge_representation_imaginary_code_expand_productfirst) + (ge_representation_imaginary_code_expand_productfirst))) /\ ((exists ge_balance_positive_expand_productfirstreal ge_balance_negative_expand_productfirstreal. (((((ge_representation_real_code_expand_productfirst) = 2 * (ge_balance_positive_expand_productfirstreal) /\ (ge_balance_negative_expand_productfirstreal) = 0) \/ exists ge_signed_half_expand_productfirstrealdecode. (((ge_representation_real_code_expand_productfirst) = 2 * ge_signed_half_expand_productfirstrealdecode + 1 /\ (ge_balance_positive_expand_productfirstreal) = 0) /\ (ge_balance_negative_expand_productfirstreal) = S ge_signed_half_expand_productfirstrealdecode))) /\ ((ge_first_rp_expand_product) + ge_balance_negative_expand_productfirstreal = (ge_first_rn_expand_product) + ge_balance_positive_expand_productfirstreal))) /\ (exists ge_balance_positive_expand_productfirstimaginary ge_balance_negative_expand_productfirstimaginary. (((((ge_representation_imaginary_code_expand_productfirst) = 2 * (ge_balance_positive_expand_productfirstimaginary) /\ (ge_balance_negative_expand_productfirstimaginary) = 0) \/ exists ge_signed_half_expand_productfirstimaginarydecode. (((ge_representation_imaginary_code_expand_productfirst) = 2 * ge_signed_half_expand_productfirstimaginarydecode + 1 /\ (ge_balance_positive_expand_productfirstimaginary) = 0) /\ (ge_balance_negative_expand_productfirstimaginary) = S ge_signed_half_expand_productfirstimaginarydecode))) /\ ((ge_first_ip_expand_product) + ge_balance_negative_expand_productfirstimaginary = (ge_first_in_expand_product) + ge_balance_positive_expand_productfirstimaginary)))))) /\ ((exists ge_representation_real_code_expand_productsecond ge_representation_imaginary_code_expand_productsecond. (((s) = ((ge_representation_real_code_expand_productsecond) + (ge_representation_imaginary_code_expand_productsecond)) * S ((ge_representation_real_code_expand_productsecond) + (ge_representation_imaginary_code_expand_productsecond)) + ((ge_representation_imaginary_code_expand_productsecond) + (ge_representation_imaginary_code_expand_productsecond))) /\ ((exists ge_balance_positive_expand_productsecondreal ge_balance_negative_expand_productsecondreal. (((((ge_representation_real_code_expand_productsecond) = 2 * (ge_balance_positive_expand_productsecondreal) /\ (ge_balance_negative_expand_productsecondreal) = 0) \/ exists ge_signed_half_expand_productsecondrealdecode. (((ge_representation_real_code_expand_productsecond) = 2 * ge_signed_half_expand_productsecondrealdecode + 1 /\ (ge_balance_positive_expand_productsecondreal) = 0) /\ (ge_balance_negative_expand_productsecondreal) = S ge_signed_half_expand_productsecondrealdecode))) /\ ((ge_second_rp_expand_product) + ge_balance_negative_expand_productsecondreal = (ge_second_rn_expand_product) + ge_balance_positive_expand_productsecondreal))) /\ (exists ge_balance_positive_expand_productsecondimaginary ge_balance_negative_expand_productsecondimaginary. (((((ge_representation_imaginary_code_expand_productsecond) = 2 * (ge_balance_positive_expand_productsecondimaginary) /\ (ge_balance_negative_expand_productsecondimaginary) = 0) \/ exists ge_signed_half_expand_productsecondimaginarydecode. (((ge_representation_imaginary_code_expand_productsecond) = 2 * ge_signed_half_expand_productsecondimaginarydecode + 1 /\ (ge_balance_positive_expand_productsecondimaginary) = 0) /\ (ge_balance_negative_expand_productsecondimaginary) = S ge_signed_half_expand_productsecondimaginarydecode))) /\ ((ge_second_ip_expand_product) + ge_balance_negative_expand_productsecondimaginary = (ge_second_in_expand_product) + ge_balance_positive_expand_productsecondimaginary)))))) /\ (exists ge_representation_real_code_expand_productoutput ge_representation_imaginary_code_expand_productoutput. (((t) = ((ge_representation_real_code_expand_productoutput) + (ge_representation_imaginary_code_expand_productoutput)) * S ((ge_representation_real_code_expand_productoutput) + (ge_representation_imaginary_code_expand_productoutput)) + ((ge_representation_imaginary_code_expand_productoutput) + (ge_representation_imaginary_code_expand_productoutput))) /\ ((exists ge_balance_positive_expand_productoutputreal ge_balance_negative_expand_productoutputreal. (((((ge_representation_real_code_expand_productoutput) = 2 * (ge_balance_positive_expand_productoutputreal) /\ (ge_balance_negative_expand_productoutputreal) = 0) \/ exists ge_signed_half_expand_productoutputrealdecode. (((ge_representation_real_code_expand_productoutput) = 2 * ge_signed_half_expand_productoutputrealdecode + 1 /\ (ge_balance_positive_expand_productoutputreal) = 0) /\ (ge_balance_negative_expand_productoutputreal) = S ge_signed_half_expand_productoutputrealdecode))) /\ ((((((((ge_first_rp_expand_product) * (ge_second_rp_expand_product))) + (((ge_first_rn_expand_product) * (ge_second_rn_expand_product))))) + (((((ge_first_ip_expand_product) * (ge_second_in_expand_product))) + (((ge_first_in_expand_product) * (ge_second_ip_expand_product))))))) + ge_balance_negative_expand_productoutputreal = (((((((ge_first_rp_expand_product) * (ge_second_rn_expand_product))) + (((ge_first_rn_expand_product) * (ge_second_rp_expand_product))))) + (((((ge_first_ip_expand_product) * (ge_second_ip_expand_product))) + (((ge_first_in_expand_product) * (ge_second_in_expand_product))))))) + ge_balance_positive_expand_productoutputreal))) /\ (exists ge_balance_positive_expand_productoutputimaginary ge_balance_negative_expand_productoutputimaginary. (((((ge_representation_imaginary_code_expand_productoutput) = 2 * (ge_balance_positive_expand_productoutputimaginary) /\ (ge_balance_negative_expand_productoutputimaginary) = 0) \/ exists ge_signed_half_expand_productoutputimaginarydecode. (((ge_representation_imaginary_code_expand_productoutput) = 2 * ge_signed_half_expand_productoutputimaginarydecode + 1 /\ (ge_balance_positive_expand_productoutputimaginary) = 0) /\ (ge_balance_negative_expand_productoutputimaginary) = S ge_signed_half_expand_productoutputimaginarydecode))) /\ ((((((((ge_first_rp_expand_product) * (ge_second_ip_expand_product))) + (((ge_first_rn_expand_product) * (ge_second_in_expand_product))))) + (((((ge_first_ip_expand_product) * (ge_second_rp_expand_product))) + (((ge_first_in_expand_product) * (ge_second_rn_expand_product))))))) + ge_balance_negative_expand_productoutputimaginary = (((((((ge_first_rp_expand_product) * (ge_second_in_expand_product))) + (((ge_first_rn_expand_product) * (ge_second_ip_expand_product))))) + (((((ge_first_ip_expand_product) * (ge_second_rn_expand_product))) + (((ge_first_in_expand_product) * (ge_second_rp_expand_product))))))) + ge_balance_positive_expand_productoutputimaginary))))))))) -> (exists ge_first_rp_expand_result ge_first_rn_expand_result ge_first_ip_expand_result ge_first_in_expand_result ge_second_rp_expand_result ge_second_rn_expand_result ge_second_ip_expand_result ge_second_in_expand_result. ((exists ge_representation_real_code_expand_resultfirst ge_representation_imaginary_code_expand_resultfirst. (((p) = ((ge_representation_real_code_expand_resultfirst) + (ge_representation_imaginary_code_expand_resultfirst)) * S ((ge_representation_real_code_expand_resultfirst) + (ge_representation_imaginary_code_expand_resultfirst)) + ((ge_representation_imaginary_code_expand_resultfirst) + (ge_representation_imaginary_code_expand_resultfirst))) /\ ((exists ge_balance_positive_expand_resultfirstreal ge_balance_negative_expand_resultfirstreal. (((((ge_representation_real_code_expand_resultfirst) = 2 * (ge_balance_positive_expand_resultfirstreal) /\ (ge_balance_negative_expand_resultfirstreal) = 0) \/ exists ge_signed_half_expand_resultfirstrealdecode. (((ge_representation_real_code_expand_resultfirst) = 2 * ge_signed_half_expand_resultfirstrealdecode + 1 /\ (ge_balance_positive_expand_resultfirstreal) = 0) /\ (ge_balance_negative_expand_resultfirstreal) = S ge_signed_half_expand_resultfirstrealdecode))) /\ ((ge_first_rp_expand_result) + ge_balance_negative_expand_resultfirstreal = (ge_first_rn_expand_result) + ge_balance_positive_expand_resultfirstreal))) /\ (exists ge_balance_positive_expand_resultfirstimaginary ge_balance_negative_expand_resultfirstimaginary. (((((ge_representation_imaginary_code_expand_resultfirst) = 2 * (ge_balance_positive_expand_resultfirstimaginary) /\ (ge_balance_negative_expand_resultfirstimaginary) = 0) \/ exists ge_signed_half_expand_resultfirstimaginarydecode. (((ge_representation_imaginary_code_expand_resultfirst) = 2 * ge_signed_half_expand_resultfirstimaginarydecode + 1 /\ (ge_balance_positive_expand_resultfirstimaginary) = 0) /\ (ge_balance_negative_expand_resultfirstimaginary) = S ge_signed_half_expand_resultfirstimaginarydecode))) /\ ((ge_first_ip_expand_result) + ge_balance_negative_expand_resultfirstimaginary = (ge_first_in_expand_result) + ge_balance_positive_expand_resultfirstimaginary)))))) /\ ((exists ge_representation_real_code_expand_resultsecond ge_representation_imaginary_code_expand_resultsecond. (((q) = ((ge_representation_real_code_expand_resultsecond) + (ge_representation_imaginary_code_expand_resultsecond)) * S ((ge_representation_real_code_expand_resultsecond) + (ge_representation_imaginary_code_expand_resultsecond)) + ((ge_representation_imaginary_code_expand_resultsecond) + (ge_representation_imaginary_code_expand_resultsecond))) /\ ((exists ge_balance_positive_expand_resultsecondreal ge_balance_negative_expand_resultsecondreal. (((((ge_representation_real_code_expand_resultsecond) = 2 * (ge_balance_positive_expand_resultsecondreal) /\ (ge_balance_negative_expand_resultsecondreal) = 0) \/ exists ge_signed_half_expand_resultsecondrealdecode. (((ge_representation_real_code_expand_resultsecond) = 2 * ge_signed_half_expand_resultsecondrealdecode + 1 /\ (ge_balance_positive_expand_resultsecondreal) = 0) /\ (ge_balance_negative_expand_resultsecondreal) = S ge_signed_half_expand_resultsecondrealdecode))) /\ ((ge_second_rp_expand_result) + ge_balance_negative_expand_resultsecondreal = (ge_second_rn_expand_result) + ge_balance_positive_expand_resultsecondreal))) /\ (exists ge_balance_positive_expand_resultsecondimaginary ge_balance_negative_expand_resultsecondimaginary. (((((ge_representation_imaginary_code_expand_resultsecond) = 2 * (ge_balance_positive_expand_resultsecondimaginary) /\ (ge_balance_negative_expand_resultsecondimaginary) = 0) \/ exists ge_signed_half_expand_resultsecondimaginarydecode. (((ge_representation_imaginary_code_expand_resultsecond) = 2 * ge_signed_half_expand_resultsecondimaginarydecode + 1 /\ (ge_balance_positive_expand_resultsecondimaginary) = 0) /\ (ge_balance_negative_expand_resultsecondimaginary) = S ge_signed_half_expand_resultsecondimaginarydecode))) /\ ((ge_second_ip_expand_result) + ge_balance_negative_expand_resultsecondimaginary = (ge_second_in_expand_result) + ge_balance_positive_expand_resultsecondimaginary)))))) /\ (exists ge_representation_real_code_expand_resultoutput ge_representation_imaginary_code_expand_resultoutput. (((t) = ((ge_representation_real_code_expand_resultoutput) + (ge_representation_imaginary_code_expand_resultoutput)) * S ((ge_representation_real_code_expand_resultoutput) + (ge_representation_imaginary_code_expand_resultoutput)) + ((ge_representation_imaginary_code_expand_resultoutput) + (ge_representation_imaginary_code_expand_resultoutput))) /\ ((exists ge_balance_positive_expand_resultoutputreal ge_balance_negative_expand_resultoutputreal. (((((ge_representation_real_code_expand_resultoutput) = 2 * (ge_balance_positive_expand_resultoutputreal) /\ (ge_balance_negative_expand_resultoutputreal) = 0) \/ exists ge_signed_half_expand_resultoutputrealdecode. (((ge_representation_real_code_expand_resultoutput) = 2 * ge_signed_half_expand_resultoutputrealdecode + 1 /\ (ge_balance_positive_expand_resultoutputreal) = 0) /\ (ge_balance_negative_expand_resultoutputreal) = S ge_signed_half_expand_resultoutputrealdecode))) /\ ((((ge_first_rp_expand_result) + (ge_second_rp_expand_result))) + ge_balance_negative_expand_resultoutputreal = (((ge_first_rn_expand_result) + (ge_second_rn_expand_result))) + ge_balance_positive_expand_resultoutputreal))) /\ (exists ge_balance_positive_expand_resultoutputimaginary ge_balance_negative_expand_resultoutputimaginary. (((((ge_representation_imaginary_code_expand_resultoutput) = 2 * (ge_balance_positive_expand_resultoutputimaginary) /\ (ge_balance_negative_expand_resultoutputimaginary) = 0) \/ exists ge_signed_half_expand_resultoutputimaginarydecode. (((ge_representation_imaginary_code_expand_resultoutput) = 2 * ge_signed_half_expand_resultoutputimaginarydecode + 1 /\ (ge_balance_positive_expand_resultoutputimaginary) = 0) /\ (ge_balance_negative_expand_resultoutputimaginary) = S ge_signed_half_expand_resultoutputimaginarydecode))) /\ ((((ge_first_ip_expand_result) + (ge_second_ip_expand_result))) + ge_balance_negative_expand_resultoutputimaginary = (((ge_first_in_expand_result) + (ge_second_in_expand_result))) + ge_balance_positive_expand_resultoutputimaginary)))))))))

Complete tactic proof in conservative notation

All 52 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

52 script commands · 8 reading checkpoints · 2 local claims

This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (3)
01Fix variables and assumptionsL1–10

Work with arbitrary variables or the premises of the current implication.

  1. L1
    intro a
  2. L2
    intro b
  3. L3
    intro c
  4. L4
    intro s
  5. L5
    intro p
  6. L6
    intro q
  7. L7
    intro t
  8. L8
    intro hBC
  9. L9
    intro hAB
  10. L10
    intro hAC
02Fix variables and assumptionsL11–11

Work with arbitrary variables or the premises of the current implication.

  1. L11
    intro hAS
03Establish htotalL12–21

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply gaussian add exists.

  1. L12
    have htotal : ∃ u. ZPairAdd(p,q,u)Definitions: ZPairAdd(p,q,u)Original native command in the exact edition
  2. L13
    specialize gaussian_add_exists (p)
  3. L14
    specialize gaussian_add_exists (q)
  4. L15
    apply gaussian_add_exists
  5. L16
    specialize gaussian_multiply_output_valid (a)
  6. L17
    specialize gaussian_multiply_output_valid (b)
  7. L18
    specialize gaussian_multiply_output_valid (p)
  8. L19
    apply gaussian_multiply_output_valid
  9. L20
    exact hAB
  10. L21
    specialize gaussian_multiply_output_valid (a)
04Use earlier factsL22–25

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L22
    specialize gaussian_multiply_output_valid (c)
  2. L23
    specialize gaussian_multiply_output_valid (q)
  3. L24
    apply gaussian_multiply_output_valid
  4. L25
    exact hAC
05Separate the logical casesL26–26

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L26
    cases htotal
06Establish heqL27–36

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply gaussian multiply functional.

  1. L27
    have heq : x=t
  2. L28
    specialize gaussian_multiply_functional (a)
  3. L29
    specialize gaussian_multiply_functional (s)
  4. L30
    specialize gaussian_multiply_functional (x)
  5. L31
    specialize gaussian_multiply_functional (t)
  6. L32
    apply gaussian_multiply_functional
  7. L33
    specialize gaussian_multiply_add_compose (a)
  8. L34
    specialize gaussian_multiply_add_compose (b)
  9. L35
    specialize gaussian_multiply_add_compose (c)
  10. L36
    specialize gaussian_multiply_add_compose (s)
07Use earlier factsL37–46

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L37
    specialize gaussian_multiply_add_compose (p)
  2. L38
    specialize gaussian_multiply_add_compose (q)
  3. L39
    specialize gaussian_multiply_add_compose (x)
  4. L40
    apply gaussian_multiply_add_compose
  5. L41
    exact hBC
  6. L42
    exact hAB
  7. L43
    exact hAC
  8. L44
    exact htotal_witness
  9. L45
    exact hAS
  10. L46
    specialize gaussian_add_output_transport (p)
08Use earlier factsL47–52

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L47
    specialize gaussian_add_output_transport (q)
  2. L48
    specialize gaussian_add_output_transport (x)
  3. L49
    specialize gaussian_add_output_transport (t)
  4. L50
    apply gaussian_add_output_transport
  5. L51
    exact heq
  6. L52
    exact htotal_witness

Library-wide reading audit

Original defined command ledger · 52 lines
  1. 0001intro a
  2. 0002intro b
  3. 0003intro c
  4. 0004intro s
  5. 0005intro p
  6. 0006intro q
  7. 0007intro t
  8. 0008intro hBC
  9. 0009intro hAB
  10. 0010intro hAC
  11. 0011intro hAS
  12. 0012have htotal : ∃ u. ZPairAdd(p,q,u)
  13. 0013specialize gaussian_add_exists (p)
  14. 0014specialize gaussian_add_exists (q)
  15. 0015apply gaussian_add_exists
  16. 0016specialize gaussian_multiply_output_valid (a)
  17. 0017specialize gaussian_multiply_output_valid (b)
  18. 0018specialize gaussian_multiply_output_valid (p)
  19. 0019apply gaussian_multiply_output_valid
  20. 0020exact hAB
  21. 0021specialize gaussian_multiply_output_valid (a)
  22. 0022specialize gaussian_multiply_output_valid (c)
  23. 0023specialize gaussian_multiply_output_valid (q)
  24. 0024apply gaussian_multiply_output_valid
  25. 0025exact hAC
  26. 0026cases htotal
  27. 0027have heq : x=t
  28. 0028specialize gaussian_multiply_functional (a)
  29. 0029specialize gaussian_multiply_functional (s)
  30. 0030specialize gaussian_multiply_functional (x)
  31. 0031specialize gaussian_multiply_functional (t)
  32. 0032apply gaussian_multiply_functional
  33. 0033specialize gaussian_multiply_add_compose (a)
  34. 0034specialize gaussian_multiply_add_compose (b)
  35. 0035specialize gaussian_multiply_add_compose (c)
  36. 0036specialize gaussian_multiply_add_compose (s)
  37. 0037specialize gaussian_multiply_add_compose (p)
  38. 0038specialize gaussian_multiply_add_compose (q)
  39. 0039specialize gaussian_multiply_add_compose (x)
  40. 0040apply gaussian_multiply_add_compose
  41. 0041exact hBC
  42. 0042exact hAB
  43. 0043exact hAC
  44. 0044exact htotal_witness
  45. 0045exact hAS
  46. 0046specialize gaussian_add_output_transport (p)
  47. 0047specialize gaussian_add_output_transport (q)
  48. 0048specialize gaussian_add_output_transport (x)
  49. 0049specialize gaussian_add_output_transport (t)
  50. 0050apply gaussian_add_output_transport
  51. 0051exact heq
  52. 0052exact htotal_witness