Skip to the Main Content

Note:These pages make extensive use of the latest XHTML and CSS Standards. They ought to look great in any standards-compliant modern browser. Unfortunately, they will probably look horrible in older browsers, like Netscape 4.x and IE 4.x. Moreover, many posts use MathML, which is, currently only supported in Mozilla. My best suggestion (and you will thank me when surfing an ever-increasing number of sites on the web which have been crafted to use the new standards) is to upgrade to the latest version of your browser. If that's not possible, consider moving to the Standards-compliant and open-source Mozilla browser.

March 31, 2008

Limits and Push-Forward

Posted by Urs Schreiber

The limit and colimit of a functor can be understood as the “push-forward of the functor to a point”: the image of the functor under the right or left adjoint functor of the pullback of functors from the terminal category {pt}.

Is there a useful generalization of this correspondence between limits and push-forward for the case of indexed limits?

Here is supposed to be a diagram illustrating the relation between limits and push-forward to a point.

I am concerned with push-forward of (n-)functors along projections onto a factor of a cartesian product p:hom(Σ,X)×ΣΣ. In a cartesian closed context, I should be able to use the hom-adjunction to reduce this to a push-forward to the point, i.e. just to a limit.

But I keep wondering if and how indexed limits, ends and coends should make an appearance here.

Posted at March 31, 2008 8:43 PM UTC

TrackBack URL for this Entry:   http://golem.ph.utexas.edu/cgi-bin/MT-3.0/dxy-tb.fcgi/1647

23 Comments & 0 Trackbacks

Re: Limits and Push-Forward

Isn’t that similar to zeta function regularization method? Every push forwared would be equivalent to a term of a Dirichlet series.

Posted by: Daniel de França MTd2 on April 1, 2008 12:51 AM | Permalink | Reply to this

Re: Limits and Push-Forward

`Push forward of functors’ being Kan extension…

Posted by: David Roberts on April 1, 2008 1:29 AM | Permalink | Reply to this

Re: Limits and Push-Forward

Yes, sure. But when I saw Figure 1 above,I thought of using the Rosetta stone idea, and then I asked myself what kind of Physics Process and System is that related to?

I saw limits, something ordered and infinite, aestheticaly appealing to me like a sum, weight integrals. All of this with a an ordered converging sum, related to 2 extreme terms in different places(q and Lim_a F) . I don’t know if that makes sense at all.

Could someone give us a Rosetta equivalence in physics, using figure 1? Sorry, but I was just curious… :(

Posted by: Daniel de França MTd2 on April 1, 2008 1:27 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Daniel wrote:

Isn’t that similar to zeta function regularization method?

[…]

I saw limits, something ordered and infinite, aestheticaly appealing to me like a sum, weight integrals.

It’ll be a long way (if any at all) from here to QFT path integral regulization – but, indeed, when nobody listens, I admit that this is the long-term aim:

a proposal for a formalization of Freed’s observation that the “path integral” in quantum physics should be just the top-dimension version of a general procedure of taking sections aka pushing forward to a point is this:

Set V=(ωCat, Gray). Then

target space is a V-category X

parameter space is a V-category Σ

the background field is a V-functor :Xphas.

Quantization of that (Freed’s extended path integral interpretation, which unifies and extends the concepts of “forming the space of states by taking sections” and “forming the propagation operator by means of the path sum”) is supposed to be the result of

- first forming the transgression

ev *:hom(Σ,X)×ΣevXphas

of the background field to configuration space hom(Σ,X)

- and then integrating over all “paths”, i.e. all objects in hom(Σ,X) by pushing forward along the projection hom(Σ,X)×ΣΣ.

This yields (if it exists) another V-functor hom(Σ,X)ev *:Σphas and this is suppose to:

- assign to objects in Σ the space of states of the theory

- assign to 1-morphisms the “propagator” along that 1-morphism between these spaces of states

and so on. Think of Σ as points and paths on the real line to get the quantum mechanical intuition.

There are various toy example consistency checks showing that this formalization does reproduce what one wants to see:

the ordinary space of states of a quantum particle is easily reproduced this way #.

More remarkably, the path integrals for finite group Chern-Simons theory # (known as Dijkgraaf-Witten theory) as well as # for finite 2-group Chern-Simons theory (known as the Yetter model) are reproduced this way.

This is the evidence that convinced me that the categorical push-forwad should indeed be the right abstract way to think about the path integral: if Chern-Simons comes out right, then we are bound to obtain its boundary CFT, too, and that’s all one can ask for.

I looked at more consistency checks of simple kind ## which seem to further support this, though at times the arguments are less than waterproof, in part due to some fuzziness on the technical details of the setup one should look at.

Therefore currently I am trying to approach the problem from two sides:

abstractnonsenseformalizeproblemproblemworkoutexamplesconcreteapplications

hoping to converge in the middle.

As you will have noticed, most of the toy examples I looked at involve finite categories. That’s how toy examples go. Ultiumately we dream about being able to handle real-world setups as they appear in cutting-edge physics. While I have close to no real results on this at the moment, I do have one curious observation:

the problems and their possible solutions that one faces when computing colimits (or “category cardinality”) for non-finite categories are exactly (see also this) of the same kind of flavor as those of renormalization in QFT #.

While that does not prove anything at this point, it is somewhat suggestive.

Posted by: Urs Schreiber on April 1, 2008 3:19 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Sorry, I mean, Figure 1, the triangle at the low left side.

Posted by: Daniel de França MTd2 on April 1, 2008 1:30 PM | Permalink | Reply to this

Re: Limits and Push-Forward

There is certainly a neat little story connecting this construction with (co)ends and indexed/weighted (co)limits.

I’ll talk about colimits; of course you can dualise everything if you care about limits instead. As David Roberts just mentioned, what you’re saying is that the colimit of your F is the left Kan extension of F along the functor p:A{pt}.

If we take B to be (sufficiently) cocomplete, we can use the coend formula for left Kan extension: in general, the left Kan extension of F:AB along K:AX is

(1)(Lan KF)(X)= AAX(KA,X)FA

Now, the weighted colimit of F:AB with weight W:A opSet is

(2)WF= AAWAFA.

So for each object XX, the object (Lan KF)(X)B is the weighted colimit

(3)(Lan KF)(X)=X(K,X)F.

Thus in some sense the left Kan extension is a special case of the general notion of weighted colimit (and dually the right Kan extension is a special case of weighted limit).

Posted by: Robin Houston on April 1, 2008 12:18 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Thanks David and Robin!

I am feeling somewhat stupid for not having realized this relation to coends (and not remembered it from the standard textbooks) – but better late than never.

I was reading Kelly’s book yesterday (without making it to page 64 – obviously :-/ – but still need to acquaint myself better with coends.

Here is a toy example that I should sit down and apply the coend formulation of the push-forward to:

Take the enrichment category to be the 1-category of categories, V=Cat so that a V-category is a strict 2-category.

Let X be the 2-category

X={xyx} (so that happens to be just a 1-category).

Let phas be the 2-category phas:=BFinSet i.e the one-object 2-category whose Hom-category is FinSet and where composition is the cartesian product on sets.

Let Σ be just the interval Σ:={ab}.

Let F:Xphas be a V-functor (i.e. strict 2-functor) and write ev *F:hom(Σ,X)×ΣevXFphas.

I am after the pushforward of ev *F down to Σ along the canonical projection hom(Σ,X)×ΣΣ and its expression in terms of (co)ends.

Such will be the kind of exercise for my train ride tonight.

Posted by: Urs Schreiber on April 1, 2008 1:43 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Quick question: when you say “push-forward”, does that mean the same as “right Kan extension”?

Posted by: Robin on April 1, 2008 1:51 PM | Permalink | Reply to this

Re: Limits and Push-Forward

when you say “push-forward”, does that mean the same as “right Kan extension”?

Right, I should have been more precise. I was being vague about this since I used to be looking at a context where limits and colimits coincided.

But what I really need is colimits.

Posted by: Urs Schreiber on April 1, 2008 2:00 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Okay, left Kan extension then?

The general answer doesn’t depend on the precise choices for Σ and X; it’s the functor that takes sΣ to the colimit, over f[Σ,X], of F(fs). We might write it as

(1) f:ΣXF(f).

For your choices of X and Σ, the category of functors ΣX has a terminal object (the constant functor at y), so the whole thing is just the constant functor at F(y).

Posted by: Robin on April 1, 2008 2:27 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Robin,

thanks a whole lot! I have to run now, but will think about what you just said.

I need to play around with some variations of that simple example. Notably what happens when we use for X instead something like X={xyx} (is that as easy to see??).

I tried to strip down the example to make it more tractable, but in a more elaborate version I had something like phas=SetMod and took F to assign the Set-module Set to each object and right multiplication by a set to each morphism. Setting phas=BSet above was supposed to capture that restriction, but maybe that trivialized the example too much.

Thanks again for all your feedback! I’ll have to jump on a train now, but with Kelly’s book in my pocket. Hope to get back to you in a state of less naïvety afterwards…

Posted by: Urs Schreiber on April 1, 2008 3:38 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Nothing I said depends on what you take phas to be: it turns out trivial just because X has a terminal object.

Posted by: Robin on April 1, 2008 3:58 PM | Permalink | Reply to this

Re: Limits and Push-Forward

just because X has a terminal object.

Right, actually I gave the wrong X, I should be looking at

X={xyx}

as in the discussion here.

The Leinster measures of categories of this and its iterated forms

.

reproduces the weighting appearing in the exponentiated lattice Laplace operator. But in those previous discussions I did not properly compute the Kan extension we are atalking about now, but instead looked at the pul-push of certain sections through certain diagrams

.

I am thinking it should amount to the same thing, though, but am getting a bit confused about this. Therefore my questions here.

I still need to unconfuse myself further…

Posted by: Urs Schreiber on April 2, 2008 6:19 AM | Permalink | Reply to this

Re: Limits and Push-Forward

By the way, what is the minimal condition on a category such that limits and colimits, if both exist, coincide, as for FinVect? Is there a nice simple characterization?

Is it existence of a 0-object?

Posted by: Urs Schreiber on April 5, 2008 11:56 AM | Permalink | Reply to this

Re: Limits and Push-Forward

Urs, could you clarify what you mean by limits and colimits coinciding? For example, in FinVect the limit of a diagram consisting of two parallel arrows (equalizer) does not coincide with the colimit of that diagram (coequalizer).

There is (as I’m sure you realize) a notion of category with zero object and biproducts, where the initial and terminal coincide and finite products and finite coproducts “coincide”. I think one has to exercise some care in saying what this last condition means. If A and B are objects in a category with finite products and finite coproducts, then a map

A+BA×B

determines (and is determined by) four maps (from A to A, A to B, etc.) which can be thought of as entries in a (2 ×2 )-matrix. If the category has a zero object as well, then there are canonical candidates for such maps (identity maps on-diagonal, zero maps off-diagonal), so that the matrix is the “identity matrix”. Then the relevant condition for biproducts is that the identity matrix map A+BA×B is an isomorphism. Just having a zero object is not enough for that to happen; the category of pointed sets (where the zero object consists of just a basepoint) is an example where the condition fails.

When the condition holds, then there is a canonical way to enrich the category in the category of commutative monoids (reminiscent of additive categories, except they’re CMon-enriched, not Ab-enriched). The sum f+g of two maps f,g:AB is given by the evident composite

AdiagA×Af×gB×BB+BcodiagB,

and the additive identity in hom(A,B) is of course the zero map. Conversely, a CMon-enriched category with finite products (or with finite coproducts) is a category with zero object and biproducts in the sense above.

By the way – sorry I haven’t been more active around here recently; there are lots of interesting threads going on. In part my excuse is that I’ve been added as a co-author to another mathematical blog, Vishal Lama’s blog, where I’ve begun talking about topics related to Boolean algebras, more or less at an undegraduate level.

Posted by: Todd Trimble on April 5, 2008 2:17 PM | Permalink | Reply to this

Re: Limits and Push-Forward

I mean (co)products not (co)limits. Sorry.

Posted by: Urs Schreiber on April 5, 2008 2:28 PM | Permalink | Reply to this

Re: Limits and Push-Forward

Thanks, Todd, that’s exactly what I wanted to know (even though I had a typo in the question :-/).

So it’s precisely the CMon-enriched categories with finite products which have 0-objects and biproducts.

What if the requirement of having a 0-object is dropped?

Posted by: Urs Schreiber on April 5, 2008 2:42 PM | Permalink | Reply to this

Re: Limits and Push-Forward

There is little I can add to Todd’s comprehensive answer.

It’s possible for products and coproducts to coincide “accidentally”; for example, take the full subcategory of Set on a single countably infinite set! (If you want an example that has all finite (co)products, use sets-and-partial-functions, and take the empty set as well.) But the notion of biproduct nicely expresses the situation where they coincide coherently.

As Todd says, if a category is CMon-enriched then products or coproducts are automatically biproducts. (Nice exercise, if you haven’t seen it before.) Also, if a category is compact closed then products or coproducts are again automatically biproducts.

In both cases, this is true even in the purely nullary case, i.e. any initial or terminal object is a zero object. (In fact, CMon-enrichment is overkill here: it suffices for the category to be enriched in pointed sets.)

Posted by: Robin on April 5, 2008 4:47 PM | Permalink | Reply to this

Re: Limits and Push-Forward

I should have made it clearer that I’ve been assuming that phas is (enriched) cocomplete.

Then the Kan extension L:Σphas is given by the coend

(1) (f,s)X Σ×ΣΣ(s,)×F(fs).

By the Fubini theorem, this is isomorphic to

(2) fX Σ sΣΣ(s,)×F(fs),

which is isomorphic to

(3) fX ΣF(f)

by the density formula (aka the coend form of the Yoneda lemma). That’s the derivation of the claim I made yesterday. Since f appears only once, and covariantly, this coend is just an ordinary colimit.

With your revised X, this colimit is a pushout.

(I can’t pretend that I’ve followed the back-story very clearly, so this observation may or may not be helpful.)

Posted by: Robin on April 2, 2008 12:49 PM | Permalink | Reply to this

Re: Limits and Push-Forward

That’s the derivation of the claim I made yesterday.

Thanks, that was helpful. Good that you mentioned Fubini (it’s amazing how close the similarities to ordinary integration theory are!!) and the density formula. I spent more time reading Kelly and think that I am following now.

So the result fX ΣF(f)=colim X ΣF(f) is, unless I am still mixed up, the same fomula which I get by starting with

X Σ×Σ ev *F phas Σ then using the hom-transform to think of this as X Σ phas Σ pt and then do the push-forward to the point, hence the colimit over X Σ with values in phas Σ.

That colimit then boils down to the one you derived.

I was hoping doing it not this way but using direct push-forward to Σ would be more enlightning. And indeed, I learned a lot here. Thanks for all your feedback.

(My replies have been slow. That’s because I am now on leave of absence from Hamburg, lost my office there now, am living “on the road” for a month now, until I’ll settle down again office-wise in May. That makes me spend more time in trains than online…)

Posted by: Urs Schreiber on April 2, 2008 9:18 PM | Permalink | Reply to this

index (co)limits and (co)ends

For the record and for my own benefit, I’ll review and summarize some of the enriched category theory aspects appearing in the above discussion (many thanks to Robin Houston for the help he provided!!), and pointing out where it says what in Kelly’s book:

G. M. Kelly, Basic concepts of enriched category theory

There are several directions from which to approach the generalization of ordinary (co)limits known as indexed (co)limits and as (co)ends. I’ll do it in a fashion somewhat reverse to how Kelly presents it:

For me the starting point is the observation (section 3.4) that a cone over a functor

G:KB

with tip bB usually thought of as a a transformation from the constant functor Δb with value the tip b into the functor G

Cone(b,F)[K,B](Δb,G),

where Δb:K{pt}ptbB,

can equivalently be thought of as a cone in “copresheaves” on K, with tip the constant functor Δ1 at the singleton set:

[K,B](ΔB,G)[K,Set](Δ1 ,B(b,G())).

I suppose one way to motivate indexed limits is to observe that in the formulation on the right hand, as opposed to the one on the left hand, there is a singled out functor appearing, namely

Δ1 :K{pt}pt{}Set.

Therefore it is natural to generalize the notion as it appears on the right, by replacing this constant functor with something else.

And indeed, that’s what one does:

we allow Set to be replaced by any other enriching category V (I won’t try to list all the properties we need on V to make each an all of the following constructions possible) and generalize [K,Set](Δ1 ,B(b,G())) first to [K,V](ΔI,B(b,G())) and then to [K,V](F,B(b,G())), where now F:KV can by any functor, not necessarily one constant at the tensor unit object.

(Now I am on p. 37, equation (3.1).)

Instead of saying then that the cone is indexed by K, we say that it is indexed by F (which includes the information about F’s domain K, of course).

Now, a limit of a functor G is something that represents the universal cone over G, in that morphisms into the limit are in bijection with cones over the functor.

So we do the same here and define the limit of G indexed by F, what you might denote lim FG, by the property

B(b,lim FG):[K,V](F,B(b,G()))

naturally for all bB.

Only that, for some reason, one invents completely unsuggestive new notation and writes {F,G} for what I called lim FG above. So this should really read:

B(b,{F,G}):[K,V](F,B(b,G())).

For indexed colimits the discussion is the same with both (!) K and B replaced by their opposite categories. (equation 3.5, p. 38).

The F-indexed colimit colim FG over G also receives its own notation: FG:

B(FG,b):[K op,V](F,B(G(),b)).

A most important special case of such indexed (co)limits is that where we can think of them as weighted (co)limits, a situation which is the basis for a striking similarity between indexed colimits and the theory of ordinary integration (as in functional analysis).

That special case is that where the codomain of our functor is (co)tensored over the enriching category. (section 3.7, p. 48)

A V-category B being tensored over V is much like a “V-module”: V behaves like a monoid which acts on B. Or more suggestively, B behaves like a vector space over V.

(Here is a question: is there a difference between saying that B is tensored over V and looking at V as a monoid in V-Cat and at B as a module for that monoid in V-Cat?)

If B is tensored over V one writes (this time the notation is natural)

vb

for the result of acting with vV on bB.

(The notation for the cotensor product, on the other hand, I can’t even typeset here without looking up special character tables…)

The punchline now is that if B is tensored over V, the (F:KV)-indexed colimit over a functor G:KB can be expressed by a coend over the tensor product:

colim FG:=FG kKF(k)G(k).

(equation 3.70, p. 53)

So now I say what what a coend is, the thing appearing on the right hand here:

Where indexed (co)limits generalized ordinary (co)limits by generalizing what we may regard as the tip of a cone, (co)ends generalize ordinary (co)limits by generalizing what the functor we take the limit over may be: namely from the case of functors on K to functors on K op×K.

One way to motivate this is by thinking about what natural transformations really are:

given two ordinary functor:

T,S:AB

a natural transformation η:TS is, for each aA a map η a:IB(T(a),S(a)) namely a morphism in B, such that all naturality squares commute, which in terms of this map means that for all f:ab in A we have

I η a B(T(a),S(a)) η b B(T(a),S(f)) B(T(b),S(b)) B(T(f),S(b)) B(T(a),S(b)).

The point to notice is that in the special case that the functor T is trivial this reduces precisely to a cone over the functor B(T,S()):AB. So the naturality of natural transformations is a generalization of the notion of cone to functors with a covariant and a contravariant dependence on their domain category.

As the vertical morphisms of a cone form a natural family of morphisms with respect to the functor that the cone lives over, the morphisms η a:IB(T(a),S(a)) of a natural transformation form what is called an extraordinary natural family (1.7, p. 17).

Generally, then, this is the definition of an end: not just a universal natural family of morphisms (that would be a limit), but a universal extraordinary natural family.

More precisely for a functor T:A op×AV a (extraordinary) natural family of morphisms from some object kV λ a:kT(a,a) for all aA is one for which for all f:ab in A we have: K λ a T(a,a) λ b T(a,f) T(b,b) T(f,b) T(a,b). Or rather, this is the condition when it makes sense to speak of morphism in A, as when V=Set. More generally one reformulates this into a more robust (but less enlightning on first sight) way which works for all enrichment categories. See equation 1.40 on p. 18.

Then (p. 27) the end

AT:= aAT(a,a)

over a functor T:A op×AV is the (domain object of the) universal such natural family, in that every other one factors through it.

We get from this back to the motivating example of natural transformations by now noticing that this gives a way to speak of the V-object of natural transformations in any enriched context (2.2, p. 29): the V-object of natural transformations of V-functors T,S:AB is defined by the end over the functor B(T(),S())

[A,B](T,S):= aAB(T(a),S(a)).

Finally, now, we get to coends, by dualizing ends: the coend aAG(A,A) is defined by (3.67, p. 53) B( aAG(a,a),b) aB(G(a,a),b) naturally for all bB.

Just as ends over T:A op×AV reduce to limits when there is no dependency of T on the first (contravariant) variable of T, coends reduce to colimits in the same case.

To get an intuition for what is going on with our formula for the F-indexed colimit over G

FG kKF(k)G(k)

it is helpful to consider the special simple case that John described here:

suppose that V=FinSet such that isomorphism classes in V are given by natural numbers and such that coproduct induced addition of these natural numbers.

Let A=Disc(X) be the discrete V-category over a set X: all Hom-objects are trivial.

Moreover, let B=SetMod, the category whose objects are categories with a Set-action on them and whose morphisms are Set-linear functors between these.

(I am hoping that I am right that this B is Set-tensored. If not, just take B=Set instead in the following.)

Then a functor G:AB i.e G:XSetMod is like a vector-valued function on the set X, and a functor F:XSet is like a number-valued function on X. And F()G() is like a vector valued function on X obained by multiplying G pointwise by F.

Moreover, the coend xXF(x)G(x) reduces to just to coproduct xXF(x)G(x). This is just like the integral of G over X weighted by F.

It is amazing how close the notion of coends, and also the notation used, is to ordinary integration theory. But the notation is not perfect. First of all it is a pity that the coend has the integration bounds on top instead of at the bottom of the integral sign. It should be the other way around.

If I had to make up notation from scratch, I’d opt for writing the coend of a functor G with values in a V-tensored category B with weight F as

XGdμ F.

Moreover, if products and coproducts coincide, such as in FinVect, I’d write (along the lines of John Baez, of course) a,b:=B(a,b) for a,bB, which would turn formulas such as 3.67 into pleasant familiar formulas such as XGdμ F,b= XG,bdμ F.

Posted by: Urs Schreiber on April 3, 2008 9:25 AM | Permalink | Reply to this

Re: index (co)limits and (co)ends

Now for Kan extensions.

Continuing with motivational remarks along the lines I ended the previous comment with, the problem is this:

on X we might have a “vector bundle” F:XB in that there is an object of B over each point of X as the fiber. Then given a projection X p W we may want to “push down” the vector bundle to W such that X F B p 1 F W.

The universal way to do this is the (left) Kan extension

Lan pF

of F along p.

Well, Kelly argues on p. 65 that this way of thinking of the Kan extension is subobtimal, and rather defines it in terms of an indexed colimit (p. 61):

Let p˜:W[X op,V] be given by (3.39) p˜(w):=W(p(),w), then (Lan pF)():=p˜()F.

This begins to look more suggestive when we assume again that B is tensored and use the reformulation of indexed colimits in terms of coends over tensor products in this case:

(Lan pF)()= xXp˜()(x)F(x), which in turn is (Lan pF)()= xXW(p(x),)F(x).

I find it useful to think of this again in our simple example where X and W are just sets, namely discrete categories (no nontrivial morphisms). Let me use the alternative notation which I suggested, to make that point more clearly:

(Lan pF)(w)= XFdμ p˜(w)

The “measure” dμ p˜(w) on X in this formula, for each wW is unity on all x which do live in the fiber over w with respect to p, and vanishes otherwise.

Therefore in this case the left Kan extension of our “vector bundle” indeed sums up all fibers of the bundle that project down to the same point over W.

(I should admit that I made a quick google search trying to see if there is any literature on the relation between push-forward of bundles and Kan extensions. But couldn’t really find anything. Of course one might need arXiv:0705.0452 to get started here ;-)

Next i wanted to say something about the Fubini theorem for coends and about the “density formula”. But I realize that I need a little more thinking about that before talking about it here.

Posted by: Urs Schreiber on April 3, 2008 10:57 AM | Permalink | Reply to this

Re: index (co)limits and (co)ends

Sorry for the trivial comment after your very detailed post, but there is one thing I can say without having to think about it first:

\pitchfork =

Posted by: Robin on April 3, 2008 4:56 PM | Permalink | Reply to this

Post a New Comment