Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/erdos625-matching-restriction-product.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Erdős 625 matching-restriction product

on:
pull_request:
paths:
- "625/formalization/Erdos625/Section9MatchingRestrictionProduct.lean"
- "625/formalization/MATCHING_RESTRICTION_PRODUCT_AUDIT.md"
- ".github/workflows/erdos625-matching-restriction-product.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
focused-lean-check:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Reject placeholders and project axioms in the new module
shell: bash
run: |
if grep -nE \
'(^|[[:space:]])(sorry|admit|sorryAx)([[:space:][:punct:]]|$)|^[[:space:]]*(axiom|constant|unsafe)[[:space:]]' \
625/formalization/Erdos625/Section9MatchingRestrictionProduct.lean; then
exit 1
fi
- uses: leanprover/lean-action@38fbc41a8c28c4cbaec22d7f7de508ec2e7c0dd9 # v1
with:
lake-package-directory: 625/formalization
auto-config: false
build: true
build-args: --wfail
use-mathlib-cache: true
use-github-cache: false
nanoda: false
- name: Compile the module warning-fatally after dependency build
working-directory: 625/formalization
shell: bash
run: |
lake env lean -DwarningAsError=true \
Erdos625/Section9MatchingRestrictionProduct.lean \
-o .lake/build/lib/lean/Erdos625/Section9MatchingRestrictionProduct.olean
140 changes: 140 additions & 0 deletions 625/formalization/Erdos625/Section9MatchingRestrictionProduct.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import Erdos625.Section9FixedFEvenAggregation
import Erdos625.EvenMatchingRestriction
import Mathlib.Tactic

/-!
# Section IX: direct product bound from matching restriction

For an exposed bipartite matching `M`, an even edge set is uniquely determined
by its restriction outside `M`. This gives a direct subset-product bound for
the weighted even-family sum and avoids the cycle/polymer decomposition at the
finite algebraic level.

The final theorem composes this injection with the already checked fixed-`F`
aggregation. It does not identify the fixed-`F` sum with the actual tagged
attachment expectation, prove the residual-`q` analytic envelope, or establish
Lemma 9.1.
-/

namespace Erdos625

open scoped BigOperators ENNReal

noncomputable section

/-- On the finite family of even bipartite edge sets, deleting a matching is
injective. Equivalently, an even completion of a prescribed outside-matching
edge set is unique when it exists. -/
theorem sdiff_matching_injective_on_bipartiteEvenEdgeSets
{A B : Type*} [Fintype A] [Fintype B]
[DecidableEq A] [DecidableEq B]
(M : Finset (A × B)) (hM : IsBipartiteMatching M) :
∀ F ∈ bipartiteEvenEdgeSets A B,
∀ G ∈ bipartiteEvenEdgeSets A B,
F \ M = G \ M → F = G := by
intro F hF G hG hdiff
apply bipartiteEdgeMatrix_injective
apply evenMatrix_eq_of_eq_on_residual
(bipartiteEdgeMatrix F) (bipartiteEdgeMatrix G)
(fun a b => (a, b) ∈ M) (fun a b => (a, b) ∉ M)
· apply (bipartiteEdgeMatrix_even_iff F).2
apply (bipartiteEvenEdgeSet_iff_isBipartiteEven F).2
simpa [bipartiteEvenEdgeSets] using hF
· apply (bipartiteEdgeMatrix_even_iff G).2
apply (bipartiteEvenEdgeSet_iff_isBipartiteEven G).2
simpa [bipartiteEvenEdgeSets] using hG
· exact hM.1
· intro a b _hab
by_cases hmem : (a, b) ∈ M
· exact Or.inl hmem
· exact Or.inr hmem
· intro a b _hab
by_cases hmem : (a, b) ∈ M
· exact Or.inl hmem
· exact Or.inr hmem
· intro a b hab
have hmem : ((a, b) ∈ F) ↔ ((a, b) ∈ G) := by
have h := congrArg (fun S : Finset (A × B) => (a, b) ∈ S) hdiff
simpa [hab] using h
by_cases hFmem : (a, b) ∈ F
· have hGmem : (a, b) ∈ G := hmem.mp hFmem
simp [bipartiteEdgeMatrix, hFmem, hGmem]
· have hGmem : (a, b) ∉ G := by
intro hG
exact hFmem (hmem.mpr hG)
simp [bipartiteEdgeMatrix, hFmem, hGmem]

/-- The weighted even-family sum is bounded directly by the full subset product
on the cells outside the matching. No cycle decomposition is used. -/
theorem weighted_evenSubgraph_ennreal_matching_product
{A B : Type*} [Fintype A] [Fintype B]
[DecidableEq A] [DecidableEq B]
(q : A → B → ENNReal) (M : Finset (A × B))
(hM : IsBipartiteMatching M) :
(∑ F ∈ bipartiteEvenEdgeSets A B,
edgeWeightOutsideENN q M F) ≤
∏ e ∈ (Finset.univ : Finset (A × B)) \ M,
(1 + q e.1 e.2) := by
classical
unfold edgeWeightOutsideENN
calc
(∑ F ∈ bipartiteEvenEdgeSets A B,
∏ e ∈ F \ M, q e.1 e.2) =
∑ S ∈ Finset.image (fun F : Finset (A × B) => F \ M)
(bipartiteEvenEdgeSets A B),
∏ e ∈ S, q e.1 e.2 := by
symm
rw [Finset.sum_image]
exact sdiff_matching_injective_on_bipartiteEvenEdgeSets M hM
_ ≤ ∑ S ∈ Finset.powerset
((Finset.univ : Finset (A × B)) \ M),
∏ e ∈ S, q e.1 e.2 := by
apply Finset.sum_le_sum_of_subset
exact Finset.image_subset_iff.mpr fun F _hF =>
Finset.mem_powerset.mpr (by
intro e he
exact Finset.mem_sdiff.mpr
⟨Finset.mem_univ e, (Finset.mem_sdiff.mp he).2⟩)
_ = ∏ e ∈ (Finset.univ : Finset (A × B)) \ M,
(1 + q e.1 e.2) := by
simp +decide [Finset.prod_add, add_comm]

