Zulip Chat Archive

Stream: maths

Topic: defining ideals


Johan Commelin (Feb 21 2019 at 08:32):

I've got a definition valuation.supp v : ideal R (and a proof that it is a prime ideal). There is also Spv R which is defined as

definition Spv := {ineq : R  R  Prop //  (v : Valuation R),  r s : R, v r  v s  ineq r s}

Now I can define Spv.supp ineq : ideal R as having carrier := {r | r ≤[v] 0}. I would then like to conclude that this is an ideal (and even prime) by saying that this is the same carrier as that of valuation.supp v where v is any valuation that I can choose out of the ∃ (v : ....) in the definition of Spv.

I think we currently don't really have an interface for this, is that right? So the cheapest way is to just reprove the properties zero, add, and smul. Or is there something I missed?

Mario Carneiro (Feb 21 2019 at 08:34):

IIRC, the reason Spv looks like that is to build a quotient over something that's hard to quotient

Mario Carneiro (Feb 21 2019 at 08:35):

so it should have the lemmas of a quotient, in this case quotient.ind

Mario Carneiro (Feb 21 2019 at 08:41):

Oh wait, you are defining a function Spv -> ideal R. That's a quotient lift

Mario Carneiro (Feb 21 2019 at 08:43):

You lift the function valuation.supp : valuation R -> ideal R, and prove that two valuations give the same ideal using ideal.ext

Johan Commelin (Feb 21 2019 at 08:46):

Yes, but I need supp before I can define the "canonical" lift.

Johan Commelin (Feb 21 2019 at 08:47):

In general, I think it makes sense that there is some sort of buddy to ideal.ext that allows you to prove that a set is an ideal if it is the same as the carrier of an existing ideal.

Mario Carneiro (Feb 21 2019 at 08:48):

One way you can construct this ideal is by taking the intersection of all ideals for various choices of v

Mario Carneiro (Feb 21 2019 at 08:48):

Or you can use span

Mario Carneiro (Feb 21 2019 at 08:50):

prove that a set is an ideal if it is the same as the carrier of an existing ideal

You don't "prove that a set is an ideal". You construct an ideal with the same carrier as the set. But if you do that, then you will notice that the new ideal is equal to the ideal you started with, so it was a pointless endeavor, unless you care about defeq

Kevin Buzzard (Feb 21 2019 at 09:04):

Johan, my thoughts on this are that we need to make a completely new file valuation_class.lean containing the API for an equivalence class of valuations, and writing all of the definitions for quotients for this class, and I know how to do this. We should do all of this first before even thinking about Spv. I would do it but I'm travelling right now, I'm preaching the gospel in Portugal at an undergraduate computer science conference.

Kevin Buzzard (Feb 21 2019 at 09:05):

But this new definition and its API are the next thing to do in the perfectoid project

Kevin Buzzard (Feb 21 2019 at 09:10):

Look at finset.lean. This is a weird definition, at first glance. No user ever wants to prove anything about finsets by starting with the line unfold finset -- it would be a disaster. You just use all the definitions in the 1700 line API and never even think about how a finset is actually implemented internally. We have to do just the same thing with equivalence classes of valuations first before we can get anywhere. Our internal implementation is as an inequality but we have to make it so that the user never has to think about this or even know this. Then we'll be ready for Spv

Johan Commelin (Feb 21 2019 at 09:52):

@Kevin Buzzard Yes, I agree. I'm slowly moving towards that goal.

Kevin Buzzard (Feb 21 2019 at 09:57):

So I think the answer to your question is that we need to write the analogues of quotient.lift and quotient.out etc etc and then use these general tools to define the functions you want. At least I think that's the answer

Johan Commelin (Feb 21 2019 at 09:58):

Ok, so one question: what is the definition of valuation_class? Is it an honest Lean quotient (with the disadvantage that it lives an a universe that is to big). And then afterwards, we build an equiv with Spv that lives in the right universe but is a fake quotient.

Johan Commelin (Feb 21 2019 at 09:58):

Or do you have something else in mind?

Kevin Buzzard (Feb 21 2019 at 10:00):

The definition is that it's an inequality coming from a valuation

Kevin Buzzard (Feb 21 2019 at 10:00):

But the point is that the user never finds that out

Kevin Buzzard (Feb 21 2019 at 10:01):

And by "the user" I mean "the person writing Spv.lean"

Kevin Buzzard (Feb 21 2019 at 10:01):

I'm talking about the definition of a valuation class

Kevin Buzzard (Feb 21 2019 at 10:02):

val_class or wherever we want to call it

Kevin Buzzard (Feb 21 2019 at 10:02):

We don't use quotients at all

Johan Commelin (Feb 21 2019 at 10:03):

Ok, I'm confused. I know you are busy. But could you give me about 4 lines of Lean code.
The definition of val_class R, and the definition of Spv R.

Kevin Buzzard (Feb 21 2019 at 10:03):

But we write all the API for quotients ourselves

Kevin Buzzard (Feb 21 2019 at 10:03):

I'm on a phone

Kevin Buzzard (Feb 21 2019 at 10:03):

But I'll try

Kevin Buzzard (Feb 21 2019 at 10:06):

A term of type valclass R is a relation ineq plus a proof that there exists a valuation taking values in a group in the same universe as R such that blah

Kevin Buzzard (Feb 21 2019 at 10:06):

The mk function takes a valuation taking values in any universe and gives a term of type valclass

Johan Commelin (Feb 21 2019 at 10:06):

Sure

Kevin Buzzard (Feb 21 2019 at 10:07):

Because we want the user to not know what's going on

Johan Commelin (Feb 21 2019 at 10:07):

And what is Spv R? (Because currently it has exactly the definition you just gave.)

Kevin Buzzard (Feb 21 2019 at 10:09):

Oh so it is.

Kevin Buzzard (Feb 21 2019 at 10:09):

Bit it has more structure

Kevin Buzzard (Feb 21 2019 at 10:09):

It has a topology etc

Kevin Buzzard (Feb 21 2019 at 10:10):

So it might be a different thing

Johan Commelin (Feb 21 2019 at 10:11):

Yeah, but we can bolt on the topology afterwards... that's just a type class instance

Kevin Buzzard (Feb 21 2019 at 15:07):

Is that the right way to think about it? I'm not sure

Kevin Buzzard (Feb 21 2019 at 15:14):

I guess I was envisaging defining Spv R to be the type of equivalence classes of valuations on R, and putting the topology on Spv R. Maybe that's insane? I don't know. We have option X and with_zero X right?

Kevin Buzzard (Feb 21 2019 at 15:17):

If you want to make Spv the inequalities (which is what we have now) then you will want to look at all the functions with prefix quot and make versions of them all in the Spv namespace. Then you'll have an answer to the ideal question

Kevin Buzzard (Feb 21 2019 at 15:18):

But I was envisaging making them all part of the val_class namespace and then building Spv with its topology on top


Last updated: Dec 20 2023 at 11:08 UTC