refactor: Lint
This commit is contained in:
parent
a329661c24
commit
e5c85ac109
11 changed files with 179 additions and 182 deletions
|
@ -119,7 +119,7 @@ lemma insertIdx_eraseIdx_fin {I : Type} :
|
|||
exact insertIdx_eraseIdx_fin as ⟨n, Nat.lt_of_succ_lt_succ h⟩
|
||||
|
||||
lemma insertIdx_length_fst_append {I : Type} (φ : I) : (φs φs' : List I) →
|
||||
List.insertIdx φs.length φ (φs ++ φs') = (φs ++ φ :: φs')
|
||||
List.insertIdx φs.length φ (φs ++ φs') = (φs ++ φ :: φs')
|
||||
| [], φs' => by simp
|
||||
| φ' :: φs, φs' => by
|
||||
simp
|
||||
|
|
|
@ -92,14 +92,15 @@ lemma insertionSortMin_lt_mem_insertionSortDropMinPos_of_lt {α : Type} (r : α
|
|||
exact Fin.succAbove_ne (insertionSortMinPosFin r a l) i
|
||||
|
||||
lemma insertionSort_insertionSort {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (l1 : List α):
|
||||
[IsTotal α r] [IsTrans α r] (l1 : List α) :
|
||||
List.insertionSort r (List.insertionSort r l1) = List.insertionSort r l1 := by
|
||||
apply List.Sorted.insertionSort_eq
|
||||
exact List.sorted_insertionSort r l1
|
||||
|
||||
lemma orderedInsert_commute {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a b : α) (hr : ¬ r a b) : (l : List α) →
|
||||
List.orderedInsert r a (List.orderedInsert r b l) = List.orderedInsert r b (List.orderedInsert r a l)
|
||||
List.orderedInsert r a (List.orderedInsert r b l) =
|
||||
List.orderedInsert r b (List.orderedInsert r a l)
|
||||
| [] => by
|
||||
have hrb : r b a := by
|
||||
have ht := IsTotal.total (r := r) a b
|
||||
|
@ -125,11 +126,11 @@ lemma orderedInsert_commute {α : Type} (r : α → α → Prop) [DecidableRel r
|
|||
exact orderedInsert_commute r a b hr l
|
||||
|
||||
lemma insertionSort_orderedInsert_append {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l1 l2 : List α) →
|
||||
List.insertionSort r (List.orderedInsert r a l1 ++ l2) = List.insertionSort r (a :: l1 ++ l2)
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l1 l2 : List α) →
|
||||
List.insertionSort r (List.orderedInsert r a l1 ++ l2) = List.insertionSort r (a :: l1 ++ l2)
|
||||
| [], l2 => by
|
||||
simp
|
||||
| b :: l1, l2 => by
|
||||
| b :: l1, l2 => by
|
||||
conv_lhs => simp
|
||||
by_cases h : r a b
|
||||
· simp [h]
|
||||
|
@ -138,25 +139,25 @@ lemma insertionSort_orderedInsert_append {α : Type} (r : α → α → Prop) [D
|
|||
simp
|
||||
rw [orderedInsert_commute r a b h]
|
||||
|
||||
|
||||
lemma insertionSort_insertionSort_append {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] : (l1 l2 : List α) →
|
||||
[IsTotal α r] [IsTrans α r] : (l1 l2 : List α) →
|
||||
List.insertionSort r (List.insertionSort r l1 ++ l2) = List.insertionSort r (l1 ++ l2)
|
||||
| [], l2 => by
|
||||
simp
|
||||
| a :: l1, l2 => by
|
||||
| a :: l1, l2 => by
|
||||
conv_lhs => simp
|
||||
rw [insertionSort_orderedInsert_append]
|
||||
simp
|
||||
rw [insertionSort_insertionSort_append r l1 l2]
|
||||
|
||||
lemma insertionSort_append_insertionSort_append {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] : (l1 l2 l3 : List α) →
|
||||
List.insertionSort r (l1 ++ List.insertionSort r l2 ++ l3) = List.insertionSort r (l1 ++ l2 ++ l3)
|
||||
[IsTotal α r] [IsTrans α r] : (l1 l2 l3 : List α) →
|
||||
List.insertionSort r (l1 ++ List.insertionSort r l2 ++ l3) =
|
||||
List.insertionSort r (l1 ++ l2 ++ l3)
|
||||
| [], l2, l3 => by
|
||||
simp
|
||||
exact insertionSort_insertionSort_append r l2 l3
|
||||
| a :: l1, l2, l3 => by
|
||||
| a :: l1, l2, l3 => by
|
||||
simp only [List.insertionSort, List.append_eq]
|
||||
rw [insertionSort_append_insertionSort_append r l1 l2 l3]
|
||||
|
||||
|
@ -168,7 +169,7 @@ lemma orderedInsert_length {α : Type} (r : α → α → Prop) [DecidableRel r]
|
|||
|
||||
lemma takeWhile_orderedInsert {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r]
|
||||
(a b : α) (hr : ¬ r a b) : (l : List α) →
|
||||
(a b : α) (hr : ¬ r a b) : (l : List α) →
|
||||
(List.takeWhile (fun c => !decide (r a c)) (List.orderedInsert r b l)).length =
|
||||
(List.takeWhile (fun c => !decide (r a c)) l).length + 1
|
||||
| [] => by
|
||||
|
@ -193,7 +194,7 @@ lemma takeWhile_orderedInsert {α : Type} (r : α → α → Prop) [DecidableRel
|
|||
|
||||
lemma takeWhile_orderedInsert' {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r]
|
||||
(a b : α) (hr : ¬ r a b) : (l : List α) →
|
||||
(a b : α) (hr : ¬ r a b) : (l : List α) →
|
||||
(List.takeWhile (fun c => !decide (r b c)) (List.orderedInsert r a l)).length =
|
||||
(List.takeWhile (fun c => !decide (r b c)) l).length
|
||||
| [] => by
|
||||
|
@ -219,11 +220,11 @@ lemma takeWhile_orderedInsert' {α : Type} (r : α → α → Prop) [DecidableRe
|
|||
· simp [hac, h]
|
||||
exact takeWhile_orderedInsert' r a b hr l
|
||||
|
||||
lemma insertionSortEquiv_commute {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a b : α) (hr : ¬ r a b) (n : ℕ) : (l : List α) →
|
||||
lemma insertionSortEquiv_commute {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a b : α) (hr : ¬ r a b) (n : ℕ) : (l : List α) →
|
||||
(hn : n + 2 < (a :: b :: l).length) →
|
||||
insertionSortEquiv r (a :: b :: l) ⟨n + 2, hn⟩ = (finCongr (by simp))
|
||||
(insertionSortEquiv r (b :: a :: l) ⟨n + 2, hn⟩):= by
|
||||
insertionSortEquiv r (a :: b :: l) ⟨n + 2, hn⟩ = (finCongr (by simp))
|
||||
(insertionSortEquiv r (b :: a :: l) ⟨n + 2, hn⟩) := by
|
||||
have hrba : r b a:= by
|
||||
have ht := IsTotal.total (r := r) a b
|
||||
simp_all
|
||||
|
@ -245,12 +246,21 @@ lemma insertionSortEquiv_commute {α : Type} (r : α → α → Prop) [Decidabl
|
|||
conv_rhs => erw [orderedInsertEquiv_fin_succ]
|
||||
ext
|
||||
simp
|
||||
let a1 : Fin ((List.orderedInsert r b (List.insertionSort r l)).length + 1) := ⟨↑(orderedInsertPos r (List.orderedInsert r b (List.insertionSort r l)) a), orderedInsertPos_lt_length r (List.orderedInsert r b (List.insertionSort r l)) a⟩
|
||||
let b1 : Fin ((List.insertionSort r l).length + 1) := ⟨↑(orderedInsertPos r (List.insertionSort r l) b), orderedInsertPos_lt_length r (List.insertionSort r l) b⟩
|
||||
let a2 : Fin ((List.insertionSort r l).length + 1) := ⟨↑(orderedInsertPos r (List.insertionSort r l) a), orderedInsertPos_lt_length r (List.insertionSort r l) a⟩
|
||||
let b2 : Fin ((List.orderedInsert r a (List.insertionSort r l)).length + 1) := ⟨↑(orderedInsertPos r (List.orderedInsert r a (List.insertionSort r l)) b), orderedInsertPos_lt_length r (List.orderedInsert r a (List.insertionSort r l)) b⟩
|
||||
let a1 : Fin ((List.orderedInsert r b (List.insertionSort r l)).length + 1) :=
|
||||
⟨↑(orderedInsertPos r (List.orderedInsert r b (List.insertionSort r l)) a),
|
||||
orderedInsertPos_lt_length r (List.orderedInsert r b (List.insertionSort r l)) a⟩
|
||||
let b1 : Fin ((List.insertionSort r l).length + 1) :=
|
||||
⟨↑(orderedInsertPos r (List.insertionSort r l) b),
|
||||
orderedInsertPos_lt_length r (List.insertionSort r l) b⟩
|
||||
let a2 : Fin ((List.insertionSort r l).length + 1) :=
|
||||
⟨↑(orderedInsertPos r (List.insertionSort r l) a),
|
||||
orderedInsertPos_lt_length r (List.insertionSort r l) a⟩
|
||||
let b2 : Fin ((List.orderedInsert r a (List.insertionSort r l)).length + 1) :=
|
||||
⟨↑(orderedInsertPos r (List.orderedInsert r a (List.insertionSort r l)) b),
|
||||
orderedInsertPos_lt_length r (List.orderedInsert r a (List.insertionSort r l)) b⟩
|
||||
have ht : (List.takeWhile (fun c => !decide (r b c)) (List.insertionSort r l))
|
||||
= (List.takeWhile (fun c => !decide (r b c)) ((List.takeWhile (fun c => !decide (r a c)) (List.insertionSort r l)))) := by
|
||||
= (List.takeWhile (fun c => !decide (r b c))
|
||||
((List.takeWhile (fun c => !decide (r a c)) (List.insertionSort r l)))) := by
|
||||
rw [List.takeWhile_takeWhile]
|
||||
simp
|
||||
congr
|
||||
|
@ -300,13 +310,14 @@ lemma insertionSortEquiv_commute {α : Type} (r : α → α → Prop) [Decidabl
|
|||
· simp [ha]
|
||||
· simp [ha]
|
||||
rw [hbs1, has2, hb, ha2]
|
||||
have hnat (a2 b2 n : ℕ) (h : b2 ≤ a2) : (if (if ↑n < ↑b2 then ↑n else ↑n + 1) < ↑a2 + 1 then if ↑n < ↑b2 then ↑n else ↑n + 1
|
||||
have hnat (a2 b2 n : ℕ) (h : b2 ≤ a2) : (if (if ↑n < ↑b2 then ↑n else ↑n + 1) < ↑a2 + 1 then
|
||||
if ↑n < ↑b2 then ↑n else ↑n + 1
|
||||
else (if ↑n < ↑b2 then ↑n else ↑n + 1) + 1) =
|
||||
if (if ↑n < ↑a2 then ↑n else ↑n + 1) < ↑b2 then if ↑n < ↑a2 then ↑n else ↑n + 1
|
||||
else (if ↑n < ↑a2 then ↑n else ↑n + 1) + 1 := by
|
||||
by_cases hnb2 : n < b2
|
||||
· simp [hnb2]
|
||||
have h1 : n < a2 + 1 := by omega
|
||||
have h1 : n < a2 + 1 := by omega
|
||||
have h2 : n < a2 := by omega
|
||||
simp [h1, h2, hnb2]
|
||||
· simp [hnb2]
|
||||
|
@ -319,23 +330,22 @@ lemma insertionSortEquiv_commute {α : Type} (r : α → α → Prop) [Decidabl
|
|||
rw [← hb]
|
||||
exact ha1
|
||||
|
||||
|
||||
|
||||
lemma insertionSortEquiv_orderedInsert_append {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a a2 : α) : (l1 l2 : List α) →
|
||||
(insertionSortEquiv r (List.orderedInsert r a l1 ++ a2 :: l2) ⟨l1.length + 1, by
|
||||
simp⟩)
|
||||
= (finCongr (by simp; omega))
|
||||
((insertionSortEquiv r ( a :: l1 ++ a2 :: l2)) ⟨l1.length + 1, by simp⟩)
|
||||
((insertionSortEquiv r (a :: l1 ++ a2 :: l2)) ⟨l1.length + 1, by simp⟩)
|
||||
| [], l2 => by
|
||||
simp
|
||||
| b :: l1, l2 => by
|
||||
| b :: l1, l2 => by
|
||||
by_cases h : r a b
|
||||
· have h1 : (List.orderedInsert r a (b :: l1) ++ a2 :: l2) = (a :: b :: l1 ++ a2 :: l2) := by
|
||||
simp [h]
|
||||
rw [insertionSortEquiv_congr _ _ h1]
|
||||
simp
|
||||
· have h1 : (List.orderedInsert r a (b :: l1) ++ a2 :: l2) = (b :: List.orderedInsert r a (l1) ++ a2 :: l2) := by
|
||||
· have h1 : (List.orderedInsert r a (b :: l1) ++ a2 :: l2) =
|
||||
(b :: List.orderedInsert r a (l1) ++ a2 :: l2) := by
|
||||
simp [h]
|
||||
rw [insertionSortEquiv_congr _ _ h1]
|
||||
simp
|
||||
|
@ -346,36 +356,34 @@ lemma insertionSortEquiv_orderedInsert_append {α : Type} (r : α → α → Pro
|
|||
exact insertionSort_orderedInsert_append r a l1 (a2 :: l2)
|
||||
rw [orderedInsertEquiv_congr _ _ _ hl]
|
||||
simp
|
||||
change Fin.cast _ ((insertionSortEquiv r (b :: a :: (l1 ++ a2 :: l2))) ⟨l1.length + 2, by simp⟩) = _
|
||||
change Fin.cast _
|
||||
((insertionSortEquiv r (b :: a :: (l1 ++ a2 :: l2))) ⟨l1.length + 2, by simp⟩) = _
|
||||
have hl : l1.length + 1 +1 = l1.length + 2 := by omega
|
||||
simp [hl]
|
||||
conv_rhs =>
|
||||
erw [insertionSortEquiv_commute _ _ _ h _ _]
|
||||
simp
|
||||
|
||||
|
||||
|
||||
|
||||
lemma insertionSortEquiv_insertionSort_append {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l1 l2 : List α) →
|
||||
(insertionSortEquiv r (List.insertionSort r l1 ++ a :: l2) ⟨l1.length, by simp⟩)
|
||||
= finCongr (by simp) (insertionSortEquiv r (l1 ++ a :: l2) ⟨l1.length, by simp⟩)
|
||||
| [], l2 => by
|
||||
simp
|
||||
| b :: l1, l2 => by
|
||||
| b :: l1, l2 => by
|
||||
simp
|
||||
have hl := insertionSortEquiv_orderedInsert_append r b a (List.insertionSort r l1) l2
|
||||
simp at hl
|
||||
rw [hl]
|
||||
have ih := insertionSortEquiv_insertionSort_append r a l1 l2
|
||||
have ih := insertionSortEquiv_insertionSort_append r a l1 l2
|
||||
simp [insertionSortEquiv]
|
||||
rw [ih]
|
||||
have hl : (List.insertionSort r (List.insertionSort r l1 ++ a :: l2)) = (List.insertionSort r (l1 ++ a :: l2)) := by
|
||||
have hl : (List.insertionSort r (List.insertionSort r l1 ++ a :: l2)) =
|
||||
(List.insertionSort r (l1 ++ a :: l2)) := by
|
||||
exact insertionSort_insertionSort_append r l1 (a :: l2)
|
||||
rw [orderedInsertEquiv_congr _ _ _ hl]
|
||||
simp
|
||||
|
||||
|
||||
/-!
|
||||
|
||||
## Insertion sort with equal fields
|
||||
|
@ -389,7 +397,7 @@ lemma orderedInsert_filter_of_pos {α : Type} (r : α → α → Prop) [Decidabl
|
|||
| [], hl => by
|
||||
simp
|
||||
exact h
|
||||
| b :: l, hl => by
|
||||
| b :: l, hl => by
|
||||
simp
|
||||
by_cases hpb : p b <;> by_cases hab : r a b
|
||||
· simp [hpb, hab]
|
||||
|
@ -405,7 +413,8 @@ lemma orderedInsert_filter_of_pos {α : Type} (r : α → α → Prop) [Decidabl
|
|||
rw [List.filter_cons_of_pos (by simp [h]),
|
||||
List.filter_cons_of_neg (by simp [hpb])]
|
||||
rw [List.orderedInsert_eq_take_drop]
|
||||
have hl : List.takeWhile (fun b => decide ¬r a b) (List.filter (fun b => decide (p b)) l) = [] := by
|
||||
have hl : List.takeWhile (fun b => decide ¬r a b)
|
||||
(List.filter (fun b => decide (p b)) l) = [] := by
|
||||
rw [List.takeWhile_eq_nil_iff]
|
||||
intro c hc
|
||||
simp at hc
|
||||
|
@ -413,13 +422,15 @@ lemma orderedInsert_filter_of_pos {α : Type} (r : α → α → Prop) [Decidabl
|
|||
apply IsTrans.trans a b _ hab
|
||||
simp at hl
|
||||
apply hl.1
|
||||
have hlf : (List.filter (fun b => decide (p b)) l)[0] ∈ (List.filter (fun b => decide (p b)) l) := by
|
||||
have hlf : (List.filter (fun b => decide (p b)) l)[0] ∈
|
||||
(List.filter (fun b => decide (p b)) l) := by
|
||||
exact List.getElem_mem c
|
||||
simp [- List.getElem_mem] at hlf
|
||||
simp [- List.getElem_mem] at hlf
|
||||
exact hlf.1
|
||||
rw [hl]
|
||||
simp
|
||||
conv_lhs => rw [← List.takeWhile_append_dropWhile (fun b => decide ¬r a b) (List.filter (fun b => decide (p b)) l )]
|
||||
conv_lhs => rw [← List.takeWhile_append_dropWhile (fun b => decide ¬r a b)
|
||||
(List.filter (fun b => decide (p b)) l)]
|
||||
rw [hl]
|
||||
simp
|
||||
· simp [hab]
|
||||
|
@ -439,10 +450,8 @@ lemma orderedInsert_filter_of_neg {α : Type} (r : α → α → Prop) [Decidabl
|
|||
exact List.takeWhile_append_dropWhile (fun b => !decide (r a b)) l
|
||||
simp [h]
|
||||
|
||||
|
||||
|
||||
lemma insertionSort_filter {α : Type} (r : α → α → Prop) [DecidableRel r] [IsTotal α r]
|
||||
[IsTrans α r] (p : α → Prop) [DecidablePred p] : (l : List α) →
|
||||
[IsTrans α r] (p : α → Prop) [DecidablePred p] : (l : List α) →
|
||||
List.insertionSort r (List.filter p l) =
|
||||
List.filter p (List.insertionSort r l)
|
||||
| [] => by simp
|
||||
|
@ -468,7 +477,7 @@ lemma takeWhile_sorted_eq_filter {α : Type} (r : α → α → Prop) [Decidable
|
|||
| [], _ => by simp
|
||||
| b :: l, hl => by
|
||||
simp at hl
|
||||
by_cases hb : ¬ r a b
|
||||
by_cases hb : ¬ r a b
|
||||
· simp [hb]
|
||||
simpa using takeWhile_sorted_eq_filter r a l hl.2
|
||||
· simp_all
|
||||
|
@ -477,12 +486,12 @@ lemma takeWhile_sorted_eq_filter {α : Type} (r : α → α → Prop) [Decidable
|
|||
exact hl.1 c hc
|
||||
|
||||
lemma dropWhile_sorted_eq_filter {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l : List α) → (hl : l.Sorted r) →
|
||||
List.dropWhile (fun c => ¬ r a c) l = List.filter (fun c => r a c) l
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l : List α) → (hl : l.Sorted r) →
|
||||
List.dropWhile (fun c => ¬ r a c) l = List.filter (fun c => r a c) l
|
||||
| [], _ => by simp
|
||||
| b :: l, hl => by
|
||||
simp at hl
|
||||
by_cases hb : ¬ r a b
|
||||
by_cases hb : ¬ r a b
|
||||
· simp [hb]
|
||||
simpa using dropWhile_sorted_eq_filter r a l hl.2
|
||||
· simp_all
|
||||
|
@ -494,14 +503,14 @@ lemma dropWhile_sorted_eq_filter {α : Type} (r : α → α → Prop) [Decidable
|
|||
exact hl.1 c hc
|
||||
|
||||
lemma dropWhile_sorted_eq_filter_filter {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) :(l : List α) → (hl : l.Sorted r) →
|
||||
List.filter (fun c => r a c) l =
|
||||
[IsTotal α r] [IsTrans α r] (a : α) :(l : List α) → (hl : l.Sorted r) →
|
||||
List.filter (fun c => r a c) l =
|
||||
List.filter (fun c => r a c ∧ r c a) l ++ List.filter (fun c => r a c ∧ ¬ r c a) l
|
||||
| [], _ => by
|
||||
simp
|
||||
| b :: l, hl => by
|
||||
simp at hl
|
||||
by_cases hb : ¬ r a b
|
||||
by_cases hb : ¬ r a b
|
||||
· simp [hb]
|
||||
simpa using dropWhile_sorted_eq_filter_filter r a l hl.2
|
||||
· simp_all
|
||||
|
@ -529,25 +538,26 @@ lemma dropWhile_sorted_eq_filter_filter {α : Type} (r : α → α → Prop) [De
|
|||
exact hl.2
|
||||
|
||||
lemma filter_rel_eq_insertionSort {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) :(l : List α) →
|
||||
[IsTotal α r] [IsTrans α r] (a : α) : (l : List α) →
|
||||
List.filter (fun c => r a c ∧ r c a) (l.insertionSort r) =
|
||||
List.filter (fun c => r a c ∧ r c a) l
|
||||
| [] => by simp
|
||||
| b :: l => by
|
||||
simp only [ List.insertionSort]
|
||||
simp only [List.insertionSort]
|
||||
by_cases h : r a b ∧ r b a
|
||||
· have hl := orderedInsert_filter_of_pos r b (fun c => r a c ∧ r c a) h (List.insertionSort r l)
|
||||
(by exact List.sorted_insertionSort r l)
|
||||
· have hl := orderedInsert_filter_of_pos r b (fun c => r a c ∧ r c a) h
|
||||
(List.insertionSort r l) (by exact List.sorted_insertionSort r l)
|
||||
simp at hl ⊢
|
||||
rw [hl]
|
||||
rw [List.orderedInsert_eq_take_drop]
|
||||
have ht : List.takeWhile (fun b_1 => decide ¬r b b_1)
|
||||
(List.filter (fun b => decide (r a b) && decide (r b a)) (List.insertionSort r l)) = [] := by
|
||||
(List.filter (fun b => decide (r a b) && decide (r b a))
|
||||
(List.insertionSort r l)) = [] := by
|
||||
rw [List.takeWhile_eq_nil_iff]
|
||||
intro hl
|
||||
simp
|
||||
have hx := List.getElem_mem hl
|
||||
simp [- List.getElem_mem] at hx
|
||||
simp [- List.getElem_mem] at hx
|
||||
apply IsTrans.trans b a _ h.2
|
||||
simp_all
|
||||
rw [ht]
|
||||
|
@ -557,13 +567,14 @@ lemma filter_rel_eq_insertionSort {α : Type} (r : α → α → Prop) [Decidabl
|
|||
have ih := filter_rel_eq_insertionSort r a l
|
||||
simp at ih
|
||||
rw [← ih]
|
||||
have htd := List.takeWhile_append_dropWhile (fun b_1 => decide ¬r b b_1) (List.filter (fun b => decide (r a b) && decide (r b a)) (List.insertionSort r l))
|
||||
have htd := List.takeWhile_append_dropWhile (fun b_1 => decide ¬r b b_1)
|
||||
(List.filter (fun b => decide (r a b) && decide (r b a)) (List.insertionSort r l))
|
||||
simp [decide_not, - List.takeWhile_append_dropWhile] at htd
|
||||
conv_rhs => rw [← htd]
|
||||
simp [- List.takeWhile_append_dropWhile]
|
||||
intro hl
|
||||
have hx := List.getElem_mem hl
|
||||
simp [- List.getElem_mem] at hx
|
||||
simp [- List.getElem_mem] at hx
|
||||
apply IsTrans.trans b a _ h.2
|
||||
simp_all
|
||||
simp_all
|
||||
|
@ -575,9 +586,8 @@ lemma filter_rel_eq_insertionSort {α : Type} (r : α → α → Prop) [Decidabl
|
|||
simp_all
|
||||
simpa using h
|
||||
|
||||
|
||||
lemma insertionSort_of_eq_list {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) (l1 l l2 : List α)
|
||||
[IsTotal α r] [IsTrans α r] (a : α) (l1 l l2 : List α)
|
||||
(h : ∀ b ∈ l, r a b ∧ r b a) :
|
||||
List.insertionSort r (l1 ++ l ++ l2) =
|
||||
(List.takeWhile (fun c => ¬ r a c) ((l1 ++ l2).insertionSort r))
|
||||
|
@ -586,14 +596,14 @@ lemma insertionSort_of_eq_list {α : Type} (r : α → α → Prop) [DecidableRe
|
|||
++ (List.filter (fun c => r a c ∧ r c a) l2)
|
||||
++ (List.filter (fun c => r a c ∧ ¬ r c a) ((l1 ++ l2).insertionSort r))
|
||||
:= by
|
||||
have hl : List.insertionSort r (l1 ++ l ++ l2) =
|
||||
have hl : List.insertionSort r (l1 ++ l ++ l2) =
|
||||
List.takeWhile (fun c => ¬ r a c) ((l1 ++ l ++ l2).insertionSort r) ++
|
||||
List.dropWhile (fun c => ¬ r a c) ((l1 ++ l ++ l2).insertionSort r) := by
|
||||
exact (List.takeWhile_append_dropWhile (fun c => decide ¬r a c)
|
||||
(List.insertionSort r (l1 ++ l ++ l2))).symm
|
||||
have hlt : List.takeWhile (fun c => ¬ r a c) ((l1 ++ l ++ l2).insertionSort r)
|
||||
= List.takeWhile (fun c => ¬ r a c) ((l1 ++ l2).insertionSort r) := by
|
||||
rw [takeWhile_sorted_eq_filter, takeWhile_sorted_eq_filter ]
|
||||
rw [takeWhile_sorted_eq_filter, takeWhile_sorted_eq_filter]
|
||||
rw [← insertionSort_filter, ← insertionSort_filter]
|
||||
congr 1
|
||||
simp
|
||||
|
@ -601,7 +611,7 @@ lemma insertionSort_of_eq_list {α : Type} (r : α → α → Prop) [DecidableRe
|
|||
exact List.sorted_insertionSort r (l1 ++ l2)
|
||||
exact List.sorted_insertionSort r (l1 ++ l ++ l2)
|
||||
conv_lhs => rw [hl, hlt]
|
||||
simp only [decide_not, Bool.decide_and]
|
||||
simp only [decide_not, Bool.decide_and]
|
||||
simp
|
||||
have h1 := dropWhile_sorted_eq_filter r a (List.insertionSort r (l1 ++ (l ++ l2)))
|
||||
simp at h1
|
||||
|
@ -615,13 +625,13 @@ lemma insertionSort_of_eq_list {α : Type} (r : α → α → Prop) [DecidableRe
|
|||
have h1 := insertionSort_filter r (fun c => decide (r a c) && !decide (r c a)) (l1 ++ (l ++ l2))
|
||||
simp at h1
|
||||
rw [← h1]
|
||||
have h2 := insertionSort_filter r (fun c => decide (r a c) && !decide (r c a)) (l1 ++ l2)
|
||||
have h2 := insertionSort_filter r (fun c => decide (r a c) && !decide (r c a)) (l1 ++ l2)
|
||||
simp at h2
|
||||
rw [← h2]
|
||||
congr
|
||||
have hl : List.filter (fun b => decide (r a b) && !decide (r b a)) l = [] := by
|
||||
rw [@List.filter_eq_nil_iff]
|
||||
intro c hc
|
||||
intro c hc
|
||||
simp_all
|
||||
rw [hl]
|
||||
simp
|
||||
|
@ -629,7 +639,7 @@ lemma insertionSort_of_eq_list {α : Type} (r : α → α → Prop) [DecidableRe
|
|||
exact List.sorted_insertionSort r (l1 ++ (l ++ l2))
|
||||
|
||||
lemma insertionSort_of_takeWhile_filter {α : Type} (r : α → α → Prop) [DecidableRel r]
|
||||
[IsTotal α r] [IsTrans α r] (a : α) (l1 l2 : List α) :
|
||||
[IsTotal α r] [IsTrans α r] (a : α) (l1 l2 : List α) :
|
||||
List.insertionSort r (l1 ++ l2) =
|
||||
(List.takeWhile (fun c => ¬ r a c) ((l1 ++ l2).insertionSort r))
|
||||
++ (List.filter (fun c => r a c ∧ r c a) l1)
|
||||
|
@ -642,5 +652,4 @@ lemma insertionSort_of_takeWhile_filter {α : Type} (r : α → α → Prop) [De
|
|||
simp
|
||||
simp
|
||||
|
||||
|
||||
end HepLean.List
|
||||
|
|
|
@ -21,12 +21,12 @@ namespace CrAnAlgebra
|
|||
noncomputable section
|
||||
|
||||
/-- The submodule of `CrAnAlgebra` spanned by lists of field statistic `f`. -/
|
||||
def statisticSubmodule (f : FieldStatistic) : Submodule ℂ 𝓕.CrAnAlgebra :=
|
||||
def statisticSubmodule (f : FieldStatistic) : Submodule ℂ 𝓕.CrAnAlgebra :=
|
||||
Submodule.span ℂ {a | ∃ φs, a = ofCrAnList φs ∧ (𝓕 |>ₛ φs) = f}
|
||||
|
||||
lemma ofCrAnList_mem_statisticSubmodule_of (φs : List 𝓕.CrAnStates) (f : FieldStatistic)
|
||||
(h : (𝓕 |>ₛ φs) = f) :
|
||||
ofCrAnList φs ∈ statisticSubmodule f := by
|
||||
ofCrAnList φs ∈ statisticSubmodule f := by
|
||||
refine Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl, h⟩⟩
|
||||
|
||||
lemma ofCrAnList_bosonic_or_fermionic (φs : List 𝓕.CrAnStates) :
|
||||
|
@ -119,7 +119,7 @@ lemma fermionicProj_ofCrAnList (φs : List 𝓕.CrAnStates) :
|
|||
lemma fermionicProj_ofCrAnList_if_bosonic (φs : List 𝓕.CrAnStates) :
|
||||
fermionicProj (ofCrAnList φs) = if h : (𝓕 |>ₛ φs) = bosonic then
|
||||
0 else ⟨ofCrAnList φs, Submodule.mem_span.mpr fun _ a => a ⟨φs, ⟨rfl,
|
||||
by simpa using h ⟩⟩⟩ := by
|
||||
by simpa using h⟩⟩⟩ := by
|
||||
rw [fermionicProj_ofCrAnList]
|
||||
by_cases h1 : (𝓕 |>ₛ φs) = fermionic
|
||||
· simp [h1]
|
||||
|
@ -188,7 +188,6 @@ lemma bosonicProj_add_fermionicProj (a : 𝓕.CrAnAlgebra) :
|
|||
· simp [h]
|
||||
· simp [h]
|
||||
|
||||
|
||||
lemma coeAddMonoidHom_apply_eq_bosonic_plus_fermionic
|
||||
(a : DirectSum FieldStatistic (fun i => (statisticSubmodule (𝓕 := 𝓕) i))) :
|
||||
DirectSum.coeAddMonoidHom statisticSubmodule a = a.1 bosonic + a.1 fermionic := by
|
||||
|
@ -245,7 +244,7 @@ instance crAnAlgebraGrade : GradedAlgebra (A := 𝓕.CrAnAlgebra) statisticSubmo
|
|||
rfl
|
||||
mul_mem f1 f2 a1 a2 h1 h2 := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule f2) : Prop :=
|
||||
a1 * a2 ∈ statisticSubmodule (f1 + f2)
|
||||
a1 * a2 ∈ statisticSubmodule (f1 + f2)
|
||||
change p a2 h2
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -281,10 +280,10 @@ instance crAnAlgebraGrade : GradedAlgebra (A := 𝓕.CrAnAlgebra) statisticSubmo
|
|||
simp only [Algebra.mul_smul_comm, p]
|
||||
exact Submodule.smul_mem _ _ h1
|
||||
· exact h2
|
||||
decompose' a := DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProj a)
|
||||
+ DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProj a)
|
||||
decompose' a := DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) bosonic (bosonicProj a)
|
||||
+ DirectSum.of (fun i => (statisticSubmodule (𝓕 := 𝓕) i)) fermionic (fermionicProj a)
|
||||
left_inv a := by
|
||||
trans a.bosonicProj + fermionicProj a
|
||||
trans a.bosonicProj + fermionicProj a
|
||||
· simp
|
||||
· exact bosonicProj_add_fermionicProj a
|
||||
right_inv a := by
|
||||
|
|
|
@ -441,38 +441,38 @@ lemma superCommute_ofCrAnList_ofStateList_eq_sum (φs : List 𝓕.CrAnStates) :
|
|||
FieldStatistic.ofList_cons_eq_mul, mul_comm]
|
||||
|
||||
lemma summerCommute_jacobi_ofCrAnList (φs1 φs2 φs3 : List 𝓕.CrAnStates) :
|
||||
[ofCrAnList φs1, [ofCrAnList φs2, ofCrAnList φs3]ₛca]ₛca =
|
||||
𝓢(𝓕 |>ₛ φs1, 𝓕 |>ₛ φs3) •
|
||||
(- 𝓢(𝓕 |>ₛ φs2, 𝓕 |>ₛ φs3 ) • [ofCrAnList φs3, [ofCrAnList φs1, ofCrAnList φs2]ₛca]ₛca -
|
||||
𝓢(𝓕 |>ₛ φs1, 𝓕 |>ₛ φs2) • [ofCrAnList φs2, [ofCrAnList φs3, ofCrAnList φs1]ₛca]ₛca) := by
|
||||
repeat rw [superCommute_ofCrAnList_ofCrAnList]
|
||||
simp
|
||||
repeat rw [superCommute_ofCrAnList_ofCrAnList]
|
||||
simp only [instCommGroup.eq_1, ofList_append_eq_mul, List.append_assoc]
|
||||
by_cases h1 : (𝓕 |>ₛ φs1) = bosonic <;>
|
||||
by_cases h2 : (𝓕 |>ₛ φs2) = bosonic <;>
|
||||
by_cases h3 : (𝓕 |>ₛ φs3) = bosonic
|
||||
· simp [h1, h2, exchangeSign_bosonic, h3, mul_one, one_smul]
|
||||
abel
|
||||
· simp [h1, h2, exchangeSign_bosonic, bosonic_exchangeSign, mul_one, one_smul]
|
||||
abel
|
||||
· simp [h1, bosonic_exchangeSign, h3, exchangeSign_bosonic, mul_one, one_smul]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
[ofCrAnList φs1, [ofCrAnList φs2, ofCrAnList φs3]ₛca]ₛca =
|
||||
𝓢(𝓕 |>ₛ φs1, 𝓕 |>ₛ φs3) •
|
||||
(- 𝓢(𝓕 |>ₛ φs2, 𝓕 |>ₛ φs3) • [ofCrAnList φs3, [ofCrAnList φs1, ofCrAnList φs2]ₛca]ₛca -
|
||||
𝓢(𝓕 |>ₛ φs1, 𝓕 |>ₛ φs2) • [ofCrAnList φs2, [ofCrAnList φs3, ofCrAnList φs1]ₛca]ₛca) := by
|
||||
repeat rw [superCommute_ofCrAnList_ofCrAnList]
|
||||
simp
|
||||
repeat rw [superCommute_ofCrAnList_ofCrAnList]
|
||||
simp only [instCommGroup.eq_1, ofList_append_eq_mul, List.append_assoc]
|
||||
by_cases h1 : (𝓕 |>ₛ φs1) = bosonic <;>
|
||||
by_cases h2 : (𝓕 |>ₛ φs2) = bosonic <;>
|
||||
by_cases h3 : (𝓕 |>ₛ φs3) = bosonic
|
||||
· simp [h1, h2, exchangeSign_bosonic, h3, mul_one, one_smul]
|
||||
abel
|
||||
· simp [h1, h2, exchangeSign_bosonic, bosonic_exchangeSign, mul_one, one_smul]
|
||||
abel
|
||||
· simp [h1, bosonic_exchangeSign, h3, exchangeSign_bosonic, mul_one, one_smul]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
· simp at h1 h2 h3
|
||||
simp [h1, h2, h3]
|
||||
abel
|
||||
/-!
|
||||
|
||||
## Interaction with grading.
|
||||
|
@ -483,14 +483,14 @@ lemma superCommute_grade {a b : 𝓕.CrAnAlgebra} {f1 f2 : FieldStatistic}
|
|||
(ha : a ∈ statisticSubmodule f1) (hb : b ∈ statisticSubmodule f2) :
|
||||
[a, b]ₛca ∈ statisticSubmodule (f1 + f2) := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule f2) : Prop :=
|
||||
[a, a2]ₛca ∈ statisticSubmodule (f1 + f2)
|
||||
[a, a2]ₛca ∈ statisticSubmodule (f1 + f2)
|
||||
change p b hb
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
obtain ⟨φs, rfl, hφs⟩ := hx
|
||||
simp [p]
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule f1) : Prop :=
|
||||
[a2 , ofCrAnList φs]ₛca ∈ statisticSubmodule (f1 + f2)
|
||||
[a2, ofCrAnList φs]ₛca ∈ statisticSubmodule (f1 + f2)
|
||||
change p a ha
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -525,13 +525,13 @@ lemma superCommute_bosonic_bosonic {a b : 𝓕.CrAnAlgebra}
|
|||
(ha : a ∈ statisticSubmodule bosonic) (hb : b ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = a * b - b * a := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule bosonic) : Prop :=
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
change p b hb
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
obtain ⟨φs, rfl, hφs⟩ := hx
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule bosonic) : Prop :=
|
||||
[a2 , ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
[a2, ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
change p a ha
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -554,18 +554,17 @@ lemma superCommute_bosonic_bosonic {a b : 𝓕.CrAnAlgebra}
|
|||
simp_all [p, smul_sub]
|
||||
· exact hb
|
||||
|
||||
|
||||
lemma superCommute_bosonic_fermionic {a b : 𝓕.CrAnAlgebra}
|
||||
(ha : a ∈ statisticSubmodule bosonic) (hb : b ∈ statisticSubmodule fermionic) :
|
||||
[a, b]ₛca = a * b - b * a := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule fermionic) : Prop :=
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
change p b hb
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
obtain ⟨φs, rfl, hφs⟩ := hx
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule bosonic) : Prop :=
|
||||
[a2 , ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
[a2, ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
change p a ha
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -588,18 +587,17 @@ lemma superCommute_bosonic_fermionic {a b : 𝓕.CrAnAlgebra}
|
|||
simp_all [p, smul_sub]
|
||||
· exact hb
|
||||
|
||||
|
||||
lemma superCommute_fermionic_bonsonic {a b : 𝓕.CrAnAlgebra}
|
||||
(ha : a ∈ statisticSubmodule fermionic) (hb : b ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = a * b - b * a := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule bosonic) : Prop :=
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
[a, a2]ₛca = a * a2 - a2 * a
|
||||
change p b hb
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
obtain ⟨φs, rfl, hφs⟩ := hx
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule fermionic) : Prop :=
|
||||
[a2 , ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
[a2, ofCrAnList φs]ₛca = a2 * ofCrAnList φs - ofCrAnList φs * a2
|
||||
change p a ha
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -622,7 +620,7 @@ lemma superCommute_fermionic_bonsonic {a b : 𝓕.CrAnAlgebra}
|
|||
simp_all [p, smul_sub]
|
||||
· exact hb
|
||||
|
||||
lemma superCommute_bonsonic {a b : 𝓕.CrAnAlgebra} (hb : b ∈ statisticSubmodule bosonic) :
|
||||
lemma superCommute_bonsonic {a b : 𝓕.CrAnAlgebra} (hb : b ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = a * b - b * a := by
|
||||
rw [← bosonicProj_add_fermionicProj a]
|
||||
simp only [map_add, LinearMap.add_apply]
|
||||
|
@ -630,7 +628,7 @@ lemma superCommute_bonsonic {a b : 𝓕.CrAnAlgebra} (hb : b ∈ statisticSubmo
|
|||
simp only [add_mul, mul_add]
|
||||
abel
|
||||
|
||||
lemma bosonic_superCommute {a b : 𝓕.CrAnAlgebra} (ha : a ∈ statisticSubmodule bosonic) :
|
||||
lemma bosonic_superCommute {a b : 𝓕.CrAnAlgebra} (ha : a ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = a * b - b * a := by
|
||||
rw [← bosonicProj_add_fermionicProj b]
|
||||
simp only [map_add, LinearMap.add_apply]
|
||||
|
@ -638,12 +636,12 @@ lemma bosonic_superCommute {a b : 𝓕.CrAnAlgebra} (ha : a ∈ statisticSubmod
|
|||
simp only [add_mul, mul_add]
|
||||
abel
|
||||
|
||||
lemma superCommute_bonsonic_symm {a b : 𝓕.CrAnAlgebra} (hb : b ∈ statisticSubmodule bosonic) :
|
||||
lemma superCommute_bonsonic_symm {a b : 𝓕.CrAnAlgebra} (hb : b ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = - [b, a]ₛca := by
|
||||
rw [bosonic_superCommute hb, superCommute_bonsonic hb]
|
||||
simp
|
||||
|
||||
lemma bonsonic_superCommute_symm {a b : 𝓕.CrAnAlgebra} (ha : a ∈ statisticSubmodule bosonic) :
|
||||
lemma bonsonic_superCommute_symm {a b : 𝓕.CrAnAlgebra} (ha : a ∈ statisticSubmodule bosonic) :
|
||||
[a, b]ₛca = - [b, a]ₛca := by
|
||||
rw [bosonic_superCommute ha, superCommute_bonsonic ha]
|
||||
simp
|
||||
|
@ -652,13 +650,13 @@ lemma superCommute_fermionic_fermionic {a b : 𝓕.CrAnAlgebra}
|
|||
(ha : a ∈ statisticSubmodule fermionic) (hb : b ∈ statisticSubmodule fermionic) :
|
||||
[a, b]ₛca = a * b + b * a := by
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule fermionic) : Prop :=
|
||||
[a, a2]ₛca = a * a2 + a2 * a
|
||||
[a, a2]ₛca = a * a2 + a2 * a
|
||||
change p b hb
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
obtain ⟨φs, rfl, hφs⟩ := hx
|
||||
let p (a2 : 𝓕.CrAnAlgebra) (hx : a2 ∈ statisticSubmodule fermionic) : Prop :=
|
||||
[a2 , ofCrAnList φs]ₛca = a2 * ofCrAnList φs + ofCrAnList φs * a2
|
||||
[a2, ofCrAnList φs]ₛca = a2 * ofCrAnList φs + ofCrAnList φs * a2
|
||||
change p a ha
|
||||
apply Submodule.span_induction (p := p)
|
||||
· intro x hx
|
||||
|
@ -701,7 +699,7 @@ lemma superCommute_expand_bosonicProj_fermionicProj (a b : 𝓕.CrAnAlgebra) :
|
|||
abel
|
||||
|
||||
lemma superCommute_ofCrAnList_ofCrAnList_bosonic_or_fermionic (φs φs' : List 𝓕.CrAnStates) :
|
||||
[ofCrAnList φs, ofCrAnList φs']ₛca ∈ statisticSubmodule bosonic ∨
|
||||
[ofCrAnList φs, ofCrAnList φs']ₛca ∈ statisticSubmodule bosonic ∨
|
||||
[ofCrAnList φs, ofCrAnList φs']ₛca ∈ statisticSubmodule fermionic := by
|
||||
by_cases h1 : (𝓕 |>ₛ φs) = bosonic <;> by_cases h2 : (𝓕 |>ₛ φs') = bosonic
|
||||
· left
|
||||
|
@ -738,7 +736,7 @@ lemma superCommute_ofCrAnList_ofCrAnList_bosonic_or_fermionic (φs φs' : List
|
|||
apply ofCrAnList_mem_statisticSubmodule_of _ _ (by simpa using h2)
|
||||
|
||||
lemma superCommute_ofCrAnState_ofCrAnState_bosonic_or_fermionic (φ φ' : 𝓕.CrAnStates) :
|
||||
[ofCrAnState φ, ofCrAnState φ']ₛca ∈ statisticSubmodule bosonic ∨
|
||||
[ofCrAnState φ, ofCrAnState φ']ₛca ∈ statisticSubmodule bosonic ∨
|
||||
[ofCrAnState φ, ofCrAnState φ']ₛca ∈ statisticSubmodule fermionic := by
|
||||
rw [← ofCrAnList_singleton, ← ofCrAnList_singleton]
|
||||
exact superCommute_ofCrAnList_ofCrAnList_bosonic_or_fermionic [φ] [φ']
|
||||
|
@ -779,7 +777,7 @@ lemma superCommute_bosonic_ofCrAnList_eq_sum (a : 𝓕.CrAnAlgebra) (φs : List
|
|||
ofCrAnList (φs.take n) * [a, ofCrAnState (φs.get n)]ₛca *
|
||||
ofCrAnList (φs.drop (n + 1)) := by
|
||||
let p (a : 𝓕.CrAnAlgebra) (ha : a ∈ statisticSubmodule bosonic) : Prop :=
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length),
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length),
|
||||
ofCrAnList (φs.take n) * [a, ofCrAnState (φs.get n)]ₛca *
|
||||
ofCrAnList (φs.drop (n + 1))
|
||||
change p a ha
|
||||
|
@ -802,14 +800,13 @@ lemma superCommute_bosonic_ofCrAnList_eq_sum (a : 𝓕.CrAnAlgebra) (φs : List
|
|||
simp_all [p, Finset.smul_sum]
|
||||
· exact ha
|
||||
|
||||
|
||||
lemma superCommute_fermionic_ofCrAnList_eq_sum (a : 𝓕.CrAnAlgebra) (φs : List 𝓕.CrAnStates)
|
||||
(ha : a ∈ statisticSubmodule fermionic) :
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length), 𝓢(fermionic, 𝓕 |>ₛ φs.take n) •
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length), 𝓢(fermionic, 𝓕 |>ₛ φs.take n) •
|
||||
ofCrAnList (φs.take n) * [a, ofCrAnState (φs.get n)]ₛca *
|
||||
ofCrAnList (φs.drop (n + 1)) := by
|
||||
let p (a : 𝓕.CrAnAlgebra) (ha : a ∈ statisticSubmodule fermionic) : Prop :=
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length), 𝓢(fermionic, 𝓕 |>ₛ φs.take n) •
|
||||
[a, ofCrAnList φs]ₛca = ∑ (n : Fin φs.length), 𝓢(fermionic, 𝓕 |>ₛ φs.take n) •
|
||||
ofCrAnList (φs.take n) * [a, ofCrAnState (φs.get n)]ₛca *
|
||||
ofCrAnList (φs.drop (n + 1))
|
||||
change p a ha
|
||||
|
@ -835,7 +832,6 @@ lemma superCommute_fermionic_ofCrAnList_eq_sum (a : 𝓕.CrAnAlgebra) (φs : Lis
|
|||
simp [smul_smul, mul_comm]
|
||||
· exact ha
|
||||
|
||||
|
||||
lemma statistic_neq_of_superCommute_fermionic {φs φs' : List 𝓕.CrAnStates}
|
||||
(h : [ofCrAnList φs, ofCrAnList φs']ₛca ∈ statisticSubmodule fermionic) :
|
||||
(𝓕 |>ₛ φs) ≠ (𝓕 |>ₛ φs') ∨ [ofCrAnList φs, ofCrAnList φs']ₛca = 0 := by
|
||||
|
|
|
@ -66,7 +66,7 @@ lemma timeOrder_timeOrder_mid (a b c : 𝓕.CrAnAlgebra) : 𝓣ᶠ(a * b * c) =
|
|||
Algebra.smul_mul_assoc, map_smul]
|
||||
rw [timeOrder_ofCrAnList, timeOrder_ofCrAnList, smul_smul]
|
||||
congr 1
|
||||
· simp only [crAnTimeOrderSign, crAnTimeOrderList]
|
||||
· simp only [crAnTimeOrderSign, crAnTimeOrderList]
|
||||
rw [Wick.koszulSign_of_append_eq_insertionSort, mul_comm]
|
||||
· congr 1
|
||||
simp only [crAnTimeOrderList]
|
||||
|
@ -167,7 +167,6 @@ lemma timeOrder_superCommute_ofCrAnState_ofCrAnState_not_crAnTimeOrderRel_right
|
|||
timeOrder_superCommute_ofCrAnState_ofCrAnState_not_crAnTimeOrderRel h]
|
||||
simp
|
||||
|
||||
|
||||
lemma timeOrder_superCommute_ofCrAnState_ofCrAnState_not_crAnTimeOrderRel_left
|
||||
{φ ψ : 𝓕.CrAnStates} (h : ¬ crAnTimeOrderRel φ ψ) (a : 𝓕.CrAnAlgebra) :
|
||||
𝓣ᶠ([ofCrAnState φ, ofCrAnState ψ]ₛca * a) = 0 := by
|
||||
|
@ -183,7 +182,7 @@ lemma timeOrder_superCommute_ofCrAnState_ofCrAnState_not_crAnTimeOrderRel_mid
|
|||
simp
|
||||
|
||||
lemma timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel
|
||||
{φ1 φ2 : 𝓕.CrAnStates} (h : ¬ crAnTimeOrderRel φ1 φ2) (a : 𝓕.CrAnAlgebra):
|
||||
{φ1 φ2 : 𝓕.CrAnStates} (h : ¬ crAnTimeOrderRel φ1 φ2) (a : 𝓕.CrAnAlgebra) :
|
||||
𝓣ᶠ([a, [ofCrAnState φ1, ofCrAnState φ2]ₛca]ₛca) = 0 := by
|
||||
rw [← bosonicProj_add_fermionicProj a]
|
||||
simp
|
||||
|
@ -213,7 +212,7 @@ lemma timeOrder_superCommute_ofCrAnState_superCommute_not_crAnTimeOrderRel
|
|||
rw [summerCommute_jacobi_ofCrAnList]
|
||||
simp [ofCrAnList_singleton]
|
||||
right
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h12 ]
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h12]
|
||||
rw [superCommute_ofCrAnState_ofCrAnState_symm φ3]
|
||||
simp
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h13]
|
||||
|
@ -229,14 +228,14 @@ lemma timeOrder_superCommute_ofCrAnState_superCommute_not_crAnTimeOrderRel'
|
|||
right
|
||||
rw [superCommute_ofCrAnState_ofCrAnState_symm φ1]
|
||||
simp
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h12 ]
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h12]
|
||||
simp
|
||||
rw [timeOrder_superCommute_superCommute_ofCrAnState_not_crAnTimeOrderRel h13]
|
||||
simp
|
||||
|
||||
lemma timeOrder_superCommute_ofCrAnState_superCommute_all_not_crAnTimeOrderRel
|
||||
(φ1 φ2 φ3 : 𝓕.CrAnStates) (h : ¬ (
|
||||
crAnTimeOrderRel φ1 φ2 ∧ crAnTimeOrderRel φ1 φ3 ∧
|
||||
(φ1 φ2 φ3 : 𝓕.CrAnStates) (h : ¬
|
||||
(crAnTimeOrderRel φ1 φ2 ∧ crAnTimeOrderRel φ1 φ3 ∧
|
||||
crAnTimeOrderRel φ2 φ1 ∧ crAnTimeOrderRel φ2 φ3 ∧
|
||||
crAnTimeOrderRel φ3 φ1 ∧ crAnTimeOrderRel φ3 φ2)) :
|
||||
𝓣ᶠ([ofCrAnState φ1, [ofCrAnState φ2, ofCrAnState φ3]ₛca]ₛca) = 0 := by
|
||||
|
@ -272,7 +271,6 @@ lemma timeOrder_superCommute_ofCrAnState_superCommute_all_not_crAnTimeOrderRel
|
|||
refine False.elim (h ?_)
|
||||
exact IsTrans.trans φ3 φ2 φ1 h32 h21
|
||||
|
||||
|
||||
lemma timeOrder_superCommute_ofCrAnState_ofCrAnState_eq_time
|
||||
{φ ψ : 𝓕.CrAnStates} (h1 : crAnTimeOrderRel φ ψ) (h2 : crAnTimeOrderRel ψ φ) :
|
||||
𝓣ᶠ([ofCrAnState φ, ofCrAnState ψ]ₛca) = [ofCrAnState φ, ofCrAnState ψ]ₛca := by
|
||||
|
|
|
@ -112,8 +112,8 @@ lemma ι_superCommute_zero_of_fermionic (φ ψ : 𝓕.CrAnStates)
|
|||
· simp [h]
|
||||
|
||||
lemma ι_superCommute_ofCrAnState_ofCrAnState_bosonic_or_zero (φ ψ : 𝓕.CrAnStates) :
|
||||
[ofCrAnState φ, ofCrAnState ψ]ₛca ∈ statisticSubmodule bosonic ∨
|
||||
ι [ofCrAnState φ, ofCrAnState ψ]ₛca = 0 := by
|
||||
[ofCrAnState φ, ofCrAnState ψ]ₛca ∈ statisticSubmodule bosonic ∨
|
||||
ι [ofCrAnState φ, ofCrAnState ψ]ₛca = 0 := by
|
||||
rcases superCommute_ofCrAnList_ofCrAnList_bosonic_or_fermionic [φ] [ψ] with h | h
|
||||
· simp_all [ofCrAnList_singleton]
|
||||
· simp_all [ofCrAnList_singleton]
|
||||
|
@ -236,7 +236,6 @@ lemma bosonicProj_mem_fieldOpIdealSet_or_zero (x : CrAnAlgebra 𝓕) (hx : x ∈
|
|||
· right
|
||||
rw [bosonicProj_of_mem_fermionic _ h]
|
||||
|
||||
|
||||
lemma fermionicProj_mem_fieldOpIdealSet_or_zero (x : CrAnAlgebra 𝓕) (hx : x ∈ 𝓕.fieldOpIdealSet) :
|
||||
x.fermionicProj.1 ∈ 𝓕.fieldOpIdealSet ∨ x.fermionicProj = 0 := by
|
||||
have hx' := hx
|
||||
|
@ -269,7 +268,7 @@ lemma fermionicProj_mem_fieldOpIdealSet_or_zero (x : CrAnAlgebra 𝓕) (hx : x
|
|||
simpa using hx'
|
||||
|
||||
lemma bosonicProj_mem_ideal (x : CrAnAlgebra 𝓕) (hx : x ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet) :
|
||||
x.bosonicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
|
||||
x.bosonicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
|
||||
rw [TwoSidedIdeal.mem_span_iff_mem_addSubgroup_closure] at hx
|
||||
let p {k : Set 𝓕.CrAnAlgebra} (a : CrAnAlgebra 𝓕) (h : a ∈ AddSubgroup.closure k) : Prop :=
|
||||
a.bosonicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet
|
||||
|
@ -405,7 +404,7 @@ lemma bosonicProj_mem_ideal (x : CrAnAlgebra 𝓕) (hx : x ∈ TwoSidedIdeal.spa
|
|||
simp [p]
|
||||
|
||||
lemma fermionicProj_mem_ideal (x : CrAnAlgebra 𝓕) (hx : x ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet) :
|
||||
x.fermionicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
|
||||
x.fermionicProj.1 ∈ TwoSidedIdeal.span 𝓕.fieldOpIdealSet := by
|
||||
have hb := bosonicProj_mem_ideal x hx
|
||||
rw [← ι_eq_zero_iff_mem_ideal] at hx hb ⊢
|
||||
rw [← bosonicProj_add_fermionicProj x] at hx
|
||||
|
@ -425,7 +424,5 @@ lemma ι_eq_zero_iff_ι_bosonicProj_fermonicProj_zero (x : CrAnAlgebra 𝓕) :
|
|||
rw [← bosonicProj_add_fermionicProj x]
|
||||
simp_all
|
||||
|
||||
|
||||
|
||||
end FieldOpAlgebra
|
||||
end FieldSpecification
|
||||
|
|
|
@ -80,7 +80,7 @@ lemma superCommuteRight_eq_of_equiv (a1 a2 : 𝓕.CrAnAlgebra) (h : a1 ≈ a2) :
|
|||
apply ι_superCommute_eq_zero_of_ι_left_zero
|
||||
exact (ι_eq_zero_iff_mem_ideal (a1 - a2)).mpr h
|
||||
simp_all [superCommuteRight_apply_ι]
|
||||
trans ι ((superCommute a2) b) + 0
|
||||
trans ι ((superCommute a2) b) + 0
|
||||
rw [← ha1b1]
|
||||
simp
|
||||
simp
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace FieldOpAlgebra
|
|||
variable {𝓕 : FieldSpecification}
|
||||
|
||||
lemma ι_timeOrder_superCommute_superCommute_eq_time_ofCrAnList {φ1 φ2 φ3 : 𝓕.CrAnStates}
|
||||
(φs1 φs2 : List 𝓕.CrAnStates) (h :
|
||||
(φs1 φs2 : List 𝓕.CrAnStates) (h :
|
||||
crAnTimeOrderRel φ1 φ2 ∧ crAnTimeOrderRel φ1 φ3 ∧
|
||||
crAnTimeOrderRel φ2 φ1 ∧ crAnTimeOrderRel φ2 φ3 ∧
|
||||
crAnTimeOrderRel φ3 φ1 ∧ crAnTimeOrderRel φ3 φ2):
|
||||
|
@ -115,12 +115,12 @@ lemma ι_timeOrder_superCommute_superCommute_eq_time_ofCrAnList {φ1 φ2 φ3 :
|
|||
rw [← smul_sub, ← smul_sub, smul_smul, mul_comm, ← smul_smul, ← smul_sub]
|
||||
simp
|
||||
right
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm, mul_assoc]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm, mul_assoc]
|
||||
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
rw [smul_sub]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
rw [← smul_mul_assoc, ← mul_smul_comm]
|
||||
repeat rw [mul_assoc]
|
||||
rw [← mul_sub, ← mul_sub, ← mul_sub]
|
||||
rw [← sub_mul, ← sub_mul, ← sub_mul]
|
||||
|
@ -181,7 +181,7 @@ lemma ι_timeOrder_superCommute_eq_time {φ ψ : 𝓕.CrAnStates}
|
|||
ι 𝓣ᶠ(a * [ofCrAnState φ, ofCrAnState ψ]ₛca * b) =
|
||||
ι ([ofCrAnState φ, ofCrAnState ψ]ₛca * 𝓣ᶠ(a * b)) := by
|
||||
let pb (b : 𝓕.CrAnAlgebra) (hc : b ∈ Submodule.span ℂ (Set.range ofCrAnListBasis)) :
|
||||
Prop := ι 𝓣ᶠ(a * [ofCrAnState φ, ofCrAnState ψ]ₛca * b) =
|
||||
Prop := ι 𝓣ᶠ(a * [ofCrAnState φ, ofCrAnState ψ]ₛca * b) =
|
||||
ι ([ofCrAnState φ, ofCrAnState ψ]ₛca * 𝓣ᶠ(a * b))
|
||||
change pb b (Basis.mem_span _ b)
|
||||
apply Submodule.span_induction
|
||||
|
@ -201,7 +201,7 @@ lemma ι_timeOrder_superCommute_eq_time {φ ψ : 𝓕.CrAnStates}
|
|||
simp [mul_sub, sub_mul, ← ofCrAnList_append]
|
||||
rw [timeOrder_ofCrAnList, timeOrder_ofCrAnList]
|
||||
have h1 : crAnTimeOrderSign (φs' ++ φ :: ψ :: φs) = crAnTimeOrderSign (φs' ++ ψ :: φ :: φs) := by
|
||||
trans crAnTimeOrderSign (φs' ++ [φ, ψ] ++ φs)
|
||||
trans crAnTimeOrderSign (φs' ++ [φ, ψ] ++ φs)
|
||||
simp
|
||||
rw [crAnTimeOrderSign]
|
||||
have hp : List.Perm [φ,ψ] [ψ,φ] := by exact List.Perm.swap ψ φ []
|
||||
|
@ -244,7 +244,7 @@ lemma ι_timeOrder_superCommute_eq_time {φ ψ : 𝓕.CrAnStates}
|
|||
rw [← map_mul, ← map_mul, ← map_mul, ← map_mul]
|
||||
rw [← ofCrAnList_append, ← ofCrAnList_append, ← ofCrAnList_append, ← ofCrAnList_append]
|
||||
have h1 := insertionSort_of_takeWhile_filter 𝓕.crAnTimeOrderRel φ φs' φs
|
||||
simp at h1 ⊢
|
||||
simp at h1 ⊢
|
||||
rw [← h1]
|
||||
rw [← crAnTimeOrderList]
|
||||
by_cases hq : (𝓕 |>ₛ φ) ≠ (𝓕 |>ₛ ψ)
|
||||
|
@ -269,7 +269,7 @@ lemma ι_timeOrder_superCommute_eq_time {φ ψ : 𝓕.CrAnStates}
|
|||
|
||||
|
||||
lemma ι_timeOrder_superCommute_neq_time {φ ψ : 𝓕.CrAnStates}
|
||||
(hφψ : ¬ (crAnTimeOrderRel φ ψ ∧ crAnTimeOrderRel ψ φ)) (a b : 𝓕.CrAnAlgebra) :
|
||||
(hφψ : ¬ (crAnTimeOrderRel φ ψ ∧ crAnTimeOrderRel ψ φ)) (a b : 𝓕.CrAnAlgebra) :
|
||||
ι 𝓣ᶠ(a * [ofCrAnState φ, ofCrAnState ψ]ₛca * b) = 0 := by
|
||||
rw [timeOrder_timeOrder_mid]
|
||||
have hφψ : ¬ (crAnTimeOrderRel φ ψ) ∨ ¬ (crAnTimeOrderRel ψ φ) := by
|
||||
|
@ -309,7 +309,7 @@ lemma ι_timeOrder_zero_of_mem_ideal (a : 𝓕.CrAnAlgebra)
|
|||
simp
|
||||
| Or.inr (Or.inl hc) =>
|
||||
obtain ⟨φa, hφa, φb, hφb, rfl⟩ := hc
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
· rw [ι_timeOrder_superCommute_eq_time]
|
||||
simp
|
||||
rw [ι_superCommute_of_create_create]
|
||||
|
@ -321,7 +321,7 @@ lemma ι_timeOrder_zero_of_mem_ideal (a : 𝓕.CrAnAlgebra)
|
|||
· rw [ι_timeOrder_superCommute_neq_time heqt]
|
||||
| Or.inr (Or.inr (Or.inl hc)) =>
|
||||
obtain ⟨φa, hφa, φb, hφb, rfl⟩ := hc
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
· rw [ι_timeOrder_superCommute_eq_time]
|
||||
simp
|
||||
rw [ι_superCommute_of_annihilate_annihilate]
|
||||
|
@ -333,7 +333,7 @@ lemma ι_timeOrder_zero_of_mem_ideal (a : 𝓕.CrAnAlgebra)
|
|||
· rw [ι_timeOrder_superCommute_neq_time heqt]
|
||||
| Or.inr (Or.inr (Or.inr hc)) =>
|
||||
obtain ⟨φa, φb, hdiff, rfl⟩ := hc
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
by_cases heqt : (crAnTimeOrderRel φa φb ∧ crAnTimeOrderRel φb φa)
|
||||
· rw [ι_timeOrder_superCommute_eq_time]
|
||||
simp
|
||||
rw [ι_superCommute_of_diff_statistic]
|
||||
|
|
|
@ -72,7 +72,7 @@ lemma bosonic_exchangeSign (a : FieldStatistic) : 𝓢(bosonic, a) = 1 := by
|
|||
rw [exchangeSign_symm, exchangeSign_bosonic]
|
||||
|
||||
@[simp]
|
||||
lemma fermionic_exchangeSign_fermionic : 𝓢(fermionic, fermionic) = - 1 := by
|
||||
lemma fermionic_exchangeSign_fermionic : 𝓢(fermionic, fermionic) = - 1 := by
|
||||
rfl
|
||||
|
||||
lemma exchangeSign_eq_if (a b : FieldStatistic) :
|
||||
|
|
|
@ -261,7 +261,7 @@ lemma koszulSign_eraseIdx_insertionSortMinPos [IsTotal 𝓕 le] [IsTrans 𝓕 le
|
|||
rfl
|
||||
|
||||
lemma koszulSign_swap_eq_rel_cons {ψ φ : 𝓕}
|
||||
(h1 : le φ ψ) (h2 : le ψ φ) (φs' : List 𝓕):
|
||||
(h1 : le φ ψ) (h2 : le ψ φ) (φs' : List 𝓕) :
|
||||
koszulSign q le (φ :: ψ :: φs') = koszulSign q le (ψ :: φ :: φs') := by
|
||||
simp only [Wick.koszulSign, ← mul_assoc, mul_eq_mul_right_iff]
|
||||
left
|
||||
|
@ -285,7 +285,7 @@ lemma koszulSign_eq_rel_eq_stat_append {ψ φ : 𝓕} [IsTrans 𝓕 le] [IsTotal
|
|||
koszulSign q le (φ :: ψ :: φs) = koszulSign q le φs := by
|
||||
intro φs
|
||||
simp [koszulSign, ← mul_assoc]
|
||||
trans 1 * koszulSign q le φs
|
||||
trans 1 * koszulSign q le φs
|
||||
swap
|
||||
simp
|
||||
congr
|
||||
|
@ -305,11 +305,11 @@ lemma koszulSign_eq_rel_eq_stat {ψ φ : 𝓕} [IsTrans 𝓕 le] [IsTotal 𝓕 l
|
|||
rw [koszulSign_eq_rel_eq_stat h1 h2 hq φs' φs]
|
||||
simp
|
||||
left
|
||||
trans koszulSignInsert q le φ'' (φ :: ψ :: (φs' ++ φs) )
|
||||
trans koszulSignInsert q le φ'' (φ :: ψ :: (φs' ++ φs))
|
||||
apply koszulSignInsert_eq_perm
|
||||
refine List.Perm.symm (List.perm_cons_append_cons φ ?_)
|
||||
exact List.Perm.symm List.perm_middle
|
||||
rw [koszulSignInsert_eq_remove_same_stat_append q le ]
|
||||
rw [koszulSignInsert_eq_remove_same_stat_append q le]
|
||||
simp_all
|
||||
simp_all
|
||||
simp_all
|
||||
|
@ -331,15 +331,16 @@ lemma koszulSign_of_insertionSort [IsTotal 𝓕 le] [IsTrans 𝓕 le] (φs : Lis
|
|||
apply koszulSign_of_sorted
|
||||
exact List.sorted_insertionSort le φs
|
||||
|
||||
lemma koszulSign_of_append_eq_insertionSort_left [IsTotal 𝓕 le] [IsTrans 𝓕 le] : (φs φs' : List 𝓕) →
|
||||
koszulSign q le (φs ++ φs') =
|
||||
koszulSign q le (List.insertionSort le φs ++ φs') * koszulSign q le φs
|
||||
lemma koszulSign_of_append_eq_insertionSort_left [IsTotal 𝓕 le] [IsTrans 𝓕 le] :
|
||||
(φs φs' : List 𝓕) → koszulSign q le (φs ++ φs') =
|
||||
koszulSign q le (List.insertionSort le φs ++ φs') * koszulSign q le φs
|
||||
| φs, [] => by
|
||||
simp
|
||||
| φs, φ :: φs' => by
|
||||
have h1 : (φs ++ φ :: φs') = List.insertIdx φs.length φ (φs ++ φs') := by
|
||||
rw [insertIdx_length_fst_append]
|
||||
have h2 : (List.insertionSort le φs ++ φ :: φs') = List.insertIdx (List.insertionSort le φs).length φ (List.insertionSort le φs ++ φs') := by
|
||||
have h2 : (List.insertionSort le φs ++ φ :: φs') =
|
||||
List.insertIdx (List.insertionSort le φs).length φ (List.insertionSort le φs ++ φs') := by
|
||||
rw [insertIdx_length_fst_append]
|
||||
rw [h1, h2]
|
||||
rw [koszulSign_insertIdx]
|
||||
|
@ -353,7 +354,8 @@ lemma koszulSign_of_append_eq_insertionSort_left [IsTotal 𝓕 le] [IsTrans 𝓕
|
|||
simp [mul_comm]
|
||||
left
|
||||
congr 3
|
||||
· have h2 : (List.insertionSort le φs ++ φ :: φs') = List.insertIdx φs.length φ (List.insertionSort le φs ++ φs') := by
|
||||
· have h2 : (List.insertionSort le φs ++ φ :: φs') =
|
||||
List.insertIdx φs.length φ (List.insertionSort le φs ++ φs') := by
|
||||
rw [← insertIdx_length_fst_append]
|
||||
simp
|
||||
rw [insertionSortEquiv_congr _ _ h2.symm]
|
||||
|
@ -363,16 +365,16 @@ lemma koszulSign_of_append_eq_insertionSort_left [IsTotal 𝓕 le] [IsTrans 𝓕
|
|||
rw [insertionSortEquiv_congr _ _ h1.symm]
|
||||
simp
|
||||
· rw [insertIdx_length_fst_append]
|
||||
rw [show φs.length = (List.insertionSort le φs).length by simp]
|
||||
rw [show φs.length = (List.insertionSort le φs).length by simp]
|
||||
rw [insertIdx_length_fst_append]
|
||||
symm
|
||||
apply insertionSort_insertionSort_append
|
||||
· simp
|
||||
· simp
|
||||
|
||||
lemma koszulSign_of_append_eq_insertionSort [IsTotal 𝓕 le] [IsTrans 𝓕 le] : (φs'' φs φs' : List 𝓕) →
|
||||
lemma koszulSign_of_append_eq_insertionSort [IsTotal 𝓕 le] [IsTrans 𝓕 le] : (φs'' φs φs' : List 𝓕) →
|
||||
koszulSign q le (φs'' ++ φs ++ φs') =
|
||||
koszulSign q le (φs'' ++ List.insertionSort le φs ++ φs') * koszulSign q le φs
|
||||
koszulSign q le (φs'' ++ List.insertionSort le φs ++ φs') * koszulSign q le φs
|
||||
| [], φs, φs'=> by
|
||||
simp
|
||||
exact koszulSign_of_append_eq_insertionSort_left q le φs φs'
|
||||
|
@ -391,10 +393,10 @@ lemma koszulSign_of_append_eq_insertionSort [IsTotal 𝓕 le] [IsTrans 𝓕 le]
|
|||
|
||||
-/
|
||||
|
||||
lemma koszulSign_perm_eq_append [IsTotal 𝓕 le] [IsTrans 𝓕 le] (φ : 𝓕) ( φs φs' φs2 : List 𝓕)
|
||||
lemma koszulSign_perm_eq_append [IsTotal 𝓕 le] [IsTrans 𝓕 le] (φ : 𝓕) (φs φs' φs2 : List 𝓕)
|
||||
(hp : φs.Perm φs') : (h : ∀ φ' ∈ φs, le φ φ' ∧ le φ' φ) →
|
||||
koszulSign q le (φs ++ φs2) = koszulSign q le (φs' ++ φs2) := by
|
||||
let motive (φs φs' : List 𝓕) (hp : φs.Perm φs') : Prop :=
|
||||
let motive (φs φs' : List 𝓕) (hp : φs.Perm φs') : Prop :=
|
||||
(h : ∀ φ' ∈ φs, le φ φ' ∧ le φ' φ) →
|
||||
koszulSign q le (φs ++ φs2) = koszulSign q le (φs' ++ φs2)
|
||||
change motive φs φs' hp
|
||||
|
@ -433,5 +435,4 @@ lemma koszulSign_perm_eq [IsTotal 𝓕 le] [IsTrans 𝓕 le] (φ : 𝓕) : (φs1
|
|||
refine (List.perm_append_right_iff φs2).mpr ?_
|
||||
exact List.Perm.append_left φs1 hp
|
||||
|
||||
|
||||
end Wick
|
||||
|
|
|
@ -235,7 +235,7 @@ lemma koszulSignInsert_cons (r0 r1 : 𝓕) (r : List 𝓕) :
|
|||
koszulSignInsert q le r0 r := by
|
||||
simp [koszulSignInsert, koszulSignCons]
|
||||
|
||||
lemma koszulSignInsert_of_le_mem (φ0 : 𝓕) : (φs : List 𝓕) → (h : ∀ b ∈ φs, le φ0 b) →
|
||||
lemma koszulSignInsert_of_le_mem (φ0 : 𝓕) : (φs : List 𝓕) → (h : ∀ b ∈ φs, le φ0 b) →
|
||||
koszulSignInsert q le φ0 φs = 1
|
||||
| [], _ => by
|
||||
simp [koszulSignInsert]
|
||||
|
@ -247,7 +247,6 @@ lemma koszulSignInsert_of_le_mem (φ0 : 𝓕) : (φs : List 𝓕) → (h : ∀
|
|||
exact h b (List.mem_cons_of_mem _ hb)
|
||||
· exact h φ1 (List.mem_cons_self _ _)
|
||||
|
||||
|
||||
lemma koszulSignInsert_eq_rel_eq_stat {ψ φ : 𝓕} [IsTotal 𝓕 le] [IsTrans 𝓕 le]
|
||||
(h1 : le φ ψ) (h2 : le ψ φ) (hq : q ψ = q φ) : (φs : List 𝓕) →
|
||||
koszulSignInsert q le φ φs = koszulSignInsert q le ψ φs
|
||||
|
@ -270,7 +269,7 @@ lemma koszulSignInsert_eq_rel_eq_stat {ψ φ : 𝓕} [IsTotal 𝓕 le] [IsTrans
|
|||
rw [koszulSignInsert_eq_rel_eq_stat h1 h2 hq φs]
|
||||
|
||||
lemma koszulSignInsert_eq_remove_same_stat_append {ψ φ φ' : 𝓕} [IsTotal 𝓕 le] [IsTrans 𝓕 le]
|
||||
(h1 : le φ ψ) (h2 : le ψ φ) (hq : q ψ = q φ) : ( φs : List 𝓕) →
|
||||
(h1 : le φ ψ) (h2 : le ψ φ) (hq : q ψ = q φ) : (φs : List 𝓕) →
|
||||
koszulSignInsert q le φ' (φ :: ψ :: φs) = koszulSignInsert q le φ' φs := by
|
||||
intro φs
|
||||
simp_all [koszulSignInsert]
|
||||
|
@ -284,6 +283,4 @@ lemma koszulSignInsert_eq_remove_same_stat_append {ψ φ φ' : 𝓕} [IsTotal
|
|||
apply IsTrans.trans φ' ψ φ hφ'ψ h2
|
||||
simp_all [hφ'φ, hφ'ψ]
|
||||
|
||||
|
||||
|
||||
end Wick
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue