Zulip Chat Archive

Stream: general

Topic: making isomorphism class a group


Kenny Lau (Mar 31 2018 at 19:49):

Let's say I have a bunch of groups, and I use quotient to make isomorphism classes. Is there a constructive way to make the isomorphism classes inherit the structure of a group?

Simon Hudon (Mar 31 2018 at 19:55):

I don't know but I'd like to find out. Let's say our groups are specified as:

variables {I : Type} (G : I -> Type) [Π i, group (G i)]

Simon Hudon (Mar 31 2018 at 19:56):

Are we also given the isomorphisms between those groups or to you want to construct them somehow?

Kenny Lau (Mar 31 2018 at 19:57):

I have already constructed the quotient

Simon Hudon (Mar 31 2018 at 19:57):

Can you show it?

Kenny Lau (Mar 31 2018 at 19:58):

import data.set.basic group_theory.subgroup

universe u

namespace group

variables {α : Type u} [group α] (S : set α)

inductive generate : set α
| basic : ∀ x ∈ S, generate x
| one : generate 1
| mul_inv : ∀ x y, generate x → generate y → generate (x * y⁻¹)

namespace generate

def is_subgroup : is_subgroup (generate S) :=
{ one_mem := generate.one S,
  mul_inv_mem := λ x y hx hy, generate.mul_inv x hx y hy }

end generate

variables {β : Type u} [group β]
variables α β

class isomorphism extends α ≃ β :=
( is_group_hom : is_group_hom to_fun )

namespace isomorphism

variables {γ : Type u} [group γ]
variables {β γ}

@[refl] protected def refl : isomorphism α α :=
{ is_group_hom := λ x y, rfl
  .. equiv.refl α }

variables {α β γ}

@[symm] protected def symm (e : isomorphism α β) : isomorphism β α :=
{ is_group_hom := λ x y, calc
          e.inv_fun (x * y)
        = e.inv_fun (e.to_fun (e.inv_fun x) * e.to_fun (e.inv_fun y)) : by rw [e.right_inv, e.right_inv]
    ... = e.inv_fun (e.to_fun (e.inv_fun x * e.inv_fun y)) : by rw e.is_group_hom
    ... = e.inv_fun x * e.inv_fun y : by rw e.left_inv,
  .. equiv.symm e.to_equiv }

@[trans] protected def trans (e₁ : isomorphism α β) (e₂ : isomorphism β γ) : isomorphism α γ :=
{ is_group_hom := λ x y, by unfold equiv.trans; dsimp; rw [e₁.is_group_hom, e₂.is_group_hom],
  .. equiv.trans e₁.to_equiv e₂.to_equiv }

end isomorphism

end group

variable (S : Type u)

namespace free_group

structure to_be_named (G : Type u) [group G] :=
( gen : set G )
( gen_gen : group.generate gen = set.univ )
( func : gen → S )
( inj : function.injective func )

def to_be_named.quotient_rel : setoid Σ G [H : group G], @to_be_named S G H :=
⟨λ G H, nonempty $ @group.isomorphism G.1 G.2.1 H.1 H.2.1,
 λ G, ⟨@group.isomorphism.refl G.1 G.2.1⟩,
 λ G H ⟨e⟩, ⟨@group.isomorphism.symm G.1 G.2.1 H.1 H.2.1 e⟩,
 λ G H K ⟨e₁⟩ ⟨e₂⟩, ⟨@group.isomorphism.trans G.1 G.2.1 H.1 H.2.1 K.1 K.2.1 e₁ e₂⟩⟩

def something : Type (u+1) :=
quotient (to_be_named.quotient_rel S)

noncomputable def rep : something S → Σ G [H : group G], @to_be_named S G H :=
λ G, classical.some (@quotient.exists_rep _ (to_be_named.quotient_rel S) G)

#check λ G, classical.some (@quotient.exists_rep _ (to_be_named.quotient_rel S) G)