/-- Direct matching-restriction replacement for the polymer-product endpoint
in the finite capped fixed-`F` aggregation. -/
theorem residualCappedEvenFixedFSum_le_lambdaProduct_mul_matchingProduct
{A B : Type*} [Fintype A] [Fintype B]
[DecidableEq A] [DecidableEq B]
(M : Finset (A × B)) (R : ℕ) (row : A → ℕ) (col : B → ℕ)
(htotal : Finset.univ.sum row = Finset.univ.sum col)
(hm : 0 < Finset.univ.sum row)
(hM : IsBipartiteMatching M) :
residualCappedEvenFixedFSum M R row col htotal ≤
(∏ a : A, ∏ b : B,
(1 + residualLambda M R row col a b)) *
(∏ e ∈ (Finset.univ : Finset (A × B)) \ M,
(1 + residualQ M R row col e.1 e.2)) := by
calc
residualCappedEvenFixedFSum M R row col htotal ≤
(∏ a : A, ∏ b : B,
(1 + residualLambda M R row col a b)) *
(∑ F ∈ bipartiteEvenEdgeSets A B,
edgeWeightOutsideENN (residualQ M R row col) M F) :=
residualCappedEvenFixedFSum_le_lambdaProduct_mul_evenWeightSum
M R row col htotal hm
_ ≤
(∏ a : A, ∏ b : B,
(1 + residualLambda M R row col a b)) *
(∏ e ∈ (Finset.univ : Finset (A × B)) \ M,
(1 + residualQ M R row col e.1 e.2)) :=
mul_le_mul_right
(weighted_evenSubgraph_ennreal_matching_product
(residualQ M R row col) M hM)
_

#print axioms sdiff_matching_injective_on_bipartiteEvenEdgeSets
#print axioms weighted_evenSubgraph_ennreal_matching_product
#print axioms residualCappedEvenFixedFSum_le_lambdaProduct_mul_matchingProduct

end

end Erdos625
66 changes: 66 additions & 0 deletions 625/formalization/MATCHING_RESTRICTION_PRODUCT_AUDIT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Matching-restriction product formalization audit

**Date:** 25 July 2026
**Target module:** `Erdos625/Section9MatchingRestrictionProduct.lean`
**Status:** focused finite Lean checkpoint; not Lemma 9.1 or `Erdos625Statement`.

## Exact claims

The module proves three finite statements.

1. If `M` is a bipartite matching, the map

```text
F ↦ F \ M
```

is injective on the finite family of bipartite even edge sets.

2. For arbitrary `ENNReal` cell weights,

```text
sum_{F even} product_{e in F\M} q_e
<= product_{e notin M} (1 + q_e).
```

3. The existing capped fixed-`F` aggregation is bounded by the common local
`residualLambda` product times this direct outside-matching product.

## Proof dependencies

The proof reuses only accepted finite modules:

- `BipartiteEdgeMatrix.lean` for the injective zero-one incidence encoding and
the equivalence between even edge sets and zero row/column sums over
`ZMod 2`;
- `EvenMatchingRestriction.lean` for uniqueness of an even matrix after its
values away from a row matching are fixed;
- `Section9ActualResidualENNRealPolymerBridge.lean` for the definition of
`edgeWeightOutsideENN` and the finite even-edge family;
- `Section9FixedFEvenAggregation.lean` for the previously checked fixed-`F`
threshold expansion and aggregation.

No cycle decomposition, walk kernel, marked-cycle encoder, asymptotic estimate,
probability conditioning, or external theorem is used.

## Trust checks

The source contains no `sorry`, `admit`, project-defined `axiom`, `constant`, or
`unsafe` declaration. Each public theorem is followed by `#print axioms`.
The focused workflow compiles the module with `-DwarningAsError=true`; the full
repository Lean workflow also builds every formalization module with `--wfail`.

## Deliberate boundary

This checkpoint does not prove the manuscript's complete large-residual
attachment estimate. Remaining bridges include:

1. the precise tagged-law identification of the actual attachment numerator;
2. a finite bound on the direct product in terms of the total `residualQ` mass;
3. the deterministic estimate
`sum residualQ = O(U^2 + U^4/m_0)` under the large-residual hypotheses;
4. the asymptotic specialization to `exp(O((log n)^2))`;
5. the global Section 8 skeleton sum and Proposition 9.2.

The module is therefore a genuine simplification of the finite Section IX
algebra, but not a completed proof of the theorem.
Loading