Documentation

LeanPool.Redhill.Common.SubsumCondition

Subsum conditions #

def SSC {n : } (a : Fin n) :

The subsum condition: any subset of the tuple summing to 0 is either empty or the whole tuple.

Equations
Instances For
    def IsSubsumBlock {n : } (a : Fin n) (s : Finset (Fin n)) :

    A subsum block for a is an index set that must be constant in any sign weighting of the tuple's elements that leads to a zero sum.

    Equations
    Instances For
      def StrongSSC {n : } (a : Fin n) :

      The strong subsum condition, defined as all Fin n being a subsum block.

      Equations
      Instances For
        theorem StrongSSC.SSC {n : } {a : Fin n} (h : StrongSSC a) :
        theorem SSC.ne_zero {n : } {a : Fin n} (ha : SSC a) (hn : 2 n) {i : Fin n} :
        a i 0
        theorem StrongSSC.ne_zero {n : } {a : Fin n} (ha : StrongSSC a) (hn : 2 n) {i : Fin n} :
        a i 0
        theorem StrongSSC.perm {n : } {a : Fin n} (h : StrongSSC a) (e : Equiv.Perm (Fin n)) :
        StrongSSC (a e)
        theorem strongSSC_perm_iff {n : } {a : Fin n} (e : Equiv.Perm (Fin n)) :
        theorem StrongSSC.injective {n : } {a : Fin n} (h : StrongSSC a) :
        theorem Finset.natAbs_prod {ι : Type u_1} {s : Finset ι} {f : ι} :
        (∏ is, f i).natAbs = is, (f i).natAbs

        Upstreamable to mathlib! [Mathlib.Algebra.BigOperators.Group.Finset.Basic]

        theorem StrongSSC.one_lt_natAbs_prod {n : } {a : Fin n} (ha : StrongSSC a) (hn : 3 n) :
        1 < (∏ i : Fin n, a i).natAbs
        def complRank {n k : } (s : Finset (Fin n)) (hk : k = n - s.card) (i : Fin k) :
        Fin n

        The order-preserving bijection from Fin k to sᶜ, where k = n - #s.

        Equations
        Instances For
          theorem complRank_01 {n : } :
          complRank {0, 1} = fun (x : Fin n) => x.addNat 2
          def tupReduce {n k : } (a : Fin n) (s : Finset (Fin n)) (hk : k = n - s.card) :
          Fin (k + 1)

          tupReduce a s hk is the tuple with ∑ i ∈ s, a i at the last index and the remaining elements of a appended in order. hk : k = n - #s mitigates definitional equality problems.

          Equations
          Instances For
            theorem injective_complRank {n k : } {s : Finset (Fin n)} {hk : k = n - s.card} :
            theorem image_complRank_univ {n k : } {s : Finset (Fin n)} {hk : k = n - s.card} :
            theorem IsSubsumBlock.empty {n : } {a : Fin n} :
            theorem IsSubsumBlock.singleton {n : } {a : Fin n} {i : Fin n} :
            theorem IsSubsumBlock.subset {n : } {a : Fin n} {s t : Finset (Fin n)} (hs : IsSubsumBlock a s) (ht : t s) :
            theorem IsSubsumBlock.union {n : } {a : Fin n} {s t : Finset (Fin n)} (hs : IsSubsumBlock a s) (ht : IsSubsumBlock a t) (hd : ¬Disjoint s t) :
            theorem IsSubsumBlock.of_sum_natAbs_lt {n k : } {a : Fin n} (f : Fin k Fin n) (hf : ∀ (b : Fin kSignType), (¬∃ (c : SignType), ∀ (i : Fin k), b i = c) → i(Finset.map f Finset.univ), (a i).natAbs < (∑ i : Fin k, (b i) * a (f i)).natAbs) :
            theorem IsSubsumBlock.pair_of_sum_natAbs_lt {n : } {a : Fin n} {i j : Fin n} (hi : k{i, j}, (a k).natAbs < (a i).natAbs) (hj : k{i, j}, (a k).natAbs < (a j).natAbs) (hprod : a i * a j 0) :

            If there are two elements of opposite signs, each dominating the remaining n - 2 elements (in the sense of violating the triangle inequality), the two elements form a subsum block.

            theorem IsSubsumBlock.strongSSC_tupReduce {n k : } {a : Fin n} {s : Finset (Fin n)} (p : IsSubsumBlock a s) (hk : k = n - s.card) (h : StrongSSC (tupReduce a s hk)) :

            Reduce a subsum block to a single element when proving the strong subsum condition.