structure funny_structure : Type (u+1) :=
( G : something S )
( func : S → (rep S G).1 )
( im_gen : @group.generate _ (rep S G).2.1 (func '' set.univ) = set.univ )

def some_product : Type (u+1) :=
Π A : funny_structure S, (rep S A.G).1

noncomputable instance some_product.group : group (some_product S) :=
{ mul := λ f g x, @has_mul.mul _ (@semigroup.to_has_mul _ (@monoid.to_semigroup _ (@group.to_monoid _ (rep S (x.G)).2.1))) (f x) (g x),
  mul_assoc := λ f g h, funext $ λ x, by apply mul_assoc,
  one := λ x, @has_one.one _ (@monoid.to_has_one _ (@group.to_monoid _ (rep S (x.G)).2.1)),
  one_mul := λ f, funext $ λ x, by apply one_mul,
  mul_one := λ f, funext $ λ x, by apply mul_one,
  inv := λ f x, @has_inv.inv _ (@group.to_has_inv _ (rep S (x.G)).2.1) (f x),
  mul_left_inv := λ f, funext $ λ x, by apply mul_left_inv }

def aux_func : S → some_product S :=
λ x A, A.func x

end free_group

def free_group : Type (u+1) :=
group.generate (free_group.aux_func S '' set.univ)

instance free_group.group : group (free_group S) :=
is_subgroup.group group.generate.is_subgroup

def free_group.from_S : S → free_group S :=
λ x, ⟨free_group.aux_func S x, group.generate.basic _ ⟨x, trivial, rfl⟩⟩

Kenny Lau (Mar 31 2018 at 19:58):

this is WIP so there are errors on the bottom, ignore those

Kenny Lau (Mar 31 2018 at 19:58):

the quotient is appropriately named something

Simon Hudon (Mar 31 2018 at 20:11):

So you'd like to remove noncomputable from your group instance?

Kenny Lau (Mar 31 2018 at 20:14):

right

Kevin Buzzard (Mar 31 2018 at 20:14):

You had to prove that the composite of group homs is a group hom?? That's not there already?

Kenny Lau (Mar 31 2018 at 20:14):

you'll be surprised

Simon Hudon (Mar 31 2018 at 20:22):

Instead of classical.some and quotient.exists_rep in rep, can you try and use quotient.lift?

Kenny Lau (Mar 31 2018 at 20:22):

to where?

Simon Hudon (Mar 31 2018 at 20:25):

Not sure yet

Simon Hudon (Mar 31 2018 at 20:28):

You're basically taking the value of a quotient type and sticking it in a sigma type. Because the sigma type is in Type u depending on which representative you extract, you will be able to tell members of the quotient sets apart.

Simon Hudon (Mar 31 2018 at 20:29):

There are two possibilities I can see to stay constructive: instead of using a sigma type, use an existential quantification (not sure if that's workable with the group) or extract something other than the element of one of the group. A representative value that will be the same for every element of a given equivalence class

Simon Hudon (Mar 31 2018 at 20:31):

Or maybe Mario's trunc contraption can make the sigma type into something that isn't data

Kenny Lau (Mar 31 2018 at 21:52):

@Simon Hudon do we even need the quotient?

Simon Hudon (Mar 31 2018 at 21:56):

I think you're right, you don't need it, at least not there

Kenny Lau (Mar 31 2018 at 21:56):

I think the reason the author introduced it is because of some foundational issues with ZFC

Kenny Lau (Mar 31 2018 at 21:57):

the paper is here for reference https://www3.nd.edu/~andyp/notes/CategoricalFree.pdf

Kenny Lau (Mar 31 2018 at 23:05):

@Kevin Buzzard this can be viewed in two ways

Kenny Lau (Mar 31 2018 at 23:05):

you will view it as "another reason why ZFC is stupid"

Kenny Lau (Mar 31 2018 at 23:07):

I will view it as "another reason why Lean is stupid"

Simon Hudon (Mar 31 2018 at 23:07):

I'm wondering if you even need the sigma type

Kenny Lau (Mar 31 2018 at 23:08):

I did it without any quotient

Kenny Lau (Mar 31 2018 at 23:08):

and without injectivity

Kenny Lau (Mar 31 2018 at 23:08):

the only reason why the paper introduced those is to justify it in ZFC

Simon Hudon (Mar 31 2018 at 23:08):

And sigma type?

Kenny Lau (Mar 31 2018 at 23:08):

well the sigma type has UMP as pi type right

Kenny Lau (Mar 31 2018 at 23:08):

that means, (Sigma x1 x2) -> x3 is the same as x1 -> x2 -> x3

Kenny Lau (Mar 31 2018 at 23:09):

since they're there, the sigma doesn't need to be there anymore

Kenny Lau (Mar 31 2018 at 23:09):

am I speaking English

Kenny Lau (Mar 31 2018 at 23:09):

that thing there with that sigma is no longer used

Kenny Lau (Mar 31 2018 at 23:09):

I can't English

Simon Hudon (Mar 31 2018 at 23:09):

What's UMP?

Kenny Lau (Mar 31 2018 at 23:09):

universal mapping property

Kenny Lau (Mar 31 2018 at 23:10):

or in CS language, "destructor" / "eliminator"

Simon Hudon (Mar 31 2018 at 23:10):

Ah I see

Simon Hudon (Mar 31 2018 at 23:10):

So why is it that not needing a quotient type makes Lean stupid?

Kenny Lau (Mar 31 2018 at 23:11):

well if I need to explain I would have to bring another concept from math philosophy into here :P

Kenny Lau (Mar 31 2018 at 23:11):

called predicativity

Simon Hudon (Mar 31 2018 at 23:12):

Cool, I'm all ears

Kenny Lau (Mar 31 2018 at 23:12):

inductive types are predicative

Kenny Lau (Mar 31 2018 at 23:12):

they're philosophically well-founded

Kenny Lau (Mar 31 2018 at 23:12):

bigger things are built on top of smaller things

Kenny Lau (Mar 31 2018 at 23:13):

like "canonical", this word can't be properly defined, but a common criterion is whether the quantifiers quantify over the object to be constructed

Kenny Lau (Mar 31 2018 at 23:13):

e.g. in ZFC, omega is constructed to be the intersection of every inductive set

Kenny Lau (Mar 31 2018 at 23:14):

instead of building it from below, omega is constructed from above, which makes it philosophically not well-founded, and we call that impredicative

Kenny Lau (Mar 31 2018 at 23:14):

in ZFC, omega := {x | x in A for every inductive A}

Kenny Lau (Mar 31 2018 at 23:14):

but the "for every" quantifier there, quantifiers over omega itself

Kenny Lau (Mar 31 2018 at 23:15):

now, the free group construction in the paper is equally impredicative

Kenny Lau (Mar 31 2018 at 23:15):

in the sense that it takes the product of every possible group and then find the subgroup generated by the image of S

Kenny Lau (Mar 31 2018 at 23:16):

but that product would have to already include that group to be constructed

Kenny Lau (Mar 31 2018 at 23:16):

ZFC is an impredicative theory

Kenny Lau (Mar 31 2018 at 23:16):

but that's unavoidable, because we want a strong foundation theory to do maths

Kenny Lau (Mar 31 2018 at 23:17):

the common construction of free group is predicative

Kenny Lau (Mar 31 2018 at 23:17):

because it builds on smaller things, i.e. individual words

Kenny Lau (Mar 31 2018 at 23:19):

in ZFC, i.e. in the paper, the author constructed the free product by considering every group generated by a set that injects into S

Kenny Lau (Mar 31 2018 at 23:19):

there's still a limitation on the size

Kenny Lau (Mar 31 2018 at 23:19):

in Lean, i.e. in my file, I don't even need to care about the size, since Lean allows it

Kenny Lau (Mar 31 2018 at 23:20):

https://github.com/kckennylau/Lean/blob/master/free_group.lean

Simon Hudon (Mar 31 2018 at 23:21):

Why is that a problem?

Kenny Lau (Mar 31 2018 at 23:21):

it's not very well-founded is it

Simon Hudon (Mar 31 2018 at 23:25):

Isn't the "big things built from smaller things" idea supported by the hierarchy of universes?

Kenny Lau (Mar 31 2018 at 23:26):

well but one universe is already big enough

Kenny Lau (Mar 31 2018 at 23:27):

philosophy aside, this construction is quite funny

Kenny Lau (Mar 31 2018 at 23:28):

what do you think of my file? is it mathematically correct? should I PR it?

Kenny Lau (Mar 31 2018 at 23:29):

I wonder why this construction isn't more well-known

Simon Hudon (Mar 31 2018 at 23:31):

I don't think I can make a judgement about your construction. Mario and Kevin probably should be the ones to comment

Kenny Lau (Mar 31 2018 at 23:31):

ok

Simon Hudon (Mar 31 2018 at 23:31):

Or Johannes

Simon Hudon (Mar 31 2018 at 23:31):

It looks like a cool construction :)

