Zulip Chat Archive
Stream: new members
Topic: rintro not unpacking the way I expected
Ryan Smith (Sep 09 2025 at 17:44):
While unpacking a universal quantifier for a complex number I found that rintro doesn't expand in the way I would expect it work. What I have right now works ok, so the point of this question is in better understanding:
s : Multiset ℂ
have hibd : ∀ t ∈ s.toEnumFinset, (f t).re ≤ 1 := by
rintro ⟨z, n⟩
-- ⊢ (z, n) ∈ s.toEnumFinset → (f (z, n)).re ≤ 1
intro heig
-- ⊢ (f (z, n)).re ≤ 1 this is fine and now we are ready to prove our result
Can we combine the rintro and intro statements together? When I tried introduce another term to the constructor it doesn't work as expected. Asking for teaching value.
Kevin Buzzard (Sep 09 2025 at 17:47):
If you asked with a #mwe rather than a code fragment then it would be much easier for others to answer. Does rintro \<z, n\> heig not work?
Ryan Smith (Sep 09 2025 at 17:48):
Sorry you're totally right about that.
It does! So why does heig not sit inside the brackets?
Kevin Buzzard (Sep 09 2025 at 17:50):
The pointy brackets are taking a term apart. heig is a different term.
Ruben Van de Velde (Sep 09 2025 at 18:02):
∀ t ∈ s.toEnumFinset, (f t).re ≤ 1 actually means ∀ t, ∀ ht : t ∈ s.toEnumFinset, (f t).re ≤ 1, and rintro takes space-separated arguments for each ∀
Ruben Van de Velde (Sep 09 2025 at 18:03):
It's equivalent to
intro t heig
obtain ⟨z, n⟩ := t
Kevin Buzzard (Sep 09 2025 at 18:08):
Aah yes! It's not at all obvious that it's a different term! Hence the confusion. This is an implementation detail I guess.
Ryan Smith (Sep 09 2025 at 18:13):
Thanks for the explanation. Now back to grinding away at a lemma that seems like it should be trivially obvious :)
Last updated: Dec 20 2025 at 21:32 UTC