<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Homotopy Type Theory</title>
	<atom:link href="http://homotopytypetheory.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://homotopytypetheory.org</link>
	<description></description>
	<lastBuildDate>Tue, 22 May 2012 05:05:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='homotopytypetheory.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/1dd72ffcda1a3681f8159486bb9bbe58?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Homotopy Type Theory</title>
		<link>http://homotopytypetheory.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://homotopytypetheory.org/osd.xml" title="Homotopy Type Theory" />
	<atom:link rel='hub' href='http://homotopytypetheory.org/?pushpress=hub'/>
		<item>
		<title>Reducing all HIT’s to 1-HIT’s</title>
		<link>http://homotopytypetheory.org/2012/05/07/reducing-all-hits-to-1-hits/</link>
		<comments>http://homotopytypetheory.org/2012/05/07/reducing-all-hits-to-1-hits/#comments</comments>
		<pubDate>Tue, 08 May 2012 03:36:58 +0000</pubDate>
		<dc:creator>Peter LeFanu Lumsdaine</dc:creator>
				<category><![CDATA[Higher Inductive Types]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=866</guid>
		<description><![CDATA[For a while, Mike Shulman and I (and others) have wondered on and off whether it might be possible to represent all higher inductive types (i.e. with constructors of arbitrary dimension) using just 1-HIT’s (0- and 1-cell constructors only), somewhat &#8230; <a href="http://homotopytypetheory.org/2012/05/07/reducing-all-hits-to-1-hits/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=866&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For a while, Mike Shulman and I (and others) have wondered on and off whether it might be possible to represent all <a title="Higher Inductive Types: a tour of the menagerie" href="http://homotopytypetheory.org/2011/04/24/higher-inductive-types-a-tour-of-the-menagerie/">higher inductive types</a> (i.e. with constructors of arbitrary dimension) using just 1-HIT’s (0- and 1-cell constructors only), somewhat analogously with the reduction of all standard inductive types to a few specific instances — W-types, Id-types, etc. Recently we realised that yes, it can be done, and quite prettily.  It’s perhaps most easily explained in pictures: here are a couple of 2-cells, represented using just 0- and 1-cells:</p>
<p style="text-align:center;"><a href="http://www.flickr.com/photos/ne/3893796919/"><img class="size-full wp-image-870 aligncenter" title="Mushroom cap" src="http://hottheory.files.wordpress.com/2012/05/mushroom-1-ne-3893796919-320x320.jpg?w=640" alt="A mushroom, from beneath: gills run from the stalk out to the lip"   /></a></p>
<p style="text-align:center;"><a href="http://www.flickr.com/photos/27376974@N02/4429320063/"><img class="alignnone size-full wp-image-869 aligncenter" title="Bicycle wheel" src="http://hottheory.files.wordpress.com/2012/05/bicycle-27376974n02-4429320063-320x240.jpg?w=640" alt="A bicycle wheel: spokes radiating out connect the hub to the rim"   /></a></p>
<p style="text-align:left;">And here’s a 3-cell, similarly represented:</p>
<p style="text-align:center;"><a href="http://www.flickr.com/photos/27376974@N02/4429320063/"><a href="http://www.flickr.com/photos/jpott/2409337382/"><img class="aligncenter size-full wp-image-871" title="Dandelion clock" src="http://hottheory.files.wordpress.com/2012/05/dandelion-jpott-2409337382-320x248.jpg?w=640" alt="A dandelion clock: a sphere of seeds attached to a common center "   /></a></p>
<p>As a topologist would say it: the (<em>n</em>+1)-disc is the cone on the <em>n</em>-sphere. To implement this logically, we first construct the spheres as a 1-HIT, using iterated suspension:</p>
<pre>Inductive Sphere : Nat -&gt; Type :=
  | north (n:Nat) : Sphere n
  | south (n:Nat) : Sphere n
  | longitude (n:Nat) (x:Sphere n) : Paths (north (n+1)) (south (n+1)).</pre>
<p>Then we define (it’s a little fiddly, but do-able) a way to, given any parallel pair <code>s</code>, <code>t</code> of <em>n</em>-cells in a space <code>X</code>, represent them as a map <code>rep s t : Sphere n -&gt; X</code>. (I’m suppressing a bunch of implicit arguments for the lower dimensional sources/targets.)</p>
<p>Now, whenever we have an (<em>n</em>+1)-cell constructor in a higher inductive type</p>
<pre>HigherInductive X : Type :=
  (…earlier constructors…)
  | constr (a:A) : HigherPaths X (n+1) (constr_s a) (constr_t a)
  (…later constructors…)</pre>
<p>we replace it by a pair of constructors</p>
<pre>  | constr_hub (a:A) : X
  | constr_spoke (a:A) (t : Sphere n) : Paths X (rep (s a) (t a)) (constr_hub a)</pre>
<p>Assuming functional extensionality, we can give from this a derived term <code>constr_derived : forall (a:A), HigherPaths (n+1) (constr_s a) (constr_t a)</code>; we use this for all occurences of <code>constr</code> in later constructors. The universal property of the modified HIT should then be equivalent to that of the original one.</p>
<p>(Here for readability <code>X</code> was non-dependent and <code>constr</code> had only one argument; but the general case has no essential extra difficulties.)</p>
<p>What can one gain from this? Again analogously with the traditional reduction of inductive types to a few special cases, the main use I can imagine is in constructing models: once you’ve modeled 1-HIT’s, arbitrary <em>n</em>-HIT’s then come for free. It also could be a stepping-stone for reducing yet further to a few specific 1-HIT’s… ideas, anyone?</p>
<p>On a side note, while I’m here I’ll take the opportunity to briefly plug two notes I’ve put online recently but haven’t yet advertised much:</p>
<ul>
<li><a title="Model Structures from Higher Inductive Types" href="http://www.mathstat.dal.ca/~p.l.lumsdaine/research/Lumsdaine-Model-strux-from-HITs.pdf" target="_blank">Model Structures from Higher Inductive Types</a>, which pretty much does what it says on the tin: giving a second factorisation system on syntactic categories <em>C<sub>T</sub></em> (using <a title="Higher Inductive Types: a tour of the menagerie" href="http://homotopytypetheory.org/2011/04/24/higher-inductive-types-a-tour-of-the-menagerie/" target="_blank">mapping cylinders</a> for the factorisations), which along with the <a title="Gambino, Garner: The identity type weak factorisation system" href="http://homotopytypetheory.org/references/gambino-garner-the-identity-type-weak-factorisation-system/" target="_blank">Gambino-Garner weak factorisation system</a> gives <em>C<sub>T</sub></em> much of the structure of a model category — all but the completeness and functoriality conditions. The weak equivalences are, as one would hope, the <a title="A seminar on HoTT Equivalences" href="http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/" target="_blank">type-theoretic <code>Equiv</code></a> we know and love.</li>
<li><a title="Univalence in Simplicial Sets (arXiv)" href="http://arxiv.org/abs/1203.2553" target="_blank">Univalence in Simplicial Sets</a>, joint with Chris Kapulkin and Vladimir Voevodsky. This gives essentially the homotopy-theoretic aspects of the construction of the univalent model in simplicial sets, and these aspects only — type theory isn’t mentioned. Specifically, the main theorems are the construction of a (fibrant) universe that (weakly) classifies fibrations, and the proof that it is (in a homotopy-theoretic sense) univalent. The results are not new, but are taken from Voevodsky’s <a title="Voevodsky — Notes on Type Systems" href="http://www.math.ias.edu/~vladimir/Site3/Univalent_Foundations_files/expressions_current.pdf" target="_blank">Notes on Type Systems</a> and Oberwolfach lectures, with some proofs modified; the aim here is to give an accessible and self-contained account of the material.</li>
</ul>
<p>(Photos above by <a title="User ne* on flickr" href="http://www.flickr.com/photos/ne/" target="_blank">ne*</a>, <a title="USer brandsvig on flickr" href="http://www.flickr.com/photos/27376974@N02/" target="_blank">brandsvig</a>, and <a title="User JPott on flickr" href="http://www.flickr.com/photos/jpott/" target="_blank">JPott</a>, via the <a title="Flickr creative commons pool" href="http://www.flickr.com/creativecommons/" target="_blank">flickr Creative Commons pool</a>, licensed under CC-NonCom-Attrib-NoDerivs.)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/866/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/866/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/866/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=866&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/05/07/reducing-all-hits-to-1-hits/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<georss:point>44.637141 -63.593733</georss:point>
		<geo:lat>44.637141</geo:lat>
		<geo:long>-63.593733</geo:long>
		<media:content url="" medium="image">
			<media:title type="html">peterlefanulumsdaine</media:title>
		</media:content>

		<media:content url="http://hottheory.files.wordpress.com/2012/05/mushroom-1-ne-3893796919-320x320.jpg" medium="image">
			<media:title type="html">Mushroom cap</media:title>
		</media:content>

		<media:content url="http://hottheory.files.wordpress.com/2012/05/bicycle-27376974n02-4429320063-320x240.jpg" medium="image">
			<media:title type="html">Bicycle wheel</media:title>
		</media:content>

		<media:content url="http://hottheory.files.wordpress.com/2012/05/dandelion-jpott-2409337382-320x248.jpg" medium="image">
			<media:title type="html">Dandelion clock</media:title>
		</media:content>
	</item>
		<item>
		<title>A type theoretical Yoneda lemma</title>
		<link>http://homotopytypetheory.org/2012/05/02/a-type-theoretical-yoneda-lemma/</link>
		<comments>http://homotopytypetheory.org/2012/05/02/a-type-theoretical-yoneda-lemma/#comments</comments>
		<pubDate>Wed, 02 May 2012 21:31:52 +0000</pubDate>
		<dc:creator>Egbert Rijke</dc:creator>
				<category><![CDATA[Foundations]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=797</guid>
		<description><![CDATA[In this blog post I would like to approach dependendent types from a presheaf point of view. This allows us to take the theory of presheaves as an inspiration for results in homotopy type theory. The first result from this &#8230; <a href="http://homotopytypetheory.org/2012/05/02/a-type-theoretical-yoneda-lemma/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=797&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this blog post I would like to approach dependendent types from a presheaf point of view. This allows us to take the theory of presheaves as an inspiration for results in homotopy type theory. The first result from this direction is a type theoretical variant of the Yoneda lemma, stating that the fiber <img src='http://s0.wp.com/latex.php?latex=P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(a)' title='P(a)' class='latex' /> of <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> above <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' /> is equivalent to the space of all local sections at <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' /> of <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />. In analogy with natural transformations from category theory we make the following definition:</p>
<p><strong>Definition.</strong> <em>If <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q' title='Q' class='latex' /> are dependent types over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />, we define</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28P%2CQ%29%3A%3D%5Cprod%28x%3AA%29%2C%5C+P%28x%29%5Cto+Q%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(P,Q):=&#92;prod(x:A),&#92; P(x)&#92;to Q(x)' title='&#92;mathsf{hom}(P,Q):=&#92;prod(x:A),&#92; P(x)&#92;to Q(x)' class='latex' /></p>
<p>of which the terms are called dependent transformations. We will say that a transformation <img src='http://s0.wp.com/latex.php?latex=%5Csigma%3A%5Cmathsf%7Bhom%7D%28P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sigma:&#92;mathsf{hom}(P,Q)' title='&#92;sigma:&#92;mathsf{hom}(P,Q)' class='latex' /> is an equivalence if <img src='http://s0.wp.com/latex.php?latex=%5Csigma%28x%29%3AP%28x%29%5Cto+Q%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sigma(x):P(x)&#92;to Q(x)' title='&#92;sigma(x):P(x)&#92;to Q(x)' class='latex' /> is an equivalence for each <img src='http://s0.wp.com/latex.php?latex=x%3AA&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x:A' title='x:A' class='latex' />.</em></p>
<p>The case where <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> is the dependent space over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> with <img src='http://s0.wp.com/latex.php?latex=P%28x%29%3Dx%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(x)=x&#92;leadsto a' title='P(x)=x&#92;leadsto a' class='latex' /> for some fixed <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' /> in <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> is of special importance. We will denote this dependent type by <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(a)' title='&#92;mathscr{Y}(a)' class='latex' /> to emphasize on the similarity of the role it plays to the Yoneda embedding of <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' /> in the category of presheaves over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />. Indeed, we will soon be able to prove that <img src='http://s0.wp.com/latex.php?latex=P%28a%29%5Csimeq%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' title='P(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' class='latex' />. We call a transformation from <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(a)' title='&#92;mathscr{Y}(a)' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> also a local section of <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> at <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' />.</p>
<p><strong>Example.</strong> If <img src='http://s0.wp.com/latex.php?latex=p%3Aa%5Cleadsto+a%5E%5Cprime&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:a&#92;leadsto a^&#92;prime' title='p:a&#92;leadsto a^&#92;prime' class='latex' /> is a path in <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />, then there is the transformation <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28p%29%3A%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2C%5Cmathscr%7BY%7D%28a%5E%5Cprime%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(p):&#92;mathsf{hom}(&#92;mathscr{Y}(a),&#92;mathscr{Y}(a^&#92;prime))' title='&#92;mathscr{Y}(p):&#92;mathsf{hom}(&#92;mathscr{Y}(a),&#92;mathscr{Y}(a^&#92;prime))' class='latex' /> defined by <img src='http://s0.wp.com/latex.php?latex=%5Clambda+x.%5Clambda+q.p%5Cbullet+q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;lambda x.&#92;lambda q.p&#92;bullet q' title='&#92;lambda x.&#92;lambda q.p&#92;bullet q' class='latex' />. So <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28p%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(p)' title='&#92;mathscr{Y}(p)' class='latex' /> sends for each <img src='http://s0.wp.com/latex.php?latex=x%3AA&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x:A' title='x:A' class='latex' /> the paths <img src='http://s0.wp.com/latex.php?latex=q%3Ax%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='q:x&#92;leadsto a' title='q:x&#92;leadsto a' class='latex' /> to the concatenation <img src='http://s0.wp.com/latex.php?latex=p%5Cbullet+q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p&#92;bullet q' title='p&#92;bullet q' class='latex' />.</p>
<p>Note that we didn&#8217;t require the naturality in our definition of transformations. This is, however, something that we get for free:</p>
<p><strong>Lemma.</strong> <em>Suppose that <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q' title='Q' class='latex' /> are dependent types over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> and that <img src='http://s0.wp.com/latex.php?latex=%5Ctau%3A%5Cmathsf%7Bhom%7D%28P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau:&#92;mathsf{hom}(P,Q)' title='&#92;tau:&#92;mathsf{hom}(P,Q)' class='latex' /> is a transformation from <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q' title='Q' class='latex' />. Then the diagram</p>
<p><a href="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-011.png"><img src="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-011.png?w=300&h=189" alt="Naturality of transformations" title="yoneda-diagram-01" width="300" height="189" class="alignnone size-medium wp-image-857" /></a><br />
<a href='http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-011.pdf'>yoneda-diagram-01.pdf</a></p>
<p>commutes up to homotopy for every path <img src='http://s0.wp.com/latex.php?latex=p%3Ax%5Cleadsto+y&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:x&#92;leadsto y' title='p:x&#92;leadsto y' class='latex' /> in <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />. Here, <img src='http://s0.wp.com/latex.php?latex=P%28p%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(p)' title='P(p)' class='latex' /> denotes transportation along <img src='http://s0.wp.com/latex.php?latex=p&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p' title='p' class='latex' /> with respect to the dependent type <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />. We define <img src='http://s0.wp.com/latex.php?latex=%5Ctau%28p%29%3A%3DQ%28p%29%5Ccirc%5Ctau%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau(p):=Q(p)&#92;circ&#92;tau(x)' title='&#92;tau(p):=Q(p)&#92;circ&#92;tau(x)' class='latex' /> when <img src='http://s0.wp.com/latex.php?latex=p%3Ax%5Cleadsto+y&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:x&#92;leadsto y' title='p:x&#92;leadsto y' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=%5Ctau%3A%5Cmathsf%7Bhom%7D%28P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau:&#92;mathsf{hom}(P,Q)' title='&#92;tau:&#92;mathsf{hom}(P,Q)' class='latex' />.</em></p>
<p><em>Proof.</em> Let <img src='http://s0.wp.com/latex.php?latex=D%28x%2Cy%2Cp%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='D(x,y,p)' title='D(x,y,p)' class='latex' /> be the type <img src='http://s0.wp.com/latex.php?latex=Q%28p%29%5Ccirc%5Csigma%28x%29%5Cleadsto%5Csigma%28y%29%5Ccirc+P%28p%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q(p)&#92;circ&#92;sigma(x)&#92;leadsto&#92;sigma(y)&#92;circ P(p)' title='Q(p)&#92;circ&#92;sigma(x)&#92;leadsto&#92;sigma(y)&#92;circ P(p)' class='latex' />. Since <img src='http://s0.wp.com/latex.php?latex=P%28%5Cmathrm%7Bid%7D_%7Bx%7D%29%3D%5Cmathrm%7Bid%7D_%7BP%28x%29%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(&#92;mathrm{id}_{x})=&#92;mathrm{id}_{P(x)}' title='P(&#92;mathrm{id}_{x})=&#92;mathrm{id}_{P(x)}' class='latex' /> it follows that <img src='http://s0.wp.com/latex.php?latex=D%28x%2Cx%2C%5Cmathrm%7Bid%7D_%7Bx%7D%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='D(x,x,&#92;mathrm{id}_{x})' title='D(x,x,&#92;mathrm{id}_{x})' class='latex' /> is inhabited by the canonical term <img src='http://s0.wp.com/latex.php?latex=d%28x%29%3A%3D%5Cmathrm%7Bid%7D_%7B%5Csigma%28x%29%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='d(x):=&#92;mathrm{id}_{&#92;sigma(x)}' title='d(x):=&#92;mathrm{id}_{&#92;sigma(x)}' class='latex' />. The assertion follows now by the induction principle for identity types.<br />
<em>QED.</em></p>
<p>Transformations of dependent types may be composed and just as in the case with natural transformations this is done pointwise.</p>
<p><strong>Lemma (Yoneda lemma for dependent types).</strong> <em>Assuming function extensionality we have: for any dependent type <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> and any <img src='http://s0.wp.com/latex.php?latex=a%3AA&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a:A' title='a:A' class='latex' /> there is an equivalence</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Calpha_%7BP%2Ca%7D%3AP%28a%29%5Csimeq%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;alpha_{P,a}:P(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' title='&#92;alpha_{P,a}:P(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' class='latex' /></p>
<p>for each <img src='http://s0.wp.com/latex.php?latex=a%3AA&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a:A' title='a:A' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=P%3AA%5Cto%5Cmathsf%7BType%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P:A&#92;to&#92;mathsf{Type}' title='P:A&#92;to&#92;mathsf{Type}' class='latex' />. The equivalences <img src='http://s0.wp.com/latex.php?latex=%5Calpha_%7BP%2Ca%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;alpha_{P,a}' title='&#92;alpha_{P,a}' class='latex' /> are natural in the sense that the diagram</p>
<p><a href="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-02.png"><img src="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-02.png?w=300&h=127" alt="Yoneda equivalence" title="yoneda-diagram-02" width="300" height="127" class="alignnone size-medium wp-image-858" /></a><br />
<a href='http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-02.pdf'>yoneda-diagram-02.pdf</a></p>
<p>commutes for every <img src='http://s0.wp.com/latex.php?latex=p%3Aa%5Cleadsto+a%5E%5Cprime&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:a&#92;leadsto a^&#92;prime' title='p:a&#92;leadsto a^&#92;prime' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=%5Ctau%3A%5Cmathsf%7Bhom%7D%28P%2CP%5E%5Cprime%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau:&#92;mathsf{hom}(P,P^&#92;prime)' title='&#92;tau:&#92;mathsf{hom}(P,P^&#92;prime)' class='latex' />.</em></p>
<p>Originally, I had a two page long proof featuring some type theoretical relatives of the key ideas of the proof of the categorical Yoneda lemma, like considering <img src='http://s0.wp.com/latex.php?latex=%5Ctau_a%28%5Cmathrm%7Bid%7D_a%29%5Cin+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau_a(&#92;mathrm{id}_a)&#92;in P(a)' title='&#92;tau_a(&#92;mathrm{id}_a)&#92;in P(a)' class='latex' /> for a presheaf <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> on a category <img src='http://s0.wp.com/latex.php?latex=%5Cmathcal%7BC%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathcal{C}' title='&#92;mathcal{C}' class='latex' /> and a natural transformation <img src='http://s0.wp.com/latex.php?latex=%5Ctau%3A%5Cmathscr%7BY%7D%28a%29%5CRightarrow+P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau:&#92;mathscr{Y}(a)&#92;Rightarrow P' title='&#92;tau:&#92;mathscr{Y}(a)&#92;Rightarrow P' class='latex' />. But as I wrote this blog post, the following short proof occured to me:</p>
<p><em>Proof.</em> Note that if <img src='http://s0.wp.com/latex.php?latex=x%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x&#92;leadsto a' title='x&#92;leadsto a' class='latex' /> is inhabited, then <img src='http://s0.wp.com/latex.php?latex=P%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(x)' title='P(x)' class='latex' /> is equivalent to <img src='http://s0.wp.com/latex.php?latex=P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(a)' title='P(a)' class='latex' />. Hence we have</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' title='&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cprod%28x%3AA%29%2C%5C+%28x%5Cleadsto+a%29%5Cto+P%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;prod(x:A),&#92; (x&#92;leadsto a)&#92;to P(x)' title='= &#92;prod(x:A),&#92; (x&#92;leadsto a)&#92;to P(x)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28x%3AA%29%2C%5C+%28x%5Cleadsto+a%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(x:A),&#92; (x&#92;leadsto a)&#92;to P(a)' title='&#92;simeq &#92;prod(x:A),&#92; (x&#92;leadsto a)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cbig%28%5Csum%28x%3AA%29%2C%5C+x%5Cleadsto+a%5Cbig%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;big(&#92;sum(x:A),&#92; x&#92;leadsto a&#92;big)&#92;to P(a)' title='&#92;simeq &#92;big(&#92;sum(x:A),&#92; x&#92;leadsto a&#92;big)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+P%28a%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq P(a).' title='&#92;simeq P(a).' class='latex' /></p>
<p>In the last equivalence, we used that <img src='http://s0.wp.com/latex.php?latex=%5Csum%28x%3AA%29%2C%5C+x%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sum(x:A),&#92; x&#92;leadsto a' title='&#92;sum(x:A),&#92; x&#92;leadsto a' class='latex' /> is contractible. </p>
<p>By looking at what each of the equivalences does, it is not so hard to see that the equivalence <img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%29%5Csimeq+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)&#92;simeq P(a)' title='&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)&#92;simeq P(a)' class='latex' /> is the map </p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Clambda%5Ctau.%5Ctau%28a%2C%5Cmathrm%7Bid%7D_a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;lambda&#92;tau.&#92;tau(a,&#92;mathrm{id}_a)' title='&#92;lambda&#92;tau.&#92;tau(a,&#92;mathrm{id}_a)' class='latex' />.</p>
<p>Following the above commutative square from the top right first to the left and then downwards, we get for a transformation <img src='http://s0.wp.com/latex.php?latex=%5Ctau%3A%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;tau:&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' title='&#92;tau:&#92;mathsf{hom}(&#92;mathscr{Y}(a),P)' class='latex' />, a path <img src='http://s0.wp.com/latex.php?latex=p%3Aa%5E%5Cprime%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:a^&#92;prime&#92;leadsto a' title='p:a^&#92;prime&#92;leadsto a' class='latex' /> and a transformation <img src='http://s0.wp.com/latex.php?latex=%5Csigma%3A%5Cmathsf%7Bhom%7D%28P%2CP%5E%5Cprime%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sigma:&#92;mathsf{hom}(P,P^&#92;prime)' title='&#92;sigma:&#92;mathsf{hom}(P,P^&#92;prime)' class='latex' />, we get the term</p>
<p><img src='http://s0.wp.com/latex.php?latex=P%5E%5Cprime%28p%29%28%5Csigma%28a%29%28%5Ctau%28a%2C%5Cmathrm%7Bid%7D_a%29%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P^&#92;prime(p)(&#92;sigma(a)(&#92;tau(a,&#92;mathrm{id}_a)))' title='P^&#92;prime(p)(&#92;sigma(a)(&#92;tau(a,&#92;mathrm{id}_a)))' class='latex' /> of <img src='http://s0.wp.com/latex.php?latex=P%5E%5Cprime%28a%5E%5Cprime%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P^&#92;prime(a^&#92;prime)' title='P^&#92;prime(a^&#92;prime)' class='latex' />.</p>
<p>Going first downwards and then to the left we get the term <img src='http://s0.wp.com/latex.php?latex=%5Csigma%28a%5E%5Cprime%29%28%5Ctau%28a%5E%5Cprime%2Cp%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sigma(a^&#92;prime)(&#92;tau(a^&#92;prime,p))' title='&#92;sigma(a^&#92;prime)(&#92;tau(a^&#92;prime,p))' class='latex' />. Induction on <img src='http://s0.wp.com/latex.php?latex=p&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p' title='p' class='latex' /> reveals that there is a path between the two.<br />
<em>QED.</em></p>
<p><strong>Corollary.</strong> <em>Taking <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(b)' title='&#92;mathscr{Y}(b)' class='latex' /> for <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> we get the equivalence <img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2C%5Cmathscr%7BY%7D%28b%29%29%5Csimeq+a%5Cleadsto+b&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(&#92;mathscr{Y}(a),&#92;mathscr{Y}(b))&#92;simeq a&#92;leadsto b' title='&#92;mathsf{hom}(&#92;mathscr{Y}(a),&#92;mathscr{Y}(b))&#92;simeq a&#92;leadsto b' class='latex' />.</em></p>
<p>Loosely speaking, every function which takes <img src='http://s0.wp.com/latex.php?latex=x%3AA&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x:A' title='x:A' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=p%3Ax%5Cleadsto+a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p:x&#92;leadsto a' title='p:x&#92;leadsto a' class='latex' /> to a path from <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=b&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='b' title='b' class='latex' /> is itself a path from <img src='http://s0.wp.com/latex.php?latex=a&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a' title='a' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=b&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='b' title='b' class='latex' />. Using the Yoneda lemma, we can derive three basic adjunctions from presheaf theory:</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cexists_f%5Cvdash+f%5E%5Cast&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists_f&#92;vdash f^&#92;ast' title='&#92;exists_f&#92;vdash f^&#92;ast' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=f%5E%5Cast%5Cvdash%5Cforall_f&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f^&#92;ast&#92;vdash&#92;forall_f' title='f^&#92;ast&#92;vdash&#92;forall_f' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%28-%29%5Ctimes+P%5Cvdash+%28-%29%5EP&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(-)&#92;times P&#92;vdash (-)^P' title='(-)&#92;times P&#92;vdash (-)^P' class='latex' /></p>
<p>We will use the remainder of this post to state and prove them. Hopefully, we can distill a good notion of adjunction in the discussion thread below.</p>
<p><strong>Definition.</strong> <em>Suppose that <img src='http://s0.wp.com/latex.php?latex=f%3AA%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f:A&#92;to B' title='f:A&#92;to B' class='latex' /> and let <img src='http://s0.wp.com/latex.php?latex=f%5E%5Cast&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f^&#92;ast' title='f^&#92;ast' class='latex' /> be the function from <img src='http://s0.wp.com/latex.php?latex=%28B%5Cto%5Cmathsf%7BType%7D%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(B&#92;to&#92;mathsf{Type})' title='(B&#92;to&#92;mathsf{Type})' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=%28A%5Cto%5Cmathsf%7BType%7D%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(A&#92;to&#92;mathsf{Type})' title='(A&#92;to&#92;mathsf{Type})' class='latex' /> given by substitution along <img src='http://s0.wp.com/latex.php?latex=f&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f' title='f' class='latex' />, i.e. <img src='http://s0.wp.com/latex.php?latex=f%5E%5Cast%28Q%29%28a%29%3DQ%28f%28a%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f^&#92;ast(Q)(a)=Q(f(a))' title='f^&#92;ast(Q)(a)=Q(f(a))' class='latex' /> for <img src='http://s0.wp.com/latex.php?latex=Q%3AB%5Cto+A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q:B&#92;to A' title='Q:B&#92;to A' class='latex' />. We may also define the function <img src='http://s0.wp.com/latex.php?latex=%5Cexists_f%3A%28A%5Cto%5Cmathsf%7BType%7D%29%5Cto%28B%5Cto%5Cmathsf%7BType%7D%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists_f:(A&#92;to&#92;mathsf{Type})&#92;to(B&#92;to&#92;mathsf{Type})' title='&#92;exists_f:(A&#92;to&#92;mathsf{Type})&#92;to(B&#92;to&#92;mathsf{Type})' class='latex' /> given by</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cexists_f%28P%29%28b%29%3D%5Csum%28x%3AA%29%2C%5C+%28f%28x%29%5Cleadsto+b%29%5Ctimes+P%28x%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists_f(P)(b)=&#92;sum(x:A),&#92; (f(x)&#92;leadsto b)&#92;times P(x).' title='&#92;exists_f(P)(b)=&#92;sum(x:A),&#92; (f(x)&#92;leadsto b)&#92;times P(x).' class='latex' /></em></p>
<p><strong>Remark.</strong> Consider the projection <img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bproj_1%7D%3AB%5Ctimes+Y%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{proj_1}:B&#92;times Y&#92;to B' title='&#92;mathsf{proj_1}:B&#92;times Y&#92;to B' class='latex' />. Then</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cexists_%7B%5Cmathsf%7Bproj_1%7D%7D%28P%29%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists_{&#92;mathsf{proj_1}}(P)(b)' title='&#92;exists_{&#92;mathsf{proj_1}}(P)(b)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D%5Csum%28%5Clangle+b%5E%5Cprime%2Cy%5Crangle%3AB%5Ctimes+Y%29%2C%5C+%28b%5E%5Cprime%5Cleadsto+b%29%5Ctimes+P%28b%5E%5Cprime%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='=&#92;sum(&#92;langle b^&#92;prime,y&#92;rangle:B&#92;times Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;times P(b^&#92;prime,y)' title='=&#92;sum(&#92;langle b^&#92;prime,y&#92;rangle:B&#92;times Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;times P(b^&#92;prime,y)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Csum%28b%5E%5Cprime%3AB%29%28y%3AY%29%2C%5C+%28b%5E%5Cprime%5Cleadsto+b%29%5Ctimes+P%28b%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;sum(b^&#92;prime:B)(y:Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;times P(b,y)' title='&#92;simeq &#92;sum(b^&#92;prime:B)(y:Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;times P(b,y)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Csum%28y%3AY%29%2C%5C+P%28b%2Cy%29%5Ctimes+%5Cleft%28%5Csum%28b%5E%5Cprime+%3AB%29%2C%5C+b%5E%5Cprime%5Cleadsto+b%5Cright%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;sum(y:Y),&#92; P(b,y)&#92;times &#92;left(&#92;sum(b^&#92;prime :B),&#92; b^&#92;prime&#92;leadsto b&#92;right)' title='&#92;simeq &#92;sum(y:Y),&#92; P(b,y)&#92;times &#92;left(&#92;sum(b^&#92;prime :B),&#92; b^&#92;prime&#92;leadsto b&#92;right)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Csum%28y%3AY%29%2C%5C+P%28%5Clangle+b%2Cy%5Crangle%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;sum(y:Y),&#92; P(&#92;langle b,y&#92;rangle).' title='&#92;simeq &#92;sum(y:Y),&#92; P(&#92;langle b,y&#92;rangle).' class='latex' /></p>
<p>We have used that the space <img src='http://s0.wp.com/latex.php?latex=%5Csum%28b%5E%5Cprime%3AB%29%2C%5C+b%5E%5Cprime%5Cleadsto+b&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sum(b^&#92;prime:B),&#92; b^&#92;prime&#92;leadsto b' title='&#92;sum(b^&#92;prime:B),&#92; b^&#92;prime&#92;leadsto b' class='latex' /> is contractible. What this shows is that <img src='http://s0.wp.com/latex.php?latex=%5Cexists_f&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists_f' title='&#92;exists_f' class='latex' /> is equivalent to our original dependent sum when <img src='http://s0.wp.com/latex.php?latex=f&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f' title='f' class='latex' /> is a projection.</p>
<p><strong>Lemma.</strong> <em>For all <img src='http://s0.wp.com/latex.php?latex=P%3AA%5Cto%5Cmathsf%7BType%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P:A&#92;to&#92;mathsf{Type}' title='P:A&#92;to&#92;mathsf{Type}' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=Q%3AB%5Cto%5Cmathsf%7BType%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q:B&#92;to&#92;mathsf{Type}' title='Q:B&#92;to&#92;mathsf{Type}' class='latex' /> we have the equivalence</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28%5Cexists_f%28P%29%2CQ%29%5Csimeq%5Cmathsf%7Bhom%7D%28P%2Cf%5E%5Cast%28Q%29%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(&#92;exists_f(P),Q)&#92;simeq&#92;mathsf{hom}(P,f^&#92;ast(Q)).' title='&#92;mathsf{hom}(&#92;exists_f(P),Q)&#92;simeq&#92;mathsf{hom}(P,f^&#92;ast(Q)).' class='latex' /></em></p>
<p><em>Proof.</em> We use the Yoneda lemma:</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28%5Cexists_f%28P%29%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(&#92;exists_f(P),Q)' title='&#92;mathsf{hom}(&#92;exists_f(P),Q)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cprod%28b%3AB%29%2C%5C+%5Cleft%28%5Csum%28a%3AA%29%2C%5C+%28f%28a%29%5Cleadsto+b%29%5Ctimes+P%28a%29%5Cright%29%5Cto+Q%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;prod(b:B),&#92; &#92;left(&#92;sum(a:A),&#92; (f(a)&#92;leadsto b)&#92;times P(a)&#92;right)&#92;to Q(b)' title='= &#92;prod(b:B),&#92; &#92;left(&#92;sum(a:A),&#92; (f(a)&#92;leadsto b)&#92;times P(a)&#92;right)&#92;to Q(b)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28b%3AB%29%28a%3AA%29%2C%5C+%28%28f%28a%29%5Cleadsto+b%29%5Ctimes+P%28a%29%29%5Cto+Q%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(b:B)(a:A),&#92; ((f(a)&#92;leadsto b)&#92;times P(a))&#92;to Q(b)' title='&#92;simeq &#92;prod(b:B)(a:A),&#92; ((f(a)&#92;leadsto b)&#92;times P(a))&#92;to Q(b)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+P%28a%29%5Cto%5Cprod%28b%3AB%29%2C%5C+%28b%5Cleadsto+f%28a%29%29%5Cto+Q%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; P(a)&#92;to&#92;prod(b:B),&#92; (b&#92;leadsto f(a))&#92;to Q(b)' title='&#92;simeq &#92;prod(a:A),&#92; P(a)&#92;to&#92;prod(b:B),&#92; (b&#92;leadsto f(a))&#92;to Q(b)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+P%28a%29%5Cto+Q%28f%28a%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; P(a)&#92;to Q(f(a))' title='&#92;simeq &#92;prod(a:A),&#92; P(a)&#92;to Q(f(a))' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cmathsf%7Bhom%7D%28P%2Cf%5E%5Cast%28Q%29%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;mathsf{hom}(P,f^&#92;ast(Q)).' title='= &#92;mathsf{hom}(P,f^&#92;ast(Q)).' class='latex' /><br />
<em>QED.</em></p>
<p><strong>Definition.</strong> <em>Suppose that <img src='http://s0.wp.com/latex.php?latex=f%3AA%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f:A&#92;to B' title='f:A&#92;to B' class='latex' /> is a function. Define the function <img src='http://s0.wp.com/latex.php?latex=%5Cforall_f%3A%28A%5Cto%5Cmathsf%7BType%7D%29%5Cto%28B%5Cto%5Cmathsf%7BType%7D%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall_f:(A&#92;to&#92;mathsf{Type})&#92;to(B&#92;to&#92;mathsf{Type})' title='&#92;forall_f:(A&#92;to&#92;mathsf{Type})&#92;to(B&#92;to&#92;mathsf{Type})' class='latex' /> given by</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cforall_f%28P%29%28b%29%3D%5Cprod%28a%3AA%29%2C%5C+%28f%28a%29%5Cleadsto+b%29%5Cto+P%28a%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall_f(P)(b)=&#92;prod(a:A),&#92; (f(a)&#92;leadsto b)&#92;to P(a).' title='&#92;forall_f(P)(b)=&#92;prod(a:A),&#92; (f(a)&#92;leadsto b)&#92;to P(a).' class='latex' /></em></p>
<p><strong>Remark.</strong> Again, we may consider the map <img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bproj_1%7D%3AB%5Ctimes+Y%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{proj_1}:B&#92;times Y&#92;to B' title='&#92;mathsf{proj_1}:B&#92;times Y&#92;to B' class='latex' /> to verify that <img src='http://s0.wp.com/latex.php?latex=%5Cforall_%5Cmathsf%7Bproj_1%7D+%28P%29%28b%29%5Csimeq%5Cprod%28y%3AY%29%2C%5C+P%28b%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall_&#92;mathsf{proj_1} (P)(b)&#92;simeq&#92;prod(y:Y),&#92; P(b,y)' title='&#92;forall_&#92;mathsf{proj_1} (P)(b)&#92;simeq&#92;prod(y:Y),&#92; P(b,y)' class='latex' />.</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cforall_%5Cmathsf%7Bproj_1%7D%28P%29%28b%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall_&#92;mathsf{proj_1}(P)(b)' title='&#92;forall_&#92;mathsf{proj_1}(P)(b)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D%5Cprod%28%5Clangle+b%5E%5Cprime%2Cy%5Crangle%3AB%5Ctimes+Y%29%2C%5C+%28b%5E%5Cprime%5Cleadsto+b%29%5Cto+P%28b%5E%5Cprime%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='=&#92;prod(&#92;langle b^&#92;prime,y&#92;rangle:B&#92;times Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;to P(b^&#92;prime,y)' title='=&#92;prod(&#92;langle b^&#92;prime,y&#92;rangle:B&#92;times Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;to P(b^&#92;prime,y)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28b%5E%5Cprime%3AB%29%28y%3AY%29%2C%5C+%28b%5E%5Cprime%5Cleadsto+b%29%5Cto+P%28b%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(b^&#92;prime:B)(y:Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;to P(b,y)' title='&#92;simeq &#92;prod(b^&#92;prime:B)(y:Y),&#92; (b^&#92;prime&#92;leadsto b)&#92;to P(b,y)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cleft%28%5Csum%28b%5E%5Cprime%3AB%29%2C%5C+b%5E%5Cprime%5Cleadsto+b%5Cright%29%5Cto+%5Cprod%28y%3AY%29%2C%5C+P%28b%2Cy%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;left(&#92;sum(b^&#92;prime:B),&#92; b^&#92;prime&#92;leadsto b&#92;right)&#92;to &#92;prod(y:Y),&#92; P(b,y)' title='&#92;simeq &#92;left(&#92;sum(b^&#92;prime:B),&#92; b^&#92;prime&#92;leadsto b&#92;right)&#92;to &#92;prod(y:Y),&#92; P(b,y)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28y%3AY%29%2C%5C+P%28b%2Cy%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(y:Y),&#92; P(b,y).' title='&#92;simeq &#92;prod(y:Y),&#92; P(b,y).' class='latex' /></p>
<p>Thus, <img src='http://s0.wp.com/latex.php?latex=%5Cforall_f&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall_f' title='&#92;forall_f' class='latex' /> generalizes the original dependent product construction.</p>
<p><strong>Lemma.</strong> <em>For all <img src='http://s0.wp.com/latex.php?latex=P%3AA%5Cto%5Cmathsf%7BType%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P:A&#92;to&#92;mathsf{Type}' title='P:A&#92;to&#92;mathsf{Type}' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=Q%3AB%5Cto%5Cmathsf%7BType%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q:B&#92;to&#92;mathsf{Type}' title='Q:B&#92;to&#92;mathsf{Type}' class='latex' /> we have the equivalence</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28f%5E%5Cast%28Q%29%2CP%29%5Csimeq%5Cmathsf%7Bhom%7D%28Q%2C%5Cforall_f%28P%29%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(f^&#92;ast(Q),P)&#92;simeq&#92;mathsf{hom}(Q,&#92;forall_f(P)).' title='&#92;mathsf{hom}(f^&#92;ast(Q),P)&#92;simeq&#92;mathsf{hom}(Q,&#92;forall_f(P)).' class='latex' /></em></p>
<p><em>Proof.</em> In a similar calculation as before, we derive</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28Q%2C%5Cforall_f%28P%29%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(Q,&#92;forall_f(P))' title='&#92;mathsf{hom}(Q,&#92;forall_f(P))' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D%5Cprod%28b%3AB%29%2C%5C+Q%28b%29%5Cto%5Cprod%28a%3AA%29%2C%5C+%28f%28a%29%5Cleadsto+b%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='=&#92;prod(b:B),&#92; Q(b)&#92;to&#92;prod(a:A),&#92; (f(a)&#92;leadsto b)&#92;to P(a)' title='=&#92;prod(b:B),&#92; Q(b)&#92;to&#92;prod(a:A),&#92; (f(a)&#92;leadsto b)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%28b%3AB%29%2C%5C+Q%28b%29%5Cto%28f%28a%29%5Cleadsto+b%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A)(b:B),&#92; Q(b)&#92;to(f(a)&#92;leadsto b)&#92;to P(a)' title='&#92;simeq &#92;prod(a:A)(b:B),&#92; Q(b)&#92;to(f(a)&#92;leadsto b)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+%5Cbig%28%5Csum%28b%3AB%29%2C%5C+Q%28b%29%5Ctimes+%28f%28a%29%5Cleadsto+b%29%5Cbig%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; &#92;big(&#92;sum(b:B),&#92; Q(b)&#92;times (f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' title='&#92;simeq &#92;prod(a:A),&#92; &#92;big(&#92;sum(b:B),&#92; Q(b)&#92;times (f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+%5Cbig%28%5Csum%28b%3AB%29%2C%5C+Q%28f%28a%29%29%5Ctimes+%28f%28a%29%5Cleadsto+b%29%5Cbig%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; &#92;big(&#92;sum(b:B),&#92; Q(f(a))&#92;times (f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' title='&#92;simeq &#92;prod(a:A),&#92; &#92;big(&#92;sum(b:B),&#92; Q(f(a))&#92;times (f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+Q%28f%28a%29%29%5Ctimes%5Cbig%28%5Csum%28b%3AB%29%2C%5C+f%28a%29%5Cleadsto+b%29%5Cbig%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; Q(f(a))&#92;times&#92;big(&#92;sum(b:B),&#92; f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' title='&#92;simeq &#92;prod(a:A),&#92; Q(f(a))&#92;times&#92;big(&#92;sum(b:B),&#92; f(a)&#92;leadsto b)&#92;big)&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28a%3AA%29%2C%5C+Q%28f%28a%29%29%5Cto+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(a:A),&#92; Q(f(a))&#92;to P(a)' title='&#92;simeq &#92;prod(a:A),&#92; Q(f(a))&#92;to P(a)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cmathsf%7Bhom%7D%28f%5E%5Cast%28Q%29%2CP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;mathsf{hom}(f^&#92;ast(Q),P)' title='= &#92;mathsf{hom}(f^&#92;ast(Q),P)' class='latex' /><br />
<em>QED.</em></p>
<p><strong>Definition.</strong> <em>We may define the dependent type <img src='http://s0.wp.com/latex.php?latex=Q%5EP&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q^P' title='Q^P' class='latex' /> over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> by</p>
<p><img src='http://s0.wp.com/latex.php?latex=Q%5EP%28a%29%3D%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%5Ctimes+P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q^P(a)=&#92;mathsf{hom}(&#92;mathscr{Y}(a)&#92;times P,Q)' title='Q^P(a)=&#92;mathsf{hom}(&#92;mathscr{Y}(a)&#92;times P,Q)' class='latex' /></p>
<p>The product <img src='http://s0.wp.com/latex.php?latex=P%5E%5Cprime%5Ctimes+P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P^&#92;prime&#92;times P' title='P^&#92;prime&#92;times P' class='latex' /> of two dependent types over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> is defined pointwise as <img src='http://s0.wp.com/latex.php?latex=%28P%5E%5Cprime%5Ctimes+P%29%28a%29%3DP%5E%5Cprime%28a%29%5Ctimes+P%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(P^&#92;prime&#92;times P)(a)=P^&#92;prime(a)&#92;times P(a)' title='(P^&#92;prime&#92;times P)(a)=P^&#92;prime(a)&#92;times P(a)' class='latex' />.</em></p>
<p><strong>Lemma.</strong> <em>For any triple <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />, <img src='http://s0.wp.com/latex.php?latex=Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q' title='Q' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=R&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='R' title='R' class='latex' /> of dependent types over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> there is an equivalence</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28R%2CQ%5EP%29%5Csimeq%5Cmathsf%7Bhom%7D%28R%5Ctimes+P%2CQ%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(R,Q^P)&#92;simeq&#92;mathsf{hom}(R&#92;times P,Q).' title='&#92;mathsf{hom}(R,Q^P)&#92;simeq&#92;mathsf{hom}(R&#92;times P,Q).' class='latex' /></em></p>
<p><em>Proof.</em> Note that if there is a path from <img src='http://s0.wp.com/latex.php?latex=y&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='y' title='y' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' />, then the spaces <img src='http://s0.wp.com/latex.php?latex=P%28y%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(y)' title='P(y)' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=P%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P(x)' title='P(x)' class='latex' /> are equivalent. Thus we can make the following calculation proving the assertion:</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28R%2CQ%5EP%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(R,Q^P)' title='&#92;mathsf{hom}(R,Q^P)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cprod%28x%3AA%29%2C%5C+R%28x%29%5Cto%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28x%29%5Ctimes+P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;prod(x:A),&#92; R(x)&#92;to&#92;mathsf{hom}(&#92;mathscr{Y}(x)&#92;times P,Q)' title='= &#92;prod(x:A),&#92; R(x)&#92;to&#92;mathsf{hom}(&#92;mathscr{Y}(x)&#92;times P,Q)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cprod%28x%3AA%29%2C%5C+R%28x%29%5Cto%5Cleft%28%5Cprod%28y%3AA%29%2C%5C+%28y%5Cleadsto+x%29%5Ctimes+P%28y%29%5Cto+Q%28y%29%5Cright%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;prod(x:A),&#92; R(x)&#92;to&#92;left(&#92;prod(y:A),&#92; (y&#92;leadsto x)&#92;times P(y)&#92;to Q(y)&#92;right)' title='= &#92;prod(x:A),&#92; R(x)&#92;to&#92;left(&#92;prod(y:A),&#92; (y&#92;leadsto x)&#92;times P(y)&#92;to Q(y)&#92;right)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28x%3AA%29%2C%5C+R%28x%29%5Cto%5Cleft%28%5Cprod+%28y%3AA%29%2C%5C+%28y%5Cleadsto+x%29%5Ctimes+P%28x%29%5Cto+Q%28y%29%5Cright%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;to&#92;left(&#92;prod (y:A),&#92; (y&#92;leadsto x)&#92;times P(x)&#92;to Q(y)&#92;right)' title='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;to&#92;left(&#92;prod (y:A),&#92; (y&#92;leadsto x)&#92;times P(x)&#92;to Q(y)&#92;right)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28x%3AA%29%2C%5C+R%28x%29%5Cto+P%28x%29%5Cto+%5Cleft%28%5Cprod%28y%3AA%29%2C%5C+%28y%5Cleadsto+x%29%5Cto+Q%28y%29%5Cright%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;to P(x)&#92;to &#92;left(&#92;prod(y:A),&#92; (y&#92;leadsto x)&#92;to Q(y)&#92;right)' title='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;to P(x)&#92;to &#92;left(&#92;prod(y:A),&#92; (y&#92;leadsto x)&#92;to Q(y)&#92;right)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%5Csimeq+%5Cprod%28x%3AA%29%2C%5C+R%28x%29%5Ctimes+P%28x%29%5Cto+Q%28x%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;times P(x)&#92;to Q(x)' title='&#92;simeq &#92;prod(x:A),&#92; R(x)&#92;times P(x)&#92;to Q(x)' class='latex' /><br />
<img src='http://s0.wp.com/latex.php?latex=%3D+%5Cmathsf%7Bhom%7D%28R%5Ctimes+P%2CQ%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='= &#92;mathsf{hom}(R&#92;times P,Q).' title='= &#92;mathsf{hom}(R&#92;times P,Q).' class='latex' /><br />
<em>QED.</em></p>
<p><strong>Remark.</strong> That the categorical definition of exponentiation doesn&#8217;t fail is no surprise. But actually we could get exponentiation easier by defining <img src='http://s0.wp.com/latex.php?latex=P%5Cto+Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P&#92;to Q' title='P&#92;to Q' class='latex' /> to be the dependent type over <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> given by <img src='http://s0.wp.com/latex.php?latex=%28P%5Cto+Q%29%28a%29%3A%3DP%28a%29%5Cto+Q%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(P&#92;to Q)(a):=P(a)&#92;to Q(a)' title='(P&#92;to Q)(a):=P(a)&#92;to Q(a)' class='latex' />. The correspondence</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7Bhom%7D%28R%2CP%5Cto+Q%29%5Csimeq%5Cmathsf%7Bhom%7D%28R%5Ctimes+P%2CQ%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{hom}(R,P&#92;to Q)&#92;simeq&#92;mathsf{hom}(R&#92;times P,Q)' title='&#92;mathsf{hom}(R,P&#92;to Q)&#92;simeq&#92;mathsf{hom}(R&#92;times P,Q)' class='latex' /></p>
<p>is then immediate. By taking <img src='http://s0.wp.com/latex.php?latex=R&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='R' title='R' class='latex' /> to be <img src='http://s0.wp.com/latex.php?latex=%5Cmathscr%7BY%7D%28a%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathscr{Y}(a)' title='&#92;mathscr{Y}(a)' class='latex' /> and using the Yoneda lemma, we get</p>
<p><img src='http://s0.wp.com/latex.php?latex=%28P%5Cto+Q%29%28a%29%5Csimeq%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%2CP%5Cto+Q%29%5Csimeq%5Cmathsf%7Bhom%7D%28%5Cmathscr%7BY%7D%28a%29%5Ctimes+P%2CQ%29%3DQ%5EP%28a%29.&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(P&#92;to Q)(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P&#92;to Q)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a)&#92;times P,Q)=Q^P(a).' title='(P&#92;to Q)(a)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a),P&#92;to Q)&#92;simeq&#92;mathsf{hom}(&#92;mathscr{Y}(a)&#92;times P,Q)=Q^P(a).' class='latex' /></p>
<p>Hence the dependent types <img src='http://s0.wp.com/latex.php?latex=P%5Cto+Q&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P&#92;to Q' title='P&#92;to Q' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=Q%5EP&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='Q^P' title='Q^P' class='latex' /> are equivalent, which comes down to the fact that we could have gotten away with the naive approach regarding exponentiation.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/797/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/797/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/797/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=797&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/05/02/a-type-theoretical-yoneda-lemma/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">egbertrijke</media:title>
		</media:content>

		<media:content url="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-011.png?w=300" medium="image">
			<media:title type="html">yoneda-diagram-01</media:title>
		</media:content>

		<media:content url="http://hottheory.files.wordpress.com/2012/05/yoneda-diagram-02.png?w=300" medium="image">
			<media:title type="html">yoneda-diagram-02</media:title>
		</media:content>
	</item>
		<item>
		<title>HoTT Updates</title>
		<link>http://homotopytypetheory.org/2012/04/29/hott-updates/</link>
		<comments>http://homotopytypetheory.org/2012/04/29/hott-updates/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 01:43:52 +0000</pubDate>
		<dc:creator>Steve Awodey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=788</guid>
		<description><![CDATA[Many updates have been made to the various other pages on the site: Code, Events, Links, People, References.  For example, there are several new items on models of the Univalence Axiom on the References page.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=788&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Many updates have been made to the various other pages on the site: Code, Events, Links, People, References.  For example, there are several new items on models of the Univalence Axiom on the References page.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/788/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/788/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/788/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=788&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/04/29/hott-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">steveawodey</media:title>
		</media:content>
	</item>
		<item>
		<title>A direct proof of Hedberg&#8217;s theorem</title>
		<link>http://homotopytypetheory.org/2012/03/30/a-direct-proof-of-hedbergs-theorem/</link>
		<comments>http://homotopytypetheory.org/2012/03/30/a-direct-proof-of-hedbergs-theorem/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 16:03:06 +0000</pubDate>
		<dc:creator>Nicolai Kraus</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=718</guid>
		<description><![CDATA[In his article published 1998, Michael Hedberg has shown that a type with decidable equality also features the uniqueness of identity proofs property. Reading through Nils Anders Danielsson&#8217;s Agda formalization, I noticed that the statement &#8220;A has decidable equality&#8221;, i.e. &#8230; <a href="http://homotopytypetheory.org/2012/03/30/a-direct-proof-of-hedbergs-theorem/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=718&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In his article published 1998, Michael Hedberg has shown that a type with decidable equality also features the uniqueness of identity proofs property. Reading through <a href="http://www.cse.chalmers.se/~nad/listings/equality/Equality.Decidable-UIP.html">Nils Anders Danielsson&#8217;s Agda formalization</a>, I noticed that the statement &#8220;A has decidable equality&#8221;, i.e. <img src='http://s0.wp.com/latex.php?latex=%5Cforall+x%2C+y+%3A+A+.+%28x+%5Cleadsto+y%29+%2B+%28x+%5Cleadsto+y+%5Crightarrow+%5Cbot%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;forall x, y : A . (x &#92;leadsto y) + (x &#92;leadsto y &#92;rightarrow &#92;bot)' title='&#92;forall x, y : A . (x &#92;leadsto y) + (x &#92;leadsto y &#92;rightarrow &#92;bot)' class='latex' />, looks pretty similar to &#8220;A is contractible&#8221;, i.e. <img src='http://s0.wp.com/latex.php?latex=%5Cexists+x+%3A+A+.+%5Cforall+y+%3A+A.+x+%5Cleadsto+y&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;exists x : A . &#92;forall y : A. x &#92;leadsto y' title='&#92;exists x : A . &#92;forall y : A. x &#92;leadsto y' class='latex' />. Therefore, it is not at all surprising that a slight modification of the <a href="http://www.cse.chalmers.se/~nad/listings/equality/H-level.html">proof that the h-level is upwards closed</a> works as a more direct proof for Hedberg&#8217;s theorem than the original one, but I want to share my Coq-Code anyway.</p>
<p>There is also a simple slight improvement of the theorem, stating that &#8220;local decidability of equality&#8221; implies &#8220;local UIP&#8221;. I use the definition of the identity type and some basic properties from <a href="https://github.com/andrejbauer/Homotopy/blob/master/UnivalentFoundations/HomotopyDefinitions.v">Andrej Bauer&#8217;s github</a>.</p>
<p>A file containing the complete Coq code (inclusive the lines that are necessary to make the code below work) can be found <a href="http://red.cs.nott.ac.uk/~ngk/hedberg_direct.v">here</a>.</p>
<p>I first prove a (local) lemma, namely that any identity proof is equal to one that can be extracted from the decidability term dec. Of course, this is already nearly the complete proof. I do that as follows: given <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=y+%5Cin+A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='y &#92;in A' title='y &#92;in A' class='latex' /> and a proof <img src='http://s0.wp.com/latex.php?latex=p&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='p' title='p' class='latex' /> that they are equal, I check what <img src='http://s0.wp.com/latex.php?latex=%5Cmathtt%7Bdec%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathtt{dec}' title='&#92;mathtt{dec}' class='latex' /> &#8220;thinks&#8221; about <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=y&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='y' title='y' class='latex' /> (as well as <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' />). If <img src='http://s0.wp.com/latex.php?latex=%5Cmathtt%7Bdec%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathtt{dec}' title='&#92;mathtt{dec}' class='latex' /> tells me they are not equal, I get an obvious contradiction. Otherwise, <img src='http://s0.wp.com/latex.php?latex=%5Cmathtt%7Bdec%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathtt{dec}' title='&#92;mathtt{dec}' class='latex' /> precisely says that they are in the same &#8220;contractible component&#8221;, so I can just go on as in the proof that the h-level is upwards closed. With this lemma at hand, the rest is immediate.</p>
<pre>Theorem hedberg A : dec_equ A -&gt; uip A.
Proof.
  intros A dec x y.

  assert ( 
    lemma :
    forall proof : x ~~&gt; y,  
    match dec x x, dec x y with
    | inl r, inl s =&gt; proof ~~&gt; !r @ s
    | _, _ =&gt; False
    end
  ).
  Proof.
    induction proof.
    destruct (dec x x) as [pr | f].
    apply opposite_left_inverse.
    exact (f (idpath x)).

  intros p q.
  assert (p_given_by_dec := lemma p).
  assert (q_given_by_dec := lemma q).
  destruct (dec x x).
  destruct (dec x y).
  apply (p_given_by_dec @ !q_given_by_dec).
  contradiction.
  contradiction.
Qed.</pre>
<p>Christian Sattler has pointed out to me that the above proof can actually be used to show the following slightly stronger version of Hedberg&#8217;s theorem (again, see <a href="http://red.cs.nott.ac.uk/~ngk/hedberg_direct.v">here</a>), stating that &#8220;local decidability implies local UIP&#8221;:</p>
<pre>Theorem hedberg_strong A (x : A) : 
  (forall y : A, decidable (x ~~&gt; y)) -&gt; 
  (forall y : A, proof_irrelevant (x ~~&gt; y)).</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/718/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/718/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=718&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/03/30/a-direct-proof-of-hedbergs-theorem/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">nicolaikraus</media:title>
		</media:content>
	</item>
		<item>
		<title>Modeling Univalence in Inverse Diagrams</title>
		<link>http://homotopytypetheory.org/2012/03/15/inverse-diagrams/</link>
		<comments>http://homotopytypetheory.org/2012/03/15/inverse-diagrams/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 00:35:21 +0000</pubDate>
		<dc:creator>Mike Shulman</dc:creator>
				<category><![CDATA[Models]]></category>
		<category><![CDATA[Paper]]></category>
		<category><![CDATA[Univalence]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=698</guid>
		<description><![CDATA[I have just posted the following preprint, which presents new set-theoretic models of univalence in categories of simplicial diagrams over inverse categories (or, more generally, diagrams over inverse categories starting from any existing model of univalence). The univalence axiom for &#8230; <a href="http://homotopytypetheory.org/2012/03/15/inverse-diagrams/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=698&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just posted the following preprint, which presents new set-theoretic models of univalence in categories of simplicial diagrams over <i>inverse categories</i> (or, more generally, diagrams over inverse categories starting from any existing model of univalence).</p>
<ul>
<li><a href="http://arxiv.org/abs/1203.3253">The univalence axiom for inverse diagrams</a>.</li>
</ul>
<p>For completeness, I also included a sketch of how to use a universe object to deal with coherence in the categorical interpretation of type theory, and of the meaning of various basic notions in homotopy type theory under categorical semantics in homotopy theory.</p>
<p><!-- more --></p>
<p>An <a href="http://nlab.mathforge.org/nlab/show/direct+category">inverse category</a> is one that contains no infinite composable strings <img src='http://s0.wp.com/latex.php?latex=%5Cto%5C%3B%5Cto%5C%3B%5Cto%5C%3B%5Ccdots&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;to&#92;;&#92;to&#92;;&#92;to&#92;;&#92;cdots' title='&#92;to&#92;;&#92;to&#92;;&#92;to&#92;;&#92;cdots' class='latex' /> of nonidentity arrows.  An equivalent, but better, definition is that the relation &#8220;<i>x</i> receives a nonidentity arrow from <i>y</i>&#8221; on its objects is well-founded.</p>
<p>This means that we can use well-founded induction to construct diagrams, and morphisms between diagrams, on an inverse category.  Homotopy theorists have exploited this to define the <i>Reedy model structure</i> for diagrams indexed on an inverse category in any model category.  The Reedy cofibrations and weak equivalences are levelwise, and a diagram <img src='http://s0.wp.com/latex.php?latex=A%5Ccolon+I%5Cto+C&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A&#92;colon I&#92;to C' title='A&#92;colon I&#92;to C' class='latex' /> is Reedy fibrant if for each <img src='http://s0.wp.com/latex.php?latex=x%5Cin+I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x&#92;in I' title='x&#92;in I' class='latex' />, the map from <img src='http://s0.wp.com/latex.php?latex=A_x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_x' title='A_x' class='latex' /> to the limit of the values of <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' /> on &#8220;all objects below <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' />&#8221; is a fibration.  The Reedy model structure for <img src='http://s0.wp.com/latex.php?latex=C%3D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C=' title='C=' class='latex' /> simplicial sets is a presentation of the <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-presheaf topos <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty+Gpd%29%5EI&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty Gpd)^I' title='(&#92;infty Gpd)^I' class='latex' />.</p>
<p>For example, if <img src='http://s0.wp.com/latex.php?latex=I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='I' title='I' class='latex' /> is the arrow category <img src='http://s0.wp.com/latex.php?latex=%281%5Cto+0%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(1&#92;to 0)' title='(1&#92;to 0)' class='latex' />, then a diagram <img src='http://s0.wp.com/latex.php?latex=A_1+%5Cto+A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_1 &#92;to A_0' title='A_1 &#92;to A_0' class='latex' /> is Reedy fibrant if the following two conditions hold.</p>
<ol>
<li><img src='http://s0.wp.com/latex.php?latex=A_0%5Cto+1&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_0&#92;to 1' title='A_0&#92;to 1' class='latex' /> is a fibration (i.e. <img src='http://s0.wp.com/latex.php?latex=A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_0' title='A_0' class='latex' /> is fibrant).  Here 1 is the limit of the empty diagram (there being no objects below <img src='http://s0.wp.com/latex.php?latex=0%5Cin+I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='0&#92;in I' title='0&#92;in I' class='latex' />)
<li><img src='http://s0.wp.com/latex.php?latex=A_1+%5Cto+A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_1 &#92;to A_0' title='A_1 &#92;to A_0' class='latex' /> is a fibration.  Here <img src='http://s0.wp.com/latex.php?latex=A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_0' title='A_0' class='latex' /> is the limit of the corresponding singleton diagram, since 0 is the unique object below <img src='http://s0.wp.com/latex.php?latex=1%5Cin+I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='1&#92;in I' title='1&#92;in I' class='latex' />.
</ol>
<p>The central observation which makes this useful for modeling type theory is that</p>
<blockquote><p>
Reedy fibrant diagrams on an inverse category can be identified with certain contexts in type theory.
</p></blockquote>
<p>For instance, in a Reedy fibrant diagram on the arrow category, we have firstly a fibrant object <img src='http://s0.wp.com/latex.php?latex=A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_0' title='A_0' class='latex' />, which represents a type, and then we have a fibration <img src='http://s0.wp.com/latex.php?latex=A_1+%5Cto+A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_1 &#92;to A_0' title='A_1 &#92;to A_0' class='latex' />, which represents a type dependent on <img src='http://s0.wp.com/latex.php?latex=A_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A_0' title='A_0' class='latex' />.  Thus the whole diagram can be considered as a context of the form</p>
<p><img src='http://s0.wp.com/latex.php?latex=a_0%5Ccolon+A_0+%2C%5C%3B+a_1%5Ccolon+A_1%28a_0%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='a_0&#92;colon A_0 ,&#92;; a_1&#92;colon A_1(a_0)' title='a_0&#92;colon A_0 ,&#92;; a_1&#92;colon A_1(a_0)' class='latex' /></p>
<p>Similar interpretations are possible for all inverse categories (possibly involving &#8220;infinite contexts&#8221; if the category is infinite).  This view of contexts as diagrams appears in Makkai&#8217;s work on &#8220;FOLDS&#8221;, and seems likely to have occurred to others as well.</p>
<p>Using this observation, we can inductively build a (Reedy fibrant) universe in <img src='http://s0.wp.com/latex.php?latex=C%5EI&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C^I' title='C^I' class='latex' /> out of a universe in <img src='http://s0.wp.com/latex.php?latex=C&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C' title='C' class='latex' />.  For instance, suppose <img src='http://s0.wp.com/latex.php?latex=U&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='U' title='U' class='latex' /> is a fibrant object representing a universe in <img src='http://s0.wp.com/latex.php?latex=C&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C' title='C' class='latex' />, and let <img src='http://s0.wp.com/latex.php?latex=I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='I' title='I' class='latex' /> be the arrow category <img src='http://s0.wp.com/latex.php?latex=%281%5Cto+0%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(1&#92;to 0)' title='(1&#92;to 0)' class='latex' />.  Then the universe we obtain in <img src='http://s0.wp.com/latex.php?latex=C%5EI&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C^I' title='C^I' class='latex' /> is the fibration <img src='http://s0.wp.com/latex.php?latex=U%5E%7B%281%29%7D+%5Cto+U&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='U^{(1)} &#92;to U' title='U^{(1)} &#92;to U' class='latex' /> that is the <i>universal dependent type</i>.  Regarded as a dependent type in context, this fibration is</p>
<p><img src='http://s0.wp.com/latex.php?latex=A%5Ccolon+%5Cmathrm%7BType%7D++%5C%3B%5Cvdash%5C%3B++%28A+%5Cto+%5Cmathrm%7BType%7D%29+%5Ccolon+%5Cmathrm%7BType%7D_1+&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='A&#92;colon &#92;mathrm{Type}  &#92;;&#92;vdash&#92;;  (A &#92;to &#92;mathrm{Type}) &#92;colon &#92;mathrm{Type}_1 ' title='A&#92;colon &#92;mathrm{Type}  &#92;;&#92;vdash&#92;;  (A &#92;to &#92;mathrm{Type}) &#92;colon &#92;mathrm{Type}_1 ' class='latex' /></p>
<p>We can then prove, essentially working only in the internal type theory of <img src='http://s0.wp.com/latex.php?latex=C&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C' title='C' class='latex' />, that the objects of <img src='http://s0.wp.com/latex.php?latex=C%5EI&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C^I' title='C^I' class='latex' /> classified by this universe are closed under all the type forming operations, and moreover that this universe inherits univalence from the universe we started with in <img src='http://s0.wp.com/latex.php?latex=C&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C' title='C' class='latex' />.  In particular, starting with Voevodsky&#8217;s universal Kan fibration for <img src='http://s0.wp.com/latex.php?latex=C%3D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='C=' title='C=' class='latex' /> simplicial sets, we obtain a model of univalence in simplicial diagrams on <img src='http://s0.wp.com/latex.php?latex=I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='I' title='I' class='latex' />, hence in the <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-presheaf topos <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty+Gpd%29%5EI&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty Gpd)^I' title='(&#92;infty Gpd)^I' class='latex' />.</p>
<p>Combining this with my <a href="http://homotopytypetheory.org/2011/12/06/modeling-univalence-in-subtoposes/">previous idea</a>, we should be able to get models in <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-toposes of <i>sheaves</i> for any topology on an inverse category.  But unfortunately, inverse categories don&#8217;t seem likely to support very many interesting topologies.</p>
<p>So far, I haven&#8217;t been able to generalize this beyond inverse categories.  The Reedy model structure exists whenever <img src='http://s0.wp.com/latex.php?latex=I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='I' title='I' class='latex' /> is a <a href="http://nlab.mathforge.org/nlab/show/Reedy+category">Reedy category</a>, which is more general than an inverse category.  But in the general case, the cofibrations are no longer levelwise, and the dependent products seem to involve equalizers, and I haven&#8217;t been able to get a handle on things.  A different idea is to use diagrams on inverse categories to &#8220;bootstrap&#8221; our way up to other models, but I haven&#8217;t been able to get anything like that to work yet either.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/698/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/698/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/698/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=698&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/03/15/inverse-diagrams/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Mike Shulman</media:title>
		</media:content>
	</item>
		<item>
		<title>Univalence versus Extraction</title>
		<link>http://homotopytypetheory.org/2012/01/22/univalence-versus-extraction/</link>
		<comments>http://homotopytypetheory.org/2012/01/22/univalence-versus-extraction/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 22:32:57 +0000</pubDate>
		<dc:creator>Mike Shulman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=684</guid>
		<description><![CDATA[From a homotopical perspective, Coq&#8217;s built-in sort Prop is like an undecided voter, wooed by both the extensional and the intensional parties. Sometimes it leans one way, sometimes the other, at times flirting with inconsistency. In the traditional view of &#8230; <a href="http://homotopytypetheory.org/2012/01/22/univalence-versus-extraction/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=684&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From a homotopical perspective, Coq&#8217;s built-in sort <tt>Prop</tt> is like an undecided voter, wooed by both the extensional and the intensional parties.  Sometimes it leans one way, sometimes the other, at times flirting with inconsistency.</p>
<p><span id="more-684"></span></p>
<p>In the traditional view of Coq, we think of types in <tt>Prop</tt> as <i>propositions</i> and their inhabitants as <i>proofs</i>.  Thus, knowing <i>that</i> a type of sort <tt>Prop</tt> is inhabited is considered more important than knowing anything <i>about</i> a particular inhabitant of it.  This point of view is officially enshrined in Coq&#8217;s mechanism for &#8220;extraction&#8221; to executable code (such as ML or Haskell), which purposely discards all information about inhabitants of types in <tt>Prop</tt>.  (Something like this is important for developing verified computer software in Coq &mdash; we don&#8217;t want the resulting software to have to carry along the baggage of the proofs that it is correct.)</p>
<p>In homotopy type theory, it&#8217;s natural to want to interpret this by thinking of <tt>Prop</tt> as a universe of h-propositions (types of h-level 1, which are contractible as soon as they are inhabited).  But for better or for worse, this is an invalid way to think &mdash; at least, given the way Coq currently treats <tt>Prop</tt>.  For one thing, nowhere <i>inside</i> the Coq type system is the &#8220;proof-irrevelance&#8221; of <tt>Prop</tt> enforced: it appears perfectly consistent for a type in <tt>Prop</tt> to have multiple distinct inhabitants.  In particular, nothing forces Coq&#8217;s built-in <tt>Prop</tt>-valued identity types &#8220;<tt>eq</tt>&#8221; to be extensional (other than an axiom to that effect).</p>
<p>But actually, things are even worse than that: as soon as there are types anywhere in Coq that are not h-sets, then there must be types in <tt>Prop</tt> that are not h-props.  Specifically, the <tt>Prop</tt>-valued equality of any type is provably equivalent, in Coq, to its <tt>Type</tt>-valued equality (i.e. its path type) &mdash; thus the <tt>Prop</tt>-valued equality of a non-hset must be a non-hprop.</p>
<p>Why must the two equalities be equivalent?  The short answer is that they have the same inductive definition, hence the same universal property.  But something has to be said about why that is, since in general an inductive type in sort <tt>Prop</tt> <i>doesn&#8217;t</i> have the same universal property as the corresponding one in sort <tt>Type</tt>.  And the reason for <i>that</i> goes back to thinking of <tt>Prop</tt> as consisting of h-propositions again (see what I mean about being undecided?).</p>
<p>Specifically, if <tt>Prop</tt> were to consist of h-props, then we would then have to regard inductively defined types in sort <tt>Prop</tt> (which include propositional operations like &#8220;and&#8221;, &#8220;or&#8221;, and &#8220;there exists&#8221;, and also the equality <tt>eq</tt>) as being obtained from ordinary inductive types (in sort <tt>Type</tt>) by applying the h-prop reflection (= bracket type, squash type, support, <tt>is_inhab</tt>, etc.).  In particular, the <tt>Prop</tt>-valued equality <tt>eq</tt> would be the h-prop reflection of the path type (and in particular would be an h-prop).  And if inductive types in <tt>Prop</tt> were defined in this way, we would only be able to eliminate out of them into other types in <tt>Prop</tt> (by combining the eliminator of the original inductive type with the universal property of the h-prop reflection).  Reflective subcategories are like one-way driveways: once you&#8217;ve been reflected into h-prop, you can&#8217;t back up without suffering Severe Tire Damage.</p>
<p>And, indeed, Coq does <i>mostly</i> adhere to this philosophy in its treatment of <tt>Prop</tt>: the eliminators for inductively defined types in <tt>Prop</tt> can generally only be applied when the target is also of sort <tt>Prop</tt>.  However, Coq also includes a sneaky back alley leading out of <tt>Prop</tt>: <a href="http://coq.inria.fr/refman/Reference-Manual006.html#@default349">singleton elimination</a>.  If an inductive type in sort <tt>Prop</tt> has at most one constructor and all arguments of that constructor are in <tt>Prop</tt>, then Coq allows us to eliminate out of it into all types, not just those in <tt>Prop</tt>.  One argues, I guess, that in this case, the singleton constructor is &#8220;uninformative&#8221; and so it causes no harm to eliminate out of it.</p>
<p>In particular, since equality/identity types can be defined as an inductive family using only one constructor which takes no arguments, this rule applies to them.  Hence, Coq&#8217;s <tt>Prop</tt>-valued equality has exactly the same universal property as the <tt>Type</tt>-valued path-types, and so they are equivalent.</p>
<p>(It&#8217;s a tiny bit tricky to prove this in Coq, though, since the induction principles that Coq builds for inductive types of sort <tt>Prop</tt> are hamstrung compared to those for ordinary inductive types: they don&#8217;t allow for dependency of the target on the inductive type itself.  This is, again, in keeping with the &#8220;proof-irrelevance&#8221; philosophy; nothing can depend interestingly on an inhabitant of a proposition.  However, Coq&#8217;s induction principles like <tt>eq_rect</tt> are not basic but are implemented in terms of <tt>match</tt> syntax, and the latter still allows full dependent elimination even for inductive types in <tt>Prop</tt>.  We can tell Coq to build us a better induction principle for <tt>eq</tt> by saying <tt>Scheme eq_ind' := Induction for eq Sort Prop.</tt>, and then use it with <tt>induction p using eq_ind'</tt>.)</p>
<p>It follows that if we add to Coq an axiom which contradicts extensionality (such as univalence), then while the type system need not become inconsistent (since, as I said, nowhere <i>internally</i> does Coq enforce proof-irrelevance for <tt>Prop</tt>), the <i>extraction process</i> (which does assume proof-irrelevance) becomes inconsistent.  What I mean by that is, assuming univalence (and nothing else), we can define a term inside of Coq which <i>extracts to</i> a term claiming to inhabit the empty type.</p>
<p>How does this work?  First consider a simpler claim: we can define a term <tt>X : bool</tt> and prove in Coq that <tt>X = true</tt>, yet observe that <tt>X</tt> extracts to <tt>false</tt>.  To define such an <tt>X</tt>, consider the automorphism <tt>not : bool -&gt; bool</tt>.  It&#8217;s easy to prove that this is an equivalence, so by univalence, it induces a path from <tt>bool</tt> to itself (as a term of type <tt>Type</tt>).  Since path-types are equivalent to eq-types, this induces an inhabitant of Coq&#8217;s <tt>Prop</tt>-valued equality <tt>bool = bool</tt>.  Now, eliminate along this equality to transport <tt>false : bool</tt> into a new term <tt>X : bool</tt>.</p>
<p>Since transporting along a path in <tt>Type</tt> is equivalent to applying the equivalence it came from, <tt>X</tt> is provably equal to <tt>not false</tt>, i.e. to <tt>true</tt>.  However, upon extraction, the <tt>Prop</tt>-valued equality proof <tt>bool = bool</tt> is discarded, and we are left only with <tt>false</tt>.</p>
<p>Now we simply define a family <tt>P : bool -&gt; Type</tt> for which <tt>P true := unit</tt> and <tt>P false := Empty</tt>.  Since <tt>X</tt> is provably <tt>true</tt>, we can define in Coq an inhabitant of <tt>P X</tt>, and upon extraction this will give us a term of type <tt>Empty</tt>.  (Thanks to Peter Lumsdaine for pointing out this improvement of my example.)  Rather than supply the code, I&#8217;ll leave formalizing this as an amusing exercise.</p>
<p>So what <i>is</i> this term of the empty type that we get when we do the extraction?  To express it, the extractor has to resort to <tt>Obj.magic</tt> (in the case of ML) or <tt>unsafeCoerce</tt> (in the case of Haskell), both of which are end-runs around the type system: they convert a value of any type to one of any other type.  But even worse, the extractor actually extracts <i>empty types</i> to <i>unit types</i> for both languages &mdash; thereby sadly depriving us of the chance to find out what an inhabitant of the empty type looks like.</p>
<p>The point of all this silliness, of course, is that if we want to add univalence to Coq and at the same time continue to use it to develop verified software, something has to give.  Specifically, the extractor should really only be throwing away terms that inhabit h-props.  So if we want to use <tt>Prop</tt> as a syntactic marker meaning &#8220;bath-water&#8221;, then we need to enforce that all types in <tt>Prop</tt> are h-props &mdash; or at least ensure that it is <i>consistent</i> to suppose that they are.  (We might want to use <tt>Prop</tt> to store type information that isn&#8217;t provably an h-prop, just as a marker to tell the extractor to throw that information away.)</p>
<p>And finally, <i>that</i> means that singleton elimination will no longer be valid &mdash; at least, not in the generality with which Coq currently permits it.  We ought still to be able to characterize a subclass of singleton eliminations that <i>are</i> valid, including <tt>eq</tt> for h-sets &mdash; which applies to most data types encountered in real-world programming &mdash; but not <tt>eq</tt> for arbitrary types.  But that&#8217;s probably another blog post.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/684/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/684/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/684/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=684&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/01/22/univalence-versus-extraction/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Mike Shulman</media:title>
		</media:content>
	</item>
		<item>
		<title>Inductive Types in HoTT</title>
		<link>http://homotopytypetheory.org/2012/01/19/inductive-types-in-hott/</link>
		<comments>http://homotopytypetheory.org/2012/01/19/inductive-types-in-hott/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 19:46:28 +0000</pubDate>
		<dc:creator>Steve Awodey</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Foundations]]></category>
		<category><![CDATA[Paper]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=654</guid>
		<description><![CDATA[With all the excitement about higher inductive types (e.g. here and here), it seems worthwhile to work out the theory of conventional (lower?) inductive types in HoTT. That&#8217;s what Nicola Gambino, Kristina Sojakova and I have done, as we report &#8230; <a href="http://homotopytypetheory.org/2012/01/19/inductive-types-in-hott/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=654&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>With all the excitement about <em>higher</em> inductive types (e.g. <a href="http://homotopytypetheory.org/2011/04/24/higher-inductive-types-a-tour-of-the-menagerie/" title="Higher Inductive Types: a tour of the&nbsp;menagerie">here</a> and <a href="http://golem.ph.utexas.edu/category/2011/04/homotopy_type_theory_vi.html" title="n-cat cafe">here</a>), it seems worthwhile to work out the theory of conventional (lower?) inductive types in HoTT.  That&#8217;s what Nicola Gambino, Kristina Sojakova and I have done, as we report in the following paper that&#8217;s just been posted on the archive:</p>
<blockquote><p>
<a href="http://arxiv.org/abs/1201.3898" title="ithott">Inductive types in Homotopy Type Theory, S. Awodey, N. Gambino, K. Sojakova, January 2012, arXiv:1201.3898v1.</a>
</p></blockquote>
<p>The <em>main theorem</em> is that in HoTT, what we call the rules for homotopy W-types are equivalent to the existence of homotopy-initial algebras for polynomial functors.  The required definitions are as follows:</p>
<ul>
<li> the <em>rules for homotopy W-types</em>: the usual rules for W-types of formation, introduction, (dependent) elimination, and computation &#8212; but the latter is formulated as a propositional rather than a definitional equality.</li>
<li> a <em>weak map of algebras</em> <img src='http://s0.wp.com/latex.php?latex=%28A%2C+s_A%29+%5Cto+%28B%2C+s_B%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(A, s_A) &#92;to (B, s_B)' title='(A, s_A) &#92;to (B, s_B)' class='latex' /> is a map <img src='http://s0.wp.com/latex.php?latex=f%3AA%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f:A&#92;to B' title='f:A&#92;to B' class='latex' /> together with an identity proof <img src='http://s0.wp.com/latex.php?latex=f%5Ccirc+s_A+%5Csim+s_B%5Ccirc+Pf&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f&#92;circ s_A &#92;sim s_B&#92;circ Pf' title='f&#92;circ s_A &#92;sim s_B&#92;circ Pf' class='latex' />, where <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' /> is the polynomial functor, and a <em><img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />-algebra</em> is just a map <img src='http://s0.wp.com/latex.php?latex=s_A+%3A+PA%5Cto+A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='s_A : PA&#92;to A' title='s_A : PA&#92;to A' class='latex' />, as usual.</li>
<li> an algebra <img src='http://s0.wp.com/latex.php?latex=%28C%2C+s_C%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(C, s_C)' title='(C, s_C)' class='latex' /> is <em>homotopy-initial</em> if for every algebra <img src='http://s0.wp.com/latex.php?latex=%28A%2C+s_A%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(A, s_A)' title='(A, s_A)' class='latex' />, the type of all weak maps <img src='http://s0.wp.com/latex.php?latex=%28C%2C+s_C%29+%5Cto+%28A%2C+s_A%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(C, s_C) &#92;to (A, s_A)' title='(C, s_C) &#92;to (A, s_A)' class='latex' /> is contractible.</li>
</ul>
<p>So in brief, the extensional situation where &#8220;W-type = initial <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />-algebra&#8221; now becomes &#8220;homotopy W-type = homotopy-initial <img src='http://s0.wp.com/latex.php?latex=P&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='P' title='P' class='latex' />-algebra&#8221;.  Perhaps not very surprising, once one finds the right concepts; but satisfying nonetheless.</p>
<p>We focus mainly on W-types because most conventional inductive types like <img src='http://s0.wp.com/latex.php?latex=%5Cmathsf%7BNat%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathsf{Nat}' title='&#92;mathsf{Nat}' class='latex' /> can be reduced to these; in fact, the possibility of such reductions is itself part of our investigation.  There are some results in extensional type theory (cited in the paper) showing that many inductive types are reducible to W-types, and there is some literature (also cited) showing how such reductions can fail in the purely intensional theory. We show that in HoTT some of these reductions go through, provided both the W-types and the inductive types are understood in the appropriate &#8220;homotopical&#8221; way, with propositional computation rules.  The detailed investigation of more such reductions is left as future work.</p>
<p>Of course, the entire development has been formalized in Coq. The files are available in the HoTT repo on GitHub: </p>
<blockquote><p>
<a href="https://github.com/HoTT/HoTT/tree/master/Coq/IT" title="IT in HoTT">https://github.com/HoTT/HoTT/tree/master/Coq/IT</a>
</p></blockquote>
<p>There are also some slides (and even a video somewhere) from a talk I recently gave about this at the MAP Workshop, at the Lorentz Center in Leiden.  These can be found <a href="http://www.lorentzcenter.nl/lc/web/2011/467/presentations/Presentation%20S%20Awodey.pdf" title="Loretz Center slides">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/654/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=654&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2012/01/19/inductive-types-in-hott/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">steveawodey</media:title>
		</media:content>
	</item>
		<item>
		<title>Strong functional extensionality from weak</title>
		<link>http://homotopytypetheory.org/2011/12/19/strong-funext-from-weak/</link>
		<comments>http://homotopytypetheory.org/2011/12/19/strong-funext-from-weak/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 03:02:25 +0000</pubDate>
		<dc:creator>Peter LeFanu Lumsdaine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=637</guid>
		<description><![CDATA[It’s amazing what you can find in the HoTT repository these days! I was browsing it the other week, looking up something quite different, when I came across a theorem in Funext.v (originally by Voevodsky) which answers, in a surprising &#8230; <a href="http://homotopytypetheory.org/2011/12/19/strong-funext-from-weak/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=637&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It’s amazing what you can find in the <a href="https://github.com/HoTT/HoTT">HoTT repository</a> these days!  I was browsing it the other week, looking up something quite different, when I came across a theorem in <a href="https://github.com/HoTT/HoTT/blob/master/Coq/Funext.v"><code>Funext.v</code></a> (originally by Voevodsky) which answers, in a surprising direction, a question posed by Richard Garner in his paper <a href="http://www.comp.mq.edu.au/~rgarner/Pitypes/index.html">On the strength of dependent products…</a>, and as far as I know still open in the literature.</p>
<p>The punchline is, roughly: <em>all forms of functional extensionality seem to be derivable from almost the weakest form you might think of.</em>  In the terminology of Richard’s paper, [Π-ext] and [Π-ext-comp] together imply [Π-ext-app], [Π-Id-elim], and so on; and in fact even the assumption of [Π-ext-comp] is negotiable. <span id="more-637"></span></p>
<p>Coq code for most of what I say here can be found in <a href="https://github.com/peterlefanulumsdaine/HoTT/blob/master/Coq/Funext.v">my fork of  <code>Funext.v</code></a>.</p>
<hr />
<p>The most traditional form of functional extensionality is the statement</p>
<p><em>Naive functional extensionality:</em> If functions take equal values, then they are equal.</p>
<p>We can put a nice gloss on this in homotopical language.  If <i>f</i>, <i>g</i> are dependent functions of type ∏<sub><i>x</i>:<i>A</i></sub> <i>B<sub>x</sub></i>, a <em>homotopy</em> <i>h</i>: <i>f</i> == <i>g</i> is a function giving for each <i>x:A</i> a path <i>h(x)</i> : <i>f(x)</i> = <i>g(x)</i>.  Then naive functional extensionality just posits a map <b>ext</b><sub>f,g</sub>: (<i>f</i> == <i>g</i>) → (<i>f</i> = <i>g</i>), converting homotopies to paths.  (This is the rule [Π-ext] in Richard’s paper.)</p>
<p>In a world where UIP held, this would be quite satisfactory on its own.  But with non-trivial path spaces, one often needs to know more!</p>
<p>For instance, when we feed <b>ext</b> the identity homotopy on a function <i>f</i>, it should give just the identity path on <i>f</i>, not some potentially non-trivial loop.  In other words, we want a path <b>ext-comp</b> <i>f</i>: <b>ext</b>(λ<i>x</i>, r(<i>f</i>(<i>x</i>))) = r(<i>f</i>).  Or we could even ask this to be a definitional equality; this is [Π-ext-comp] in Richard’s paper, and if we think of <b>ext</b> as an eliminator, this is the appropriate computation rule, telling us how it acts on canonical forms.  Let’s call our propositional version [Π-ext-comp-prop].</p>
<p>On the other hand, we might want to know at least something about how the paths produced by <b>ext</b> behave under path-elimination.  In particular, there’s always a canonical function going in the opposite direction, converting homotopies into paths:  <b>happly</b><sub>f,g</sub>: (<i>f</i> = <i>g</i>) → (<i>f</i> == <i>g</i>). (It’s defined just by path-elimination.)  If we produce a path with <b>ext</b> and then take it back with <b>happly</b>, we’d like to get back the homotopy we first thought of, i.e. to have for each <i>h</i> a path <b>ext-app</b> <i>h</i>: <b>happly</b>(<b>ext</b> <i>h</i>) = <i>h</i>.</p>
<p>This is easily interderivable with [Π-ext-app] in the paper; again it has an associated computation principle, [Π-ext-app-comp], but this will be a bit peripheral to our main story, so I won’t go into its details.</p>
<p>In other words, though, [Π-ext-app] just says that <b>ext</b><sub>f,g</sub> is a right up-to-homotopy inverse for <b>happly</b><sub>f,g</sub>.  So we could also consider the principle that it should be a <em>left</em> homotopy inverse for <b>happly</b><sub>f,g</sub> — except that we already have, pretty much!  It’s easy to show — try it as an exercise! — that [Π-ext-comp-prop] is equivalent to <b>ext</b><sub>f,g</sub> being a left homotopy inverse for <b>happly</b><sub>f,g</sub>.</p>
<p>So, taken together [Π-ext], [Π-ext-comp-prop], and [Π-ext-app] imply that <b>happly</b><sub>f,g</sub> is an equivalence; and on the other hand, it clearly implies them all back.  So this can be taken as an alternative form of functional extensionality:</p>
<p><em>Strong functional extensionality:</em> The canonical map <b>happly</b><sub>f,g</sub>: (<i>f</i> = <i>g</i>) → (<i>f</i> == <i>g</i>) is an equivalence.</p>
<p>This is more clearly a homotopically-good statement than the others.  In particular, <a href="http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/">being an equivalence is a mere proposition</a> — so in assuming this, we don’t need to worry about the particular choice of witness being canonical in any sense.  No computation rules needed!</p>
<p>Richard Garner doesn’t discuss this statement in the paper, but he has a closely related rule [Π-Id-elim], which together with its computation rule [Π-Id-elim-comp] says that the types of homotopies (<i>f</i> == <i>g</i>) have the same universal property as the path types (<i>f</i> = <i>g</i>), with the identity homotopy playing the role of the identity path.  It’s not hard to show that modulo making [Π-Id-elim-comp] propositional, this is equivalent to strong functional extensionality — an instance of the general principle that two things with the same universal property should be equivalent.</p>
<p>So now, the question is: to what extent does naive functional extensionality — [Π-ext] alone — imply any of the others?</p>
<p>For a warmup, let’s think about [Π-ext-comp].  Does [Π-ext] imply it?  Yes and no.  [Π-ext-comp] is an assertion about the specific witness <b>ext</b> for [Π-ext]; and while an arbitrary witness <b>ext</b> may not necessarily satisfy [Π-ext-comp], but it can always be “corrected” to one that does.  Proof?  Try this, it’s a nice exercise; <a href="https://github.com/peterlefanulumsdaine/HoTT/blob/master/Coq/Funext.v#L39">solution here</a>.</p>
<p>So, that’s an encouraging start!  Can we similarly get from these to [Π-ext-app], or equivalently to strong functional extensionality?  It’s far from obvious; but this was the surprising theorem that I originally found in <code>Funext.v</code>:</p>
<p><strong>Theorem (Voevodsky).</strong>  Naive functional extensionality implies strong functional extensionality.</p>
<p>What follows is <a href="https://github.com/peterlefanulumsdaine/HoTT/blob/master/Coq/Funext.v#L268">my distillation</a> of <a href="https://github.com/HoTT/HoTT/blob/master/Coq/Funext.v#L201">the proof I first found</a>, which was itself a cleanup by Mike Shulman of Voevodsky’s original proof.  It’s still fairly fiddly, though; so if you’re not in the mood, I recommend <a href="#endofproof">skipping to the end.</a></p>
<p>From what we’ve seen above, it’s enough to show:</p>
<p><strong>Theorem.</strong>  [Π-ext] and [Π-ext-comp-prop] imply [Π-ext-app].</p>
<p><em>Proof.</em> We need to show that for any functions <i>f</i>, <i>g</i> and homotopy <i>f</i>: <i>g</i> == <i>h</i>, we can construct some path <b>happly</b>(<b>ext</b> <i>h</i>) = <i>h</i>.</p>
<p>Fix <i>f</i>, and think of <i>g</i> and <i>h</i> as varying.  In the case where (<i>g</i>,<i>h</i>) is the pair  (<i>f</i>,(λ<i>x</i>. r(<i>f</i>(<i>x</i>)))), it’s easy to construct the desired path, using [Π-ext-comp-prop] together with the computational behaviour of <b>happly</b>.</p>
<p>So to show it for arbitrary <i>g</i>,<i>h</i>, it’s sufficent to give a path from the pair (<i>g</i>,<i>h</i>) to the pair (<i>f</i>,(λ<i>x</i>. r(<i>f</i>(<i>x</i>)))).  In other words, we want to show that the space of such pairs (<i>g</i>,<i>h</i>) is <em>contractible</em>.  (This statement itself could be considered as another form of functional extensionality.)</p>
<p>To do this, we’ll look at the space of such pairs as a retract, up to homotopy, of another space — of functions into pairs — which we’ll then show contractible.  In other words, we need to show two lemmas:</p>
<p><strong>Lemma 1.</strong>  Assume [Π-ext].  Given any function <i>f</i> : ∏<sub><i>x</i>:<i>A</i></sub> <i>B<sub>x</sub></i>, the space of pairs of functions { <i>g</i> : ∏<sub><i>x</i>:<i>A</i></sub> <i>B<sub>x</sub></i> &amp; <i>h</i> : <i>f</i> == <i>g</i> } is a retract up to homotopy of the space of functions into pairs,  ∏<sub><i>x</i>:<i>A</i></sub> { <i>y</i> : <i>B<sub>x</sub></i> &amp; <i>p</i> : <i>x</i> = <i>y</i> }.  (I’m using roughly Coq’s notation for Σ-types here; I hope it’s clear what it means.) </p>
<p><strong>Lemma 2.</strong> Assume [Π-ext].  Then for any <i>f</i> as above, the type ∏<sub><i>x</i>:<i>A</i></sub> { <i>y</i> : <i>B<sub>x</sub></i> &amp; <i>p</i> : <i>x</i> = <i>y</i> } is contractible.</p>
<p><i>Proof of Lemma 1.</i> It’s easy to write down functions going between the two types.  To see that they give a retraction, take a pair (<i>g</i>,<i>h</i>), and send it out and back; what we get back is the pair ((λ<i>x</i>. <i>gx</i>),(λ<i>x</i>. <i>hx</i>)) — with <i>η</i>-expansions of the original functions.  So, we need to use an <i>η</i>-rule somehow.</p>
<p>Since we have functional extensionality, it’s easy to show the necessary <i>η</i>-rule: any function <i>k</i> has a path <i>η<sub>k</sub></i> to its own <i>η</i>-expansion.  But using it is a little subtle: we’re trying to construct a path between pairs, (<i>g</i>,<i>h</i>) = ((λ<i>x</i>. <i>gx</i>),(λ<i>x</i>. <i>hx</i>)), and the obvious thing to try is the fact that a path between pairs comes from a pair of paths.  But if we do that, using <i>η<sub>g</sub></i> as the first path, then the second path needed involves transport along <i>η<sub>g</sub></i> — and the behaviour under transport of terms produced from <b>ext</b> is exactly what we’re trying to get a handle on in the first place!</p>
<p>Instead, we approach it a bit differently: we use the <i>η</i>-rule at the point where the hypotheses <i>g</i>,<i>h</i> are introduced.  So given <i>g</i>, but with <i>h</i> still generalised, we want to show that for all <i>h</i>, (<i>g</i>,<i>h</i>) = ((λ<i>x</i>. <i>gx</i>),(λ<i>x</i>. <i>hx</i>)).  By eta-expansion, it’s enough to show this with (λ<i>x</i>. <i>gx</i>) in place of <i>g</i>: so, that for all appropriate <i>h</i>, ((λ<i>x</i>. <i>gx</i>),<i>h</i>) = ((λ<i>x</i>. <i>gx</i>),(λ<i>x</i>. <i>hx</i>)).  Only then do we introduce <i>h</i>; and this time, there’s no transport along <i>η<sub>g</sub></i> involved in the goal, so we’re home and dry.</p>
<p>(This approach to <i>η</i>-expansion — essentially, assuming as soon as a function is introduced that WLOG it’s already <i>η</i>-expanded — seems to work quite cleanly in general, so I wrapped it up in <a href="https://github.com/peterlefanulumsdaine/HoTT/blob/master/Coq/Funext.v#L234">a couple of tactics</a> <code>eta_intro</code>, <code>eta_expand</code>, which others may also find useful.  They’re still a bit limited, though, so someone with more Ltac experience might well be able to improve them, which would be great!  Of course, if Coq gets a definitional η-rule then these won’t be necessary…)</p>
<p><i>Proof of Lemma 2.</i>  We need to show that given <i>f</i> as above, the type ∏<sub><i>x</i>:<i>A</i></sub> { <i>y</i> : <i>B<sub>x</sub></i> &amp; <i>p</i> : <i>x</i> = <i>y</i> } is contractible.  Certainly, for each individual <i>x</i> the type { <i>y</i> : <i>B<sub>x</sub></i> &amp; <i>p</i> : <i>x</i> = <i>y</i> } is contractible — you probably knew it already, and if not, it’s nice and easy to prove.</p>
<p>But now, by [Π-ext], it’s easy to show that a product of contractible spaces is contractible; so we’re done!  □</p>
<p>(In the code, I handle the contractibility statements slightly differently.  Contractibility seems the conceptually clearer way of stating them; but one can make the overall proof slightly more compact by working just with the contractions, since the basepoints in all cases are obvious.</p>
<p><a name="endofproof">We thus</a> have strong functional extensionality from weak — and moreover, we have a kicker:</p>
<p><strong>Scholium.</strong>  If the witness <b>ext-app</b> for [Π-ext-app] is as constructed as above, and moreover [Π-ext-comp] holds <em>definitionally</em>, then so does [Π-ext-app-comp].</p>
<p><i>Proof.</i>  By appropriate contemplation of the preceding proof. □</p>
<p>(Unlike the rest, this can’t be formalised in Coq, since one can’t take a definitional equality as a hypothesis.)  The results of Section 5 of Garner then show that these imply the definitional forms of [Π-Id-elim(-comp)] and other rules.</p>
<p>So — what’s the moral of this proof?  It was moderately long and rather fiddly; but what actually makes the whole thing tick?  I’d say: Σ-types.  We’re trying to show how paths produced by <b>ext</b> behave under <b>happly</b>, or more generally under path-elimination.  The retraction of Lemma 2 lets us relate them to paths in Σ-types; and for paths in Σ-types, or rather for their projections to the base space, we <em>do</em> know something about transport, thanks to their “second projections” to a path in a fiber.  And this is just enough that with some leverage, we can work up to the more general statements.</p>
<p><strong>Extra bonus exercise.</strong>  In the view of [Π-ext-comp-prop] and [Π-ext-app] as making <b>ext</b> an inverse to <b>happly</b>, what does [Π-ext-app-comp-prop] correspond to?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/637/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=637&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2011/12/19/strong-funext-from-weak/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<georss:point>44.637141 -63.593733</georss:point>
		<geo:lat>44.637141</geo:lat>
		<geo:long>-63.593733</geo:long>
		<media:content url="" medium="image">
			<media:title type="html">peterlefanulumsdaine</media:title>
		</media:content>
	</item>
		<item>
		<title>A seminar on HoTT Equivalences</title>
		<link>http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/</link>
		<comments>http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 15:07:45 +0000</pubDate>
		<dc:creator>andrejbauer</dc:creator>
				<category><![CDATA[Talk]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=625</guid>
		<description><![CDATA[I recorded our local Seminar on foundations in which I talked about the notion of equivalence in HoTT: Hopefully some people will find some use for it. It is pretty slowly going, and it might motivate some of the strange &#8230; <a href="http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=625&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recorded our local Seminar on foundations in which I talked about the notion of equivalence in HoTT:</p>
<div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/33218969' width='400' height='300' frameborder='0'></iframe></div>
<p>Hopefully some people will find some use for it. It is pretty slowly going, and it might motivate some of the strange things going on in <a href="https://github.com/HoTT/HoTT/blob/master/Coq/Equivalences.v">Equivalences.v</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/625/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/625/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/625/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=625&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2011/12/07/a-seminar-on-hott-equivalences/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">andrejbauer</media:title>
		</media:content>
	</item>
		<item>
		<title>Localization as an Inductive Definition</title>
		<link>http://homotopytypetheory.org/2011/12/06/inductive-localization/</link>
		<comments>http://homotopytypetheory.org/2011/12/06/inductive-localization/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 19:22:40 +0000</pubDate>
		<dc:creator>Mike Shulman</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Higher Inductive Types]]></category>

		<guid isPermaLink="false">http://homotopytypetheory.org/?p=614</guid>
		<description><![CDATA[I&#8217;ve been talking a lot about reflective subcategories (or more precisely, reflective subfibrations) in type theory lately (here and here and here), so I started to wonder about general ways to construct them inside type theory. There are some simple &#8230; <a href="http://homotopytypetheory.org/2011/12/06/inductive-localization/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=614&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been talking a lot about reflective subcategories (or more precisely, reflective subfibrations) in type theory lately (<a href="http://golem.ph.utexas.edu/category/2011/11/internalizing_the_external_or.html">here</a> and <a href="http://homotopytypetheory.org/2011/12/06/modeling-univalence-in-subtoposes/">here</a> and <a href="http://golem.ph.utexas.edu/category/2011/12/reflective_subfibrations_facto.html">here</a>), so I started to wonder about general ways to construct them inside type theory.  There are some simple examples like the following.</p>
<ul>
<li>As Steve Awodey <a href="http://golem.ph.utexas.edu/category/2011/11/internalizing_the_external_or.html#c040314">mentioned</a>, the (effective epi, mono) factorization system is an example.  It can be constructed inside type theory using the higher inductive type <tt>is_inhab</tt> (see <a href="https://github.com/mikeshulman/HoTT/blob/master/Coq/Subcategories/EpiMono.v">here</a>), which is a version of the Awodey-Bauer &#8220;bracket&#8221; operation on types.</li>
<li>More generally, we should be able to construct the <a href="http://nlab.mathforge.org/nlab/show/%28n-connected%2C+n-truncated%29+factorization+system"><i>n</i>-truncated factorization system</a> for any <i>n</i>, once we write down the <i>n</i>-truncation as a HIT.  In particular, for <i>n</i>=0 we get <img src='http://s0.wp.com/latex.php?latex=%5Cpi_0&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;pi_0' title='&#92;pi_0' class='latex' /> as the reflector.</li>
<li>There&#8217;s one that we can construct without any HITs: any h-proposition <i>U</i> gives rise to an <i>open subtopos</i> whose reflector is <tt>fun A =&gt; U -&gt; A</tt> (see <a href="https://github.com/mikeshulman/HoTT/blob/master/Coq/Subcategories/OpenSubtopos.v">here</a>).  The objects of the subcategory are those for which <tt>const : A -&gt; (U -&gt; A)</tt> is an equivalence.</li>
<li>I think we should be able to construct closed subtoposes using the HIT that defines homotopy pushouts (the reflector there should take <i>A</i> to the pushout of the two projections <img src='http://s0.wp.com/latex.php?latex=U+%5Cleftarrow+U%5Ctimes+A+%5Cto+A&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='U &#92;leftarrow U&#92;times A &#92;to A' title='U &#92;leftarrow U&#92;times A &#92;to A' class='latex' />), but I haven&#8217;t checked this yet.</li>
</ul>
<p>However, in category theory (and <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-category theory) there is an important, uniform way of constructing reflective subcategories and factorization systems &mdash; by <i>localization</i>.  Given a family of maps <i>F</i>, we define an object <i>X</i> to be <i>F</i>-<b>local</b> if <img src='http://s0.wp.com/latex.php?latex=%5Cmathrm%7BHom%7D%28B%2CX%29+%5Cto+%5Cmathrm%7BHom%7D%28A%2CX%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathrm{Hom}(B,X) &#92;to &#92;mathrm{Hom}(A,X)' title='&#92;mathrm{Hom}(B,X) &#92;to &#92;mathrm{Hom}(A,X)' class='latex' /> is an equivalence for all <img src='http://s0.wp.com/latex.php?latex=f%5Ccolon+A%5Cto+B&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='f&#92;colon A&#92;to B' title='f&#92;colon A&#92;to B' class='latex' /> in <i>F</i>.  When <i>F</i> is small in a well-behaved category (such as a Grothendieck topos), the <i>F</i>-local objects are a reflective subcategory, and moreover every (accessible) reflective subcategory arises in this way.</p>
<p><span id="more-614"></span></p>
<p>Can we mimic this in type theory?  Given a family of maps</p>
<pre>
Hypothesis I : Type.
Hypothesis S T : I -&gt; Type.
Hypothesis f : forall i, S i -&gt; T i.
</pre>
<p>it&#8217;s easy to define locality:</p>
<pre>
Definition is_local Z := forall i,
  is_equiv (fun g : T i -&gt; Z =&gt; g o f i).
</pre>
<p>but how can we prove the local objects are reflective?  In both classical homotopy theory and <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-category theory, the reflector is obtained with a transfinite cell-complex construction (sometimes disguised by other machinery, such as accessibility).  But this is exactly the sort of thing that higher inductive types do even better!  Consider the following HIT (I&#8217;ve switched to using the notation <tt>==</tt> for identity/path types, following a discussion on the HoTT mailing list):</p>
<pre>
Inductive localize X :=
| to_local : X -&gt; localize X
| local_extend : forall (i:I) (h : S i -&gt; localize X),
    T i -&gt; localize X
| local_extension : forall (i:I) (h : S i -&gt; localize X) (s : S i),
    local_extend i h (f i s) == h s
| local_unextension : forall (i:I) (g : T i -&gt; localize X) (t : T i),
    local_extend i (g o f i) t == g t
| local_triangle : forall (i:I) (g : T i -&gt; localize X) (s : S i),
    local_unextension i g (f i s) == local_extension i (g o f i) s.
</pre>
<p>The first constructor <tt>to_local</tt> says that <tt>localize X</tt> comes with a map from <tt>X</tt>.  And the other four say exactly that <tt>localize X</tt> is <i>F</i>-local!  Specifically, the second constructor <tt>local_extend</tt> says that any map <tt>S i -&gt; localize X</tt> can be extended along <tt>f i</tt> to <tt>T i</tt>.  The third says that this extension <i>is</i> an extension (that is, the extension operation is right inverse to restriction), while the fourth says that it is left inverse, and the fifth supplies one triangle identity for these homotopies.  Thus, together they form an element of the space of &#8220;adjoint equivalence data&#8221; for <tt>fun g : T i -&gt; localize X =&gt; g o f i</tt>, which is an h-proposition that&#8217;s equivalent to Voevodsky&#8217;s definition of <tt>is_equiv</tt>.</p>
<p>Axiomatizing <tt>localize</tt> in Coq as usual for HITs, I&#8217;ve been able to prove that it does, in fact, make the local objects into a <i>reflective subfibration</i>, in the sense discussed <a href="http://golem.ph.utexas.edu/category/2011/11/internalizing_the_external_or.html">here</a>.  The code (still rather ugly, alas) can be found <a href="https://github.com/mikeshulman/HoTT/blob/master/Coq/Subcategories/Localization.v">here</a>.  The reason we can get a reflective subfibration rather than merely a reflective subcategory is that we are automatically performing an <i>internal</i> localization: the local objects see the maps <tt>f i</tt> as equivalences not only on external hom-spaces (which we don&#8217;t have access to internally anyway) but on the internal-homs.  (More precisely, they see all pullbacks of <tt>F</tt> along maps into <tt>I</tt> as equivalences, which means that if <tt>I</tt> is interesting, it influences the localization as well &mdash; see below.)  As discussed <a href="http://golem.ph.utexas.edu/category/2011/12/reflective_subfibrations_facto.html">here</a>, being this sort of internal localization is exactly what we need to make a reflective subcategory into a reflective subfibration &mdash; and conveniently, the latter is also exactly what we can describe internally.</p>
<p>In other words, higher inductive types allow us to construct localizations by just saying &#8220;the localization of <i>X</i> is the universal object equipped with a map from <i>X</i> and which is local,&#8221; which is exactly what we want.  I find this very intuitively attractive and quite pleasing.  It also makes very precise the vague idea mentioned <a href="http://golem.ph.utexas.edu/category/2011/11/internalizing_the_external_or.html">here</a> that <img src='http://s0.wp.com/latex.php?latex=%5Csharp+X&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sharp X' title='&#92;sharp X' class='latex' /> is &#8220;inductively generated&#8221; by <i>X</i> together with &#8220;sharpness&#8221; &mdash; here &#8220;sharpness&#8221; means &#8220;<i>F</i>-locality&#8221;, and the inductive type says exactly that.</p>
<p>Moreover, lots of useful things are special cases of localization:</p>
<ul>
<li>The (-1)-truncation <tt>is_inhab</tt> is equivalently localization at <img src='http://s0.wp.com/latex.php?latex=1%2B1+%5Cto+1&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='1+1 &#92;to 1' title='1+1 &#92;to 1' class='latex' />.</li>
<li>Similarly, the <i>n</i>-truncation is localization at <img src='http://s0.wp.com/latex.php?latex=S%5E%7Bn%2B1%7D+%5Cto+1&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='S^{n+1} &#92;to 1' title='S^{n+1} &#92;to 1' class='latex' />.</li>
<li>The reflector of an open subtopos is equivalently localization at <img src='http://s0.wp.com/latex.php?latex=U%5Cto+1&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='U&#92;to 1' title='U&#92;to 1' class='latex' />.</li>
<li>Modulo size questions, every reflective subcategory is a localization (at the large class of maps inverted by the reflector).</li>
<li>Unlike Set, which (classically) has no interesting reflective subcategories, <img src='http://s0.wp.com/latex.php?latex=%5Cinfty+%5Cmathrm%7BGpd%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;infty &#92;mathrm{Gpd}' title='&#92;infty &#92;mathrm{Gpd}' class='latex' /> has many interesting reflective subcategories even classically, many of which are naturally constructed as localizations.  Moreover, since in <img src='http://s0.wp.com/latex.php?latex=%5Cinfty+%5Cmathrm%7BGpd%7D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;infty &#92;mathrm{Gpd}' title='&#92;infty &#92;mathrm{Gpd}' class='latex' /> the internal and external-homs are identical, all these localizations are internal.  For instance, in classical homotopy theory, it is important to be able to localize a space by &#8220;inverting a prime number&#8221;.  One way to do this is to localize at the degree-<i>p</i> map <img src='http://s0.wp.com/latex.php?latex=S%5E1+%5Cto+S%5E1&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='S^1 &#92;to S^1' title='S^1 &#92;to S^1' class='latex' />.  Another way (probably distinct in general, but agreeing for a large class of spaces) is to localize at the class of <img src='http://s0.wp.com/latex.php?latex=%5Cmathbb%7BZ%7D%5B%5Cfrac%7B1%7D%7Bp%7D%5D&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;mathbb{Z}[&#92;frac{1}{p}]' title='&#92;mathbb{Z}[&#92;frac{1}{p}]' class='latex' />-homology isomorphisms (which is not small, but you can find a small generating set for it).  We might be able to do this in type theory if we knew how to define homology.</li>
<li>Any <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-topos is a (left exact) localization of an <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-category of presheaves.  Thus, combining this with my <a href="http://homotopytypetheory.org/2011/12/06/modeling-univalence-in-subtoposes/">previous post</a>, we should be able to reduce the question of modeling univalence in <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-toposes to the case of presheaf <img src='http://s0.wp.com/latex.php?latex=%28%5Cinfty%2C1%29&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='(&#92;infty,1)' title='(&#92;infty,1)' class='latex' />-toposes.  Moreover, if the HIT <tt>localize</tt> satisfies the computation rule for the constructor <tt>to_local</tt> definitionally (this is a 0-level constructor, which are the ones that it&#8217;s most sensible to expect to have definitional computation), then the corresponding <img src='http://s0.wp.com/latex.php?latex=%5Csharp&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='&#92;sharp' title='&#92;sharp' class='latex' /> should also have definitional computation, so that we can model (higher) inductive types in the subcategory strictly as well.</li>
</ul>
<p>It&#8217;s natural to ask what properties of the family <i>F</i> being localized at will make the reflective subfibration into a stable factorization system or a lex-reflective subcategory.  The main result in that direction I have is that we get a stable factorization system if the family of targets <i>T</i> is constant at the terminal object.  In this case, what we are essentially doing is localizing at the class of all pullbacks of the projection <img src='http://s0.wp.com/latex.php?latex=S+%5Cto+I&amp;bg=ffffff&amp;fg=333333&amp;s=0' alt='S &#92;to I' title='S &#92;to I' class='latex' />.  And as discussed <a href="http://golem.ph.utexas.edu/category/2011/12/reflective_subfibrations_facto.html">here</a>, localization at a pullback-stable class always gives a stable factorization system.  I don&#8217;t know any general conditions on <i>F</i> to ensure that we get a lex-reflective subcategory, though.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hottheory.wordpress.com/614/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hottheory.wordpress.com/614/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hottheory.wordpress.com/614/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=homotopytypetheory.org&#038;blog=21082110&#038;post=614&#038;subd=hottheory&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://homotopytypetheory.org/2011/12/06/inductive-localization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Mike Shulman</media:title>
		</media:content>
	</item>
	</channel>
</rss>