Kenny Lau (Mar 31 2018 at 23:41):

@Simon Hudon https://github.com/kckennylau/Lean/commit/c6eac863b23d58d40deaab62489f6069f860407e#diff-fdee7d198ee1f7316cba5649313e084a

Kenny Lau (Mar 31 2018 at 23:41):

rip universe limitation

Kenny Lau (Mar 31 2018 at 23:41):

now it can be in any universe

Simon Hudon (Mar 31 2018 at 23:42):

Yeah, that's universe polymorphism for you ;-)

Kenny Lau (Mar 31 2018 at 23:43):

I wonder if free_group.{u v} S and free_group.{u w} S are different

Kenny Lau (Mar 31 2018 at 23:46):

@Simon Hudon this is such a convenient construction

Kenny Lau (Mar 31 2018 at 23:46):

basically constructing an object from its UMP

Kenny Lau (Mar 31 2018 at 23:46):

I can probably construct the abelianization this way also

Simon Hudon (Mar 31 2018 at 23:48):

That looks like the free objects I've worked with before. I remember being blown away by how cool they are :D

Kenny Lau (Mar 31 2018 at 23:48):

you've seen this construction before?

Simon Hudon (Mar 31 2018 at 23:49):

I've seen it in free monads mostly

Kenny Lau (Mar 31 2018 at 23:50):

do you have any idea how I can fix the file to remove the need for manual typeclassing?

Kenny Lau (Mar 31 2018 at 23:50):

group to monoid, monoid to semigroup, semigroup to has_mul...

Simon Hudon (Mar 31 2018 at 23:52):

What happens when you replace it with an underscore?

Kenny Lau (Mar 31 2018 at 23:52):

can't synthesize that thing

Simon Hudon (Mar 31 2018 at 23:54):

Right but what instances are in your context?

Kenny Lau (Mar 31 2018 at 23:54):

the thing is that the instances aren't declared to the left of the colon

Kenny Lau (Mar 31 2018 at 23:54):

rather, they're introduced as variables

Kenny Lau (Mar 31 2018 at 23:55):

because of how I defined ambient

Simon Hudon (Mar 31 2018 at 23:56):

Right, so you can write:

λ x y G HG f, by resetI ; exact @has_mul.mul _ _ ...

Kenny Lau (Mar 31 2018 at 23:56):

I thought definitions shouldn't have any tactics

Kenny Lau (Mar 31 2018 at 23:57):

because they're difficult to destruct

Simon Hudon (Mar 31 2018 at 23:58):

This tactic won't create a complicated term. But it's also useful to just try it and see if it works. Otherwise, you can also use a separate def

Kenny Lau (Mar 31 2018 at 23:58):

hmm...

Kenny Lau (Apr 01 2018 at 00:03):

free functors on steroids

Kenny Lau (Apr 01 2018 at 00:15):

https://github.com/kckennylau/Lean/blob/master/abelianization.lean

Kenny Lau (Apr 01 2018 at 00:15):

comes with commutators for free!

