Sign Insert Some mul filter contracted of lt
WickContraction.signInsertSome_mul_filter_contracted_of_lt
Plain-language statement
The following two signs are equal for i.succAbove k < i. The sign signInsertSome φ φs φsΛ i k which is constructed as follows: 1a. For each contracted pair {a1, a2} in φsΛ with a1 < a2 the sign 𝓢(φ, φₐ₂) if a₁ < i ≤ a₂ and a₁ < k. 1b. For each contracted pair {a1, a2} in φsΛ with a1 < a2 the sign 𝓢(φⱼ, φₐ₂) if a₁ < k < a₂ and `...
Exact Lean statement
lemma signInsertSome_mul_filter_contracted_of_lt (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp)
(φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : φsΛ.uncontracted)
(hk : i.succAbove k < i) (hg : GradingCompliant φs φsΛ ∧ (𝓕 |>ₛ φ) = 𝓕 |>ₛ φs[k.1]) :
signInsertSome φ φs φsΛ i k *
𝓢(𝓕 |>ₛ φ, 𝓕 |>ₛ ⟨φs.get, φsΛ.uncontracted.filter (fun x => x ≤ ↑k)⟩)
= 𝓢(𝓕 |>ₛ φ, 𝓕 |>ₛ ⟨φs.get, Finset.univ.filter (fun x => i.succAbove x < i)⟩)Formal artifact
Lean source
lemma signInsertSome_mul_filter_contracted_of_lt (φ : 𝓕.FieldOp) (φs : List 𝓕.FieldOp) (φsΛ : WickContraction φs.length) (i : Fin φs.length.succ) (k : φsΛ.uncontracted) (hk : i.succAbove k < i) (hg : GradingCompliant φs φsΛ ∧ (𝓕 |>ₛ φ) = 𝓕 |>ₛ φs[k.1]) : signInsertSome φ φs φsΛ i k * 𝓢(𝓕 |>ₛ φ, 𝓕 |>ₛ ⟨φs.get, φsΛ.uncontracted.filter (fun x => x ≤ ↑k)⟩) = 𝓢(𝓕 |>ₛ φ, 𝓕 |>ₛ ⟨φs.get, Finset.univ.filter (fun x => i.succAbove x < i)⟩) := by rw [signInsertSome, signInsertSomeProd_eq_finset (hφj := hg.2) (hg := hg.1), signInsertSomeCoef_eq_finset (hφj := hg.2), if_neg (by omega), ← map_mul, ← map_mul] congr 1 rw [mul_eq_iff_eq_mul, ofFinset_union_disjoint] swap · /- Disjointness needed for `ofFinset_union_disjoint`. -/ rw [Finset.disjoint_filter] intro j _ h simp only [Nat.succ_eq_add_one, not_lt, not_and, not_forall, not_or, not_le] intro h1 use h1 omega rw [ofFinset_union, ← mul_eq_one_iff, ofFinset_union] simp only [Nat.succ_eq_add_one, not_lt] apply stat_ofFinset_eq_one_of_gradingCompliant _ _ _ hg.1 · /- The `c.getDual? i = none` case for `stat_ofFinset_eq_one_of_gradingCompliant`. -/ intro j hn simp only [uncontracted, Finset.mem_sdiff, Finset.mem_union, Finset.mem_filter, Finset.mem_univ, hn, Option.isSome_none, Bool.false_eq_true, IsEmpty.forall_iff, or_self, and_true, or_false, true_and, and_self, Finset.mem_inter, not_and, not_lt, Classical.not_imp, not_le, and_imp] intro h rcases h with h | h · simp only [h, or_true, isEmpty_Prop, not_le, IsEmpty.forall_iff, and_self] · simp only [h, true_and] refine And.intro ?_ (And.intro ?_ h.2) · by_contra hkj simp only [not_lt] at hkj have h2 := h.2 hkj apply Fin.ne_succAbove i j have hij : i.succAbove j ≤ i.succAbove k.1 := Fin.succAbove_le_succAbove_iff.mpr hkj omega · have h1' := h.1 rcases h1' with h1' | h1' · have hl := h.2 h1' have hij : i.succAbove j ≤ i.succAbove k.1 := Fin.succAbove_le_succAbove_iff.mpr h1' by_contra hn apply Fin.ne_succAbove i j omega · exact h1' · /- The `(c.getDual? i).isSome` case for `stat_ofFinset_eq_one_of_gradingCompliant`. -/ intro j hj have hn : ¬ φsΛ.getDual? j = none := Option.isSome_iff_ne_none.mp hj simp only [uncontracted, Finset.mem_sdiff, Finset.mem_union, Finset.mem_filter, Finset.mem_univ, hn, hj, forall_true_left, false_or, true_and, and_false, false_and, Finset.mem_inter, not_false_eq_true, and_true, not_and, not_lt, getDual?_getDual?_get_get, reduceCtorEq, Option.isSome_some, Option.get_some, forall_const, and_imp] intro h1 h2 have hijsucc' : i.succAbove ((φsΛ.getDual? j).get hj) ≠ i := Fin.succAbove_ne i _ have hkneqj : ↑k ≠ j := by by_contra hkj have hk := k.prop simp only [uncontracted, Finset.mem_filter, Finset.mem_univ, true_and] at hk simp_all have hkneqgetdual : k.1 ≠ (φsΛ.getDual? j).get hj := by by_contra hkj have hk := k.prop simp only [uncontracted, Finset.mem_filter, Finset.mem_univ, true_and] at hk simp_all by_cases hik : ↑k < j · have hn : ¬ j < ↑k := by omega simp only [hik, true_and, hn, false_and, or_false, and_imp, and_true] at h1 h2 ⊢ have hir : i.succAbove j < i := by rcases h1 with h1 | h1 · simp [h1] · simp [h1] simp only [hir, true_and, or_true, forall_const] at h1 h2 have hnkdual : ¬ ↑k < (φsΛ.getDual? j).get hj := by by_contra hn have h2 := h2 hn apply Fin.ne_succAbove i j omega simp only [hnkdual, IsEmpty.forall_iff, false_and, false_or, and_imp] at h2 ⊢ have hnkdual : (φsΛ.getDual? j).get hj < ↑k := by omega have hi : i.succAbove ((φsΛ.getDual? j).get hj) < i.succAbove k := by rw [@Fin.succAbove_lt_succAbove_iff] omega omega · have ht : j < ↑k := by omega have ht' : i.succAbove j < i.succAbove k := by rw [@Fin.succAbove_lt_succAbove_iff] omega simp only [hik, false_and, ht, true_and, false_or, and_false, or_false, and_imp] at h1 h2 ⊢ by_cases hik : i.succAbove j < i · simp_all only [Fin.getElem_fin, ne_eq, not_lt, true_and, or_true] have hn : ¬ i ≤ i.succAbove j := by omega simp_all only [and_false, or_false, imp_false, not_lt, Nat.succ_eq_add_one, not_le] apply And.intro · apply Or.inr omega · intro h1 h2 h3 omega · simp_all only [Fin.getElem_fin, ne_eq, not_lt, false_and, false_or, or_false, and_self, or_true, imp_self] omega- Project
- Physlib
- License
- Apache-2.0
- Commit
- dd43e9e65791
- Source
- Physlib/QFT/PerturbationTheory/WickContraction/Sign/InsertSome.lean:468-567
Reuse this declaration
Bring the exact result into your workflow
The import identifies the source module. Your project still needs the pinned package dependency shown on this page.
What this badge means
This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.
Continue in this project
Related declarations
Adiabatic relation log
adiabatic_relation_log
Plain-language statement
Adiabatic relation in logarithmic form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then c * log (Ua/Ub) + log (Va/Vb) = 0.
Source project: Physlib
Person-level attribution pending.
Adiabatic relation Ua Ub Va Vb
adiabatic_relation_UaUbVaVb
Plain-language statement
Adiabatic relation in product form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then (Ua/Ub)^c * (Va/Vb) = 1.
Source project: Physlib
Person-level attribution pending.
Deriv Within mean Energy Beta eq neg variance
CanonicalEnsemble.derivWithin_meanEnergy_Beta_eq_neg_variance
Plain-language statement
(∂U/∂β) = -Var(E) for finite systems.
Source project: Physlib
Person-level attribution pending.