Documentation

GQ2.HilbertSymbolNecessity

The necessity engine and the 11 −1-leaves #

This file proves the B7′-3 component of hilbertSymbol_dyadic, coordinated with the parallel B7′-4 development described in docs/orchestration/b7prime-b34-coordination.md. It provides the machinery that proves a dyadic Hilbert symbol is −1 — i.e. a ternary form has no nontrivial ℚ₂-zero — from a finite mod-2^k obstruction, and applies it to the eleven −1 residue leaves.

Necessity never touches the Hensel square criterion, so this file imports GQ2.HilbertSymbolDyadic only (the shared coercion helpers unit2_coe / unitCoe_coe live there).

Integralization: a ℚ₂-solution scales into ℤ_[2] #

theorem GQ2.HilbertSymbol.exists_int_triple {A B : ℤ_[2]} (h : IsHilbertSolvable A B) :
∃ (x : ℤ_[2]) (y : ℤ_[2]) (z : ℤ_[2]), (x 0 y 0 z 0) A * x ^ 2 + B * y ^ 2 = z ^ 2

Integralization. A nontrivial ℚ₂-zero of A X² + B Y² − Z² (with A, B ∈ ℤ_[2]) scales, by a common denominator, to a nontrivial ℤ_[2]-zero.

The 2-adic descent to a primitive solution #

theorem GQ2.HilbertSymbol.exists_primitive_triple {A B : ℤ_[2]} (h : ∃ (x : ℤ_[2]) (y : ℤ_[2]) (z : ℤ_[2]), (x 0 y 0 z 0) A * x ^ 2 + B * y ^ 2 = z ^ 2) :
∃ (x : ℤ_[2]) (y : ℤ_[2]) (z : ℤ_[2]), (IsUnit x IsUnit y IsUnit z) A * x ^ 2 + B * y ^ 2 = z ^ 2

Primitivity descent. A nontrivial ℤ_[2]-solution has a primitive one — with some coordinate a unit. If none is a unit, all are divisible by 2; halving strictly drops the measure Σ valuation.

The mod-2^k obstruction #

theorem GQ2.HilbertSymbol.not_isHilbertSolvable_of_mod (A B : ℤ_[2]) (k : ) (hk : ∀ (x y z : ZMod (2 ^ k)), IsUnit x IsUnit y IsUnit z(PadicInt.toZModPow k) A * x ^ 2 + (PadicInt.toZModPow k) B * y ^ 2 z ^ 2) :
¬IsHilbertSolvable A B

Non-solvability from a finite obstruction. If A X² + B Y² = Z² has no primitive solution over ZMod (2^k) (some coordinate a unit), it has no nontrivial ℚ₂-solution: integralize, primitivize, and push through the ring hom PadicInt.toZModPow k (which sends the unit coordinate to a unit by IsUnit.map).

The two −1-leaf families #

Both reduce hilbertSymbol … = -1 to a decide-checked non-solvability over ZMod 8, threading the axiom's unitCoe/unit2 wrappers through unitCoe_coe/unit2_coe. The decide obligation is passed as hdec so each concrete leaf below supplies it by by decide (512 triples, no native_decide).

theorem GQ2.HilbertSymbol.hilbertSymbol_uu_eq_neg_one {ru rv : ZMod 8} (hdec : ∀ (x y z : ZMod 8), IsUnit x IsUnit y IsUnit zru * x ^ 2 + rv * y ^ 2 z ^ 2) (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = ru) (hv : (PadicInt.toZModPow 3) v = rv) :

Unit·unit −1-leaf: (u, v)₂ = -1 at residues (ru, rv) for which ru x² + rv y² = z² has no primitive ZMod 8 solution.

theorem GQ2.HilbertSymbol.hilbertSymbol_u2v_eq_neg_one {ru rv : ZMod 8} (hdec : ∀ (x y z : ZMod 8), IsUnit x IsUnit y IsUnit zru * x ^ 2 + 2 * rv * y ^ 2 z ^ 2) (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = ru) (hv : (PadicInt.toZModPow 3) v = rv) :

(u, 2v) −1-leaf: (u, 2v)₂ = -1 at residues (ru, rv) for which ru x² + 2 rv y² = z² has no primitive ZMod 8 solution.

The 11 −1-leaves (plan §1 inventory; each decide at ZMod 8) #

Unit·unit: {3,3}, {3,7}, {7,7}. (u, 2v): u₀=3, v₀∈{1,5}; u₀=5, v₀∈{1,3,5,7}; u₀=7, v₀∈{3,7}. The by decide on each certifies it is a genuine mod-8 −1 leaf.

theorem GQ2.HilbertSymbol.leaf_uu_3_3 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 3) (hv : (PadicInt.toZModPow 3) v = 3) :
theorem GQ2.HilbertSymbol.leaf_uu_3_7 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 3) (hv : (PadicInt.toZModPow 3) v = 7) :
theorem GQ2.HilbertSymbol.leaf_uu_7_7 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 7) (hv : (PadicInt.toZModPow 3) v = 7) :
theorem GQ2.HilbertSymbol.leaf_u2v_3_1 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 3) (hv : (PadicInt.toZModPow 3) v = 1) :
theorem GQ2.HilbertSymbol.leaf_u2v_3_5 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 3) (hv : (PadicInt.toZModPow 3) v = 5) :
theorem GQ2.HilbertSymbol.leaf_u2v_5_1 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 5) (hv : (PadicInt.toZModPow 3) v = 1) :
theorem GQ2.HilbertSymbol.leaf_u2v_5_3 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 5) (hv : (PadicInt.toZModPow 3) v = 3) :
theorem GQ2.HilbertSymbol.leaf_u2v_5_5 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 5) (hv : (PadicInt.toZModPow 3) v = 5) :
theorem GQ2.HilbertSymbol.leaf_u2v_5_7 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 5) (hv : (PadicInt.toZModPow 3) v = 7) :
theorem GQ2.HilbertSymbol.leaf_u2v_7_3 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 7) (hv : (PadicInt.toZModPow 3) v = 3) :
theorem GQ2.HilbertSymbol.leaf_u2v_7_7 (u v : ℤ_[2]ˣ) (hu : (PadicInt.toZModPow 3) u = 7) (hv : (PadicInt.toZModPow 3) v = 7) :