Mario Carneiro (Apr 01 2018 at 01:13):

I'm familiar with this construction, which is sometimes used as an application of category theory: use the adjoint functor theorem to construct free groups. When you unwind the category theory it's exactly this construction: taking a suitable quotient over all groups

Mario Carneiro (Apr 01 2018 at 01:15):

The universe issues that arise in ZFC also arise in lean, because they are valid concerns and can cause inconsistency if they are not attended to. In lean this expresses as a bumping up of the universe level of the constructed free group

Mario Carneiro (Apr 01 2018 at 01:16):

To prove that the universe doesn't need to increase, you need a size limitation which amounts to doing the standard (internal) free group construction anyway. This is why I'm not a big fan of this approach - it's just shuffling proof obligations around

Mario Carneiro (Apr 01 2018 at 01:20):

When you write the UMP predicatively, it ends up weaker than people want (and use), because the free group you've constructed lives in max u (v+1) but is only universal wrt groups in Type v, which is strictly lower. In particular, the free group UMP doesn't apply to itself, which we want to be true for it to really be a free group. Otherwise it's only an approximation - if you try proving equivalence to the standard internal definition you will get stuck

Mario Carneiro (Apr 01 2018 at 01:57):

Re: making the isomorphism class a group, it is impossible to do this computably for some reasonable definitions of the problem. Suppose we want to take a quotient of all groups (in some universe) with respect to isomorphism. First of all, note that a quotient is with respect to a relation, meaning a Prop, meaning data about the isomorphism itself will be lost. We can define such a quotient, let's call it Q. Now each element q : Q somehow "represents" a group unique up to isomorphism, but I claim that there is no computable function rep : Q -> Group such that G ~= rep (mk G) for all groups G.

Now one way to define such a function is by applying choice as you've done to just pick one of the groups in the class, but maybe you thought there might be a way of using all the groups at once to form a new group which is isomorphic to each of the groups in the equivalence class. Supposing this is possible, and supposing also that you computably have the isomorphism f G : G ~= rep (mk G), i.e. that's not just an existence statement, then you have choice for group isomorphisms, since if nonempty (G ~= H) then mk G = mk H and hence you can construct G ~= rep (mk G) = rep (mk H) ~= H.

To turn this into at least unique choice, we can construct a group H which is isomorphic to G = C_2 iff α is nonempty. For example, H := Σ g : G, g ≠ 0 → trunc α will do the trick. Then given an isomorphism f : G ~= H, we have f 1 : psum (trunc α) (1 = 0) from which we obtain an element of trunc α. This is not as strong as full choice, but it is known unprovable in lean.

Kenny Lau (Apr 01 2018 at 04:19):

@Mario Carneiro so what should I do? I'm confused, you keep saying it's unprovable but you're giving an algorithm

Mario Carneiro (Apr 01 2018 at 04:20):

I'm showing that if you could construct it you could prove something that is known unprovable

Mario Carneiro (Apr 01 2018 at 04:20):

thus it's not computable

Kenny Lau (Apr 01 2018 at 04:21):

ok, then what should I do?

Mario Carneiro (Apr 01 2018 at 04:21):

Live with the fact that going from an isomorphism class to a specific group is nonconstructive?

Kenny Lau (Apr 01 2018 at 04:22):

oh well, but I didn't use isomorphism class in the end

Mario Carneiro (Apr 01 2018 at 04:23):

maybe you can phrase it independently of the choice then?

Kenny Lau (Apr 01 2018 at 04:23):

phrase what?

Mario Carneiro (Apr 01 2018 at 04:23):

your theorem, whatever it is

Kenny Lau (Apr 01 2018 at 04:23):

that free group exists?

Mario Carneiro (Apr 01 2018 at 04:24):

I'm not sure what you are trying to do now...

Kenny Lau (Apr 01 2018 at 04:24):

I realized that using isomorphism class is because of some stupid limitation of ZFC

Mario Carneiro (Apr 01 2018 at 04:24):

it's a limitation of lean too, I say

