feat: Going to const-dest fields commute timeorder

This commit is contained in:
jstoobysmith 2024-12-10 10:03:51 +00:00
parent 7ee877af55
commit b98d89fb0d
4 changed files with 288 additions and 234 deletions

View file

@ -356,4 +356,53 @@ lemma finMapToEquiv_symm_eq {f1 : Fin n → Fin m} {f2 : Fin m → Fin n}
(finMapToEquiv f1 f2 h h').symm = finMapToEquiv f2 f1 h' h := by
rfl
/-- Given an equivalence between `Fin n` and `Fin m`, the induced equivalence between
`Fin n.succ` and `Fin m.succ` derived by `Fin.cons`. -/
def equivCons {n m : } (e : Fin n ≃ Fin m) : Fin n.succ ≃ Fin m.succ where
toFun := Fin.cons 0 (Fin.succ ∘ e.toFun)
invFun := Fin.cons 0 (Fin.succ ∘ e.invFun)
left_inv i := by
rcases Fin.eq_zero_or_eq_succ i with hi | hi
· subst hi
simp
· obtain ⟨j, hj⟩ := hi
subst hj
simp
right_inv i := by
rcases Fin.eq_zero_or_eq_succ i with hi | hi
· subst hi
simp
· obtain ⟨j, hj⟩ := hi
subst hj
simp
@[simp]
lemma equivCons_trans {n m k : } (e : Fin n ≃ Fin m) (f : Fin m ≃ Fin k) :
Fin.equivCons (e.trans f) = (Fin.equivCons e).trans (Fin.equivCons f) := by
refine Equiv.ext_iff.mpr ?_
intro x
simp [Fin.equivCons]
match x with
| ⟨0, h⟩ => rfl
| ⟨i + 1, h⟩ => rfl
@[simp]
lemma equivCons_castOrderIso {n m : } (h : n = m) :
(Fin.equivCons (Fin.castOrderIso h).toEquiv) = (Fin.castOrderIso (by simp [h])).toEquiv := by
refine Equiv.ext_iff.mpr ?_
intro x
simp [Fin.equivCons]
match x with
| ⟨0, h⟩ => rfl
| ⟨i + 1, h⟩ => rfl
@[simp]
lemma equivCons_symm_succ {n m : } (e : Fin n ≃ Fin m) (i : ) (hi : i + 1 < m.succ) :
(Fin.equivCons e).symm ⟨i + 1, hi⟩ = (e.symm ⟨i, Nat.succ_lt_succ_iff.mp hi⟩).succ := by
simp [Fin.equivCons]
have hi : ⟨i + 1, hi⟩ = Fin.succ ⟨i, Nat.succ_lt_succ_iff.mp hi⟩ := by rfl
rw [hi]
rw [Fin.cons_succ]
simp
end HepLean.Fin