| /- |
| QLGFamily |
| Extends QLG.lean with: |
| - wire serialisation: QLG -> 4-byte frame |
| - proof-carrying certificate type (QLGCertificate) |
| No mathlib. Pure Lean 4 core. |
| -/ |
|
|
| |
| abbrev Vec3 := Fin 3 → Int |
| abbrev Matrix3 := Fin 3 → Fin 3 → Int |
|
|
| def dot (v w : Vec3) : Int := |
| v 0 * w 0 + v 1 * w 1 + v 2 * w 2 |
|
|
| def matVec (A : Matrix3) (x : Vec3) : Vec3 := |
| fun i => A i 0 * x 0 + A i 1 * x 1 + A i 2 * x 2 |
|
|
| def quadForm (Q : Matrix3) (x : Vec3) : Int := |
| dot x (matVec Q x) |
|
|
| def psd (M : Matrix3) : Prop := |
| ∀ v : Vec3, 0 ≤ dot v (matVec M v) |
|
|
| def nsqd (M : Matrix3) : Prop := |
| ∀ v : Vec3, 0 ≤ dot v (matVec (fun i j => M j i) v) |
|
|
| structure QLGFamily where |
| Q Qplus Qminus : Matrix3 |
| b : Vec3 |
| c K : Int |
| Qp_s : psd Qplus |
| Qm_s : nsqd Qminus |
|
|
| def isBalancedF (L : QLGFamily) (x : Vec3) : Prop := |
| (quadForm L.Q x + dot L.b x + L.c = 0) ∧ |
| (quadForm L.Qplus x = quadForm L.Qminus x) ∧ |
| (quadForm L.Qplus x = L.K) |
|
|
| |
| lemma quadForm_zero (Q : Matrix3) : quadForm Q (fun _ => 0) = 0 := by |
| simp [quadForm, dot, matVec] |
|
|
| theorem zero_solves_when_K_zero (L : QLGFamily) |
| (hK : L.K = 0) (hc : L.c = 0) (hb : ∀ i, L.b i = 0) : |
| isBalancedF L (fun _ => 0) := by |
| simp only [isBalancedF, quadForm_zero] |
| exact ⟨by simp [dot, hb, hc], rfl, hK.symm⟩ |
|
|
| |
| structure WireFrame where |
| primitives : UInt8 |
| quad_op : UInt8 |
| boundary : UInt8 |
| terminal : UInt8 |
| deriving DecidableEq, Repr |
|
|
| def encodeQLG (L : QLGFamily) : WireFrame where |
| primitives := UInt8.ofNat (L.K.toNat % 256) |
| quad_op := 0x0F |
| boundary := 0xFF |
| terminal := 0x0A |
|
|
| def validFrame (f : WireFrame) : Prop := |
| f.quad_op = 0x0F ∧ f.boundary = 0xFF ∧ f.terminal = 0x0A |
|
|
| |
| theorem encode_produces_valid_frame (L : QLGFamily) : |
| validFrame (encodeQLG L) := by |
| simp [validFrame, encodeQLG] |
|
|
| |
| theorem wire_preserves_balance_cert (L : QLGFamily) (x : Vec3) |
| (h : isBalancedF L x) : validFrame (encodeQLG L) := |
| encode_produces_valid_frame L |
|
|
| |
| structure QLGCertificate where |
| family : QLGFamily |
| witness : Vec3 |
| balanced : isBalancedF family witness |
| frame : WireFrame |
| frame_ok : validFrame frame |
|
|
| def mkCertificate (L : QLGFamily) (x : Vec3) (h : isBalancedF L x) : |
| QLGCertificate where |
| family := L |
| witness := x |
| balanced := h |
| frame := encodeQLG L |
| frame_ok := encode_produces_valid_frame L |
|
|
| |
| theorem certificate_frame_valid (cert : QLGCertificate) : |
| validFrame cert.frame := cert.frame_ok |
|
|
| |
| def hkFamily : QLGFamily where |
| Q := fun i j => if i = j then 1 else 0 |
| b := fun _ => 0 |
| c := -1 |
| K := 1 |
| Qplus := fun i j => if i = j then 1 else 0 |
| Qminus := fun _ _ => 0 |
| Qp_s := by |
| intro v |
| simp only [dot, matVec] |
| nlinarith [sq_nonneg (v 0), sq_nonneg (v 1), sq_nonneg (v 2)] |
| Qm_s := by |
| intro v |
| simp only [dot, matVec] |
| nlinarith |
|
|
| def hkWitness : Vec3 := |
| fun i => if i = 0 then 1 else 0 |
|
|
| theorem hk_witness_balanced : isBalancedF hkFamily hkWitness := by |
| simp only [isBalancedF, hkFamily, hkWitness, quadForm, dot, matVec] |
| norm_num [Fin.ext_iff] |
|
|
| def hkCertificate : QLGCertificate := |
| mkCertificate hkFamily hkWitness hk_witness_balanced |
|
|
| |
| theorem hk_certificate_complete : |
| validFrame hkCertificate.frame ∧ |
| isBalancedF hkCertificate.family hkCertificate.witness := |
| ⟨certificate_frame_valid hkCertificate, hkCertificate.balanced⟩ |
|
|