Kenny Lau (Apr 01 2018 at 04:24):

I just stopped using it

Kenny Lau (Apr 01 2018 at 04:24):

and then I constructed the free group and proved its property

Mario Carneiro (Apr 01 2018 at 04:24):

did you though?

Mario Carneiro (Apr 01 2018 at 04:24):

watch your universe levels

Mario Carneiro (Apr 01 2018 at 04:25):

I'm claiming you didn't construct the real free group

Kenny Lau (Apr 01 2018 at 04:25):

I'm starting to suspect so

Mario Carneiro (Apr 01 2018 at 04:26):

Have you ever heard of system F encodings or church encodings?

Kenny Lau (Apr 01 2018 at 04:27):

I've heard of church encodings, if you're referring to the numbers

Mario Carneiro (Apr 01 2018 at 04:28):

I'm talking about the types. Something like this:

def unit := ∀ X : Type, X → X
def nat := ∀ X : Type, X → (X → X) → X
def prod (α β) := ∀ X : Type, (α → β → X) → X

Kenny Lau (Apr 01 2018 at 04:29):

oh

Kenny Lau (Apr 01 2018 at 04:29):

I get it, go on

Mario Carneiro (Apr 01 2018 at 04:30):

This sort of thing works great in system F, where there is only one impredicative data type Type, because then unit : Type etc and this has the expected universal property

Mario Carneiro (Apr 01 2018 at 04:30):

But in lean, it's not as strong as you want because the elimination property only goes to Type 0 in this case while the constructed type lives in Type 1

Mario Carneiro (Apr 01 2018 at 04:31):

Note that real eliminators such as are generated by inductive eliminate to Sort u where u is independent of the universes involved in the definition of the inductive type itself

Mario Carneiro (Apr 01 2018 at 04:32):

This allows creation of type families over the inductive type in very large universes

Kenny Lau (Apr 01 2018 at 04:32):

fair enough

Mario Carneiro (Apr 01 2018 at 04:33):

There is a curious property about these weak eliminators, though: If there exists a real type with the right eliminator, then you can prove that the weak type and the strong type are isomorphic, so the weak type inherits the strong eliminator

Kenny Lau (Apr 01 2018 at 04:33):

hence what you mean by moving proof obligations around

Mario Carneiro (Apr 01 2018 at 04:33):

That means that your free group construction is correct if there is a free group

Kenny Lau (Apr 01 2018 at 04:33):

and here am I thinking that it's a brand new construction that nobody knows :P

Mario Carneiro (Apr 01 2018 at 04:34):

The size limitation thing is really important but manifests in weird ways in ZFC and lean

Mario Carneiro (Apr 01 2018 at 04:36):

I think it's also related to the "B" in BNF, bounded natural functors used in isabelle for generating arbitrary (co)inductive types

Mario Carneiro (Apr 01 2018 at 04:36):

which literally have an axiom on limitation of size, to prevent universe issues

Kenny Lau (Apr 01 2018 at 04:37):

:b_button:ounded :b_button:atural :b_button:unctors

Mario Carneiro (Apr 01 2018 at 04:38):

now I need to make a "bounded natural blunders" joke

Kenny Lau (Apr 01 2018 at 04:45):

I'm thoroughly confused now

Kevin Buzzard (Apr 01 2018 at 16:26):

Well that's really annoying. I thought that type theory was getting around these silly ZFC universe problems

Kevin Buzzard (Apr 01 2018 at 16:27):

but it's just moving them to Lean universe problems

Kenny Lau (Apr 01 2018 at 16:27):

same thought here

Kevin Buzzard (Apr 01 2018 at 16:27):

Why do you care about isomorphic groups?

Kevin Buzzard (Apr 01 2018 at 16:27):

Why not just work with all groups?

Kenny Lau (Apr 01 2018 at 16:27):

right, I worked with all groups at the end

Kenny Lau (Apr 01 2018 at 16:27):

I was following the paper, which used isomorphic groups

Kenny Lau (Apr 01 2018 at 16:28):

my conjecture is that the author used isomorphism classes to make it justified in ZFC

Kevin Buzzard (Apr 01 2018 at 16:28):

Similarly you don't need to work with "generated by a subset of S"

Kenny Lau (Apr 01 2018 at 16:28):

which i take to be a really shitty thing to do

Kevin Buzzard (Apr 01 2018 at 16:28):

That just seemed to be a red herring

Kenny Lau (Apr 01 2018 at 16:28):

right

Kenny Lau (Apr 01 2018 at 16:28):

I didn't use that in my construction

Kenny Lau (Apr 01 2018 at 16:28):

but then it still depends on the universe

Kenny Lau (Apr 01 2018 at 16:28):

since you're quantifying over every group anyway

Kenny Lau (Apr 01 2018 at 16:30):

that's the thing with impredicative constructions

Kevin Buzzard (Apr 01 2018 at 16:30):

you can send the other elements of SS to the identity

Kevin Buzzard (Apr 01 2018 at 16:30):

Oh I broke zulip

Kevin Buzzard (Apr 01 2018 at 16:30):

I can't edit $S$ into SS

Kenny Lau (Apr 01 2018 at 16:33):

you see, in ZFC this is the way you would do it:

Kenny Lau (Apr 01 2018 at 16:33):

firstly you consider only the isomorphism classes

Kevin Buzzard (Apr 01 2018 at 16:33):

Bingo, I had to reload the page.

Kenny Lau (Apr 01 2018 at 16:33):

and you only consider the groups generated by a subset of S

Kenny Lau (Apr 01 2018 at 16:33):

because in some sense you can build it from S

Kevin Buzzard (Apr 01 2018 at 16:34):

I don't see where the subset comes in

Kevin Buzzard (Apr 01 2018 at 16:34):

but I do see where the isomorphism classes come in

Kenny Lau (Apr 01 2018 at 16:34):

well

Kenny Lau (Apr 01 2018 at 16:34):

they are both limitations on the size of the set

Kenny Lau (Apr 01 2018 at 16:35):

after these two restrictions, you can justify the existence of the set by building it from a large enough set that you still build from S

Kevin Buzzard (Apr 01 2018 at 16:35):

I don't see where they're needed in the ZFC proof.

Kenny Lau (Apr 01 2018 at 16:35):

if you don't limit the size of the generator, your set is still too big

Kevin Buzzard (Apr 01 2018 at 16:35):

I want my generator to have size S

Kevin Buzzard (Apr 01 2018 at 16:35):

exactly

Kenny Lau (Apr 01 2018 at 16:36):

ah

Kenny Lau (Apr 01 2018 at 16:36):

hmm

Kenny Lau (Apr 01 2018 at 16:36):

that's what you meant

Kenny Lau (Apr 01 2018 at 16:36):

I suppose it's ok then

Kevin Buzzard (Apr 01 2018 at 16:36):

So in ZFC I start with S and then I choose some cardinal kappa such that in V_kappa there is a copy of every group generated by S

Kevin Buzzard (Apr 01 2018 at 16:37):

Lean is better because in Lean I don't think you even need that S generates G

Kevin Buzzard (Apr 01 2018 at 16:37):

But as Mario points out, your answer is in the wrong universe.

Kenny Lau (Apr 01 2018 at 16:39):

I think you do need that S generates G if you don't want to run into universe problems

Kevin Buzzard (Apr 01 2018 at 16:43):

In ZFC you do, but I don't see where you need it in Lean.

Kevin Buzzard (Apr 01 2018 at 16:44):

You just put a group structure on the product of G over all pairs (G,f:S -> G)

Kevin Buzzard (Apr 01 2018 at 16:45):

and give this a map from S

Kevin Buzzard (Apr 01 2018 at 16:45):

and then take the intersection over all the subgroups containing the image of S

Kevin Buzzard (Apr 01 2018 at 16:46):

This should definitely be in #maths


Last updated: Dec 20 2023 at 11:08 UTC