Zulip Chat Archive

Stream: new members

Topic: Is there a better way to reason about List.ofFn?


Ching-Tsun Chou (Jun 05 2025 at 17:46):

Is there a better way to prove the following trivial result? I am not happy with what I came up with, especially the the stupid calc sequence. All I wanted to do was to somehow unfold an equality between two lambda expressions into a ∀-quantified equality, but I couldn't figure out a better way to do that.

example {X : Type*} {xs xs' :   X} {m n n' : }
    (h : List.ofFn (fun k : Fin (m - n)  xs (k + n)) = List.ofFn (fun k : Fin n'  xs' k)) :
    n' = m - n   k < m - n, xs' k = xs (k + n) := by
  simp [List.ofFn_inj'] at h
  obtain rfl, h2 := h
  simp at h2
  simp ; intro k h_k
  calc _ = (fun k : Fin (m - n)  xs' k) k, h_k := by simp
       _ = (fun k : Fin (m - n)  xs (k + n)) k, h_k := by rw [h2]
       _ = _ := by simp

Aaron Liu (Jun 05 2025 at 17:54):

import Mathlib

example {X : Type*} {xs xs' :   X} {m n n' : }
    (h : List.ofFn (fun k : Fin (m - n)  xs (k + n)) = List.ofFn (fun k : Fin n'  xs' k)) :
    n' = m - n   k < m - n, xs' k = xs (k + n) := by
  symm at h
  rw [List.ofFn_inj', Sigma.mk.injEq] at h
  obtain rfl, h2 := h
  rw [heq_eq_eq, funext_iff] at h2
  simpa [Fin.forall_iff] using h2

Ching-Tsun Chou (Jun 05 2025 at 18:12):

Thanks! funext_iff is what I needed. I knew there must be a result like that in mathlib but could not find it. simp? only found heq_eq_eq.


Last updated: Dec 20 2025 at 21:32 UTC