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.
Statement with defined notation
forall a b c d m. (((a * d) = (b * c) + (m) \/ (b * c) = (a * d) + (m))) -> (a * a + b * b) * (c * c + d * d) = (a * c + b * d) * (a * c + b * d) + m * mEvery purple notation token opens its conservative definition. This reading surface never changes the unchanged intuitionistic kernel or confers checked-use authority.
Definitions used by this theorem
In the theorem statement
In local proof propositions
Exact expanded first-order statement
forall a b c d m. (((a * d) = (b * c) + (m) \/ (b * c) = (a * d) + (m))) -> (a * a + b * b) * (c * c + d * d) = (a * c + b * d) * (a * c + b * d) + m * mProof neighborhood
Direct theorem prerequisites
TS001U two_square_product_norm_blocks TS001R two_square_absolute_difference_square_balance TS001V two_square_sum_square_blocks TS001S two_square_cross_product_interchange add_comm · Stable closed add_assoc · Stable closedDirect theorem dependents
Definition-aware tactic body
Only propositions whose conservative expansion has been checked for exact first-order equivalence are compacted. Every changed line retains its immutable exact replay command.
Read the argument
Proof checkpoints
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.
Named ingredients (4)
01Fix variables and assumptionsL1–6
02Establish hgapL7–12
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply two square absolute difference square balance.
- L7
have hgap : m * m + ((a * d) * (b * c) + (a * d) * (b * c)) = (a * d) * (a * d) + (b * c) * (b * c) - L8
specialize two_square_absolute_difference_square_balance (a * d) - L9
specialize two_square_absolute_difference_square_balance (b * c) - L10
specialize two_square_absolute_difference_square_balance m - L11
apply two_square_absolute_difference_square_balance - L12
exact hdifference
03Establish hcrossL13–18
Establish this local claim before using it. It is not an additional assumption.
- L13
have hcross : (a * c) * (b * d) = (a * d) * (b * c) - L14
specialize two_square_cross_product_interchange a - L15
specialize two_square_cross_product_interchange b - L16
specialize two_square_cross_product_interchange c - L17
specialize two_square_cross_product_interchange d - L18
exact two_square_cross_product_interchange
04Establish hsquareL19–28
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply two square product norm blocks.
- L19
have hsquare : (a * c + b * d) * (a * c + b * d) = ((a * c) * (a * c) + (b * d) * (b * d)) + ((a * c) * (b * d) + (a * c) * (b * d)) - L20
specialize two_square_sum_square_blocks (a * c) - L21
specialize two_square_sum_square_blocks (b * d) - L22
exact two_square_sum_square_blocks - L23
rewrite hcross at hsquare - L24
rewrite hcross at hsquare - L25
trans ((a * c) * (a * c) + (b * d) * (b * d)) + ((a * d) * (a * d) + (b * c) * (b * c)) - L26
apply two_square_product_norm_blocks - L27
rewrite <- hgap - L28
rewrite hsquare
05Calculate and transport equalitiesL29–31
06Use earlier factsL32–32
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L32
apply add_comm
07Calculate and transport equalitiesL33–33
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L33
symm
08Use earlier factsL34–34
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L34
apply add_assoc
Original defined command ledger · 34 lines
- 0001
intro a - 0002
intro b - 0003
intro c - 0004
intro d - 0005
intro m - 0006
intro hdifference - 0007
have hgap : m * m + ((a * d) * (b * c) + (a * d) * (b * c)) = (a * d) * (a * d) + (b * c) * (b * c) - 0008
specialize two_square_absolute_difference_square_balance (a * d) - 0009
specialize two_square_absolute_difference_square_balance (b * c) - 0010
specialize two_square_absolute_difference_square_balance m - 0011
apply two_square_absolute_difference_square_balance - 0012
exact hdifference - 0013
have hcross : (a * c) * (b * d) = (a * d) * (b * c) - 0014
specialize two_square_cross_product_interchange a - 0015
specialize two_square_cross_product_interchange b - 0016
specialize two_square_cross_product_interchange c - 0017
specialize two_square_cross_product_interchange d - 0018
exact two_square_cross_product_interchange - 0019
have hsquare : (a * c + b * d) * (a * c + b * d) = ((a * c) * (a * c) + (b * d) * (b * d)) + ((a * c) * (b * d) + (a * c) * (b * d)) - 0020
specialize two_square_sum_square_blocks (a * c) - 0021
specialize two_square_sum_square_blocks (b * d) - 0022
exact two_square_sum_square_blocks - 0023
rewrite hcross at hsquare - 0024
rewrite hcross at hsquare - 0025
trans ((a * c) * (a * c) + (b * d) * (b * d)) + ((a * d) * (a * d) + (b * c) * (b * c)) - 0026
apply two_square_product_norm_blocks - 0027
rewrite <- hgap - 0028
rewrite hsquare - 0029
trans ((a * c) * (a * c) + (b * d) * (b * d)) + (((a * d) * (b * c) + (a * d) * (b * c)) + m * m) - 0030
congr - 0031
refl - 0032
apply add_comm - 0033
symm - 0034
apply add_assoc