Zulip Chat Archive
Stream: new members
Topic: fintype.card of coerced set
Eric Wieser (Dec 12 2020 at 20:45):
This looks like a fairly trivial statement, but I can't work out how to eliminate the coercion to sort:
example {ιa : Type*} {ιb : Type*}
[decidable_eq ιa]
[decidable_eq ιb]
[fintype ιa]
[fintype ιb] :
fintype.card (set_of
(λ (σ : equiv.perm (ιa ⊕ ιb)),
∃ (sl : equiv.perm ιa) (sr : equiv.perm ιb),
σ = sl.sum_congr sr)) =
fintype.card (equiv.perm ιa) * fintype.card (equiv.perm ιb) :=
begin
sorry,
end
Eric Wieser (Dec 12 2020 at 20:46):
(I know that I'll need to show that docs#equiv.perm.sum_congr is injective in each argument, but I can't see how to actually apply that here)
Kevin Buzzard (Dec 12 2020 at 20:59):
Why not just construct the equiv between your set and perm ia x perm ib?
Kevin Buzzard (Dec 12 2020 at 21:00):
The card thing is just noise because we have equiv -> same card
Kevin Buzzard (Dec 12 2020 at 21:00):
And card of prod is prod of cards
Kevin Buzzard (Dec 12 2020 at 21:01):
Oh I see you're not asking how to prove it
Kevin Buzzard (Dec 12 2020 at 21:02):
Why not just make the subtype or the subgroup or whatever. Maybe I don't understand the question
Eric Wieser (Dec 12 2020 at 21:11):
Put simply, I want to show the cardinality of the range of sum_congr
is the product of the cardinality of the domains
Eric Wieser (Dec 12 2020 at 21:12):
I have the subgroup (docs#equiv.perm.sum_congr_subgroup), and getting the card of that is really what I want to prove
Kevin Buzzard (Dec 12 2020 at 22:55):
Prove an equiv between the range and the product of the domains
Eric Wieser (Dec 12 2020 at 22:57):
The range as a subtype, I assume
Kevin Buzzard (Dec 12 2020 at 22:59):
Sure
Eric Wieser (Dec 13 2020 at 13:14):
Defining that obvious equivalence is proving to be frustrating: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Getting.20a.20hypothesis.20that.20agrees.20with.20the.20match.20branch/near/219760278
Reid Barton (Dec 13 2020 at 13:43):
Do you need to ever introduce this {σ | ∃ (sl : equiv.perm ιa) (sr : equiv.perm ιb), σ = sl.sum_congr sr}
at all?
Eric Wieser (Dec 13 2020 at 13:45):
No, it just arises from unfolding sum_congr_subgroup
Eric Wieser (Dec 13 2020 at 13:45):
I thought that it might make the problem simpler
Reid Barton (Dec 13 2020 at 13:46):
I mean why introduce the subgroup in the first place
Reid Barton (Dec 13 2020 at 13:46):
Working with a subset forces you to throw away data, the sl
and sr
Eric Wieser (Dec 13 2020 at 13:47):
I need the subgroup in order to work with it's quotient group
Reid Barton (Dec 13 2020 at 13:47):
Well, if you need it for some reason I would try to replace it by equiv.perm ιa \x equiv.perm ιb
as soon as possible
Reid Barton (Dec 13 2020 at 13:49):
obviously there's no problem in proving that sum_congr
is injective as a function on equiv.perm ιa \x equiv.perm ιb
, so this is just as good as the subgroup
Reid Barton (Dec 13 2020 at 13:49):
but you haven't thrown away the information of sl
and sr
that you're trying to recover in the other thread
Eric Wieser (Dec 13 2020 at 13:50):
But I can't take the quotient group by that product, without passing through sum_congr
first
Reid Barton (Dec 13 2020 at 13:53):
well if the answer to "what do you use X for" is always literally a single Lean term applied to X then this conversation will be rather inefficient
Eric Wieser (Dec 13 2020 at 13:54):
I have a PR pushed showing how I use this subgroup, I think #5279 #5269
Reid Barton (Dec 13 2020 at 13:54):
but what I'm trying to get across is that an object like {σ | ∃ (sl : equiv.perm ιa) (sr : equiv.perm ιb), σ = sl.sum_congr sr}
, while it looks fine for a human because we know that σ
determines sl
and sr
, is actually pretty awkward to deal with in Lean
Eric Wieser (Dec 13 2020 at 13:58):
What I want to use in #5269 is the permutations under an equivalence class that ignores internal permutations within a and b
Eric Wieser (Dec 13 2020 at 13:58):
And the quotient by this awkward-to-deal-with subgroup seemed the easiest way to do that
Reid Barton (Dec 13 2020 at 14:01):
So for example the question which started this thread is trivial and doesn't require writing down a formula for the inverse, because sum_congr
is injective so it's a bijection onto its image
Eric Wieser (Dec 13 2020 at 14:02):
Right, but Kevin's suggestion to construct the cardinality via an equiv suggested I did need the inverse
Reid Barton (Dec 13 2020 at 14:02):
And classically you could conjure up an inverse using choice, so logically it's not necessary to have a formula for the inverse at all
Reid Barton (Dec 13 2020 at 14:03):
Well, you're not required to do everything Kevin suggests
Reid Barton (Dec 13 2020 at 14:03):
Actually you could conjure up an inverse even without choice, since everything is finite and decidable
Eric Wieser (Dec 13 2020 at 14:04):
That's what I'd really like to know how to do
Reid Barton (Dec 13 2020 at 14:10):
Clearly it must be possible to implement this inv_sum_congr
, but it seems easier to just avoid needing it in the first place.
Eric Wieser (Dec 13 2020 at 14:13):
Is there an easy way to convert my subgroup with a fintype instance into the finset that is its carrier? Then I assume I could use some lemmas about finset.card_image or something
Last updated: Dec 20 2023 at 11:08 UTC