<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">When you asked this in a coq-club thread on the same subject, I gave this example:<br><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">It is possible to use <span class="">positive</span> (but non strict-<span class="">positive</span>) types to zip together two Church encoded lists in linear instead of quadratic time. Here is a (GHC) Haskell implementation:<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">---- snip ----<br><br></div>{-# LANGUAGE RankNTypes #-}<br><br>module ZipFold where<br><br>newtype List a = List { foldR :: forall r. (a -&gt; r -&gt; r) -&gt; r -&gt; r }<br><br>nil :: List a<br>nil = List $ \_ n -&gt; n<br><br>cons :: a -&gt; List a -&gt; List a<br>cons x (List e) = List $ \c n -&gt; x `c` e c n<br><br>toList :: List a -&gt; [a]<br>toList xs = foldR xs (:) []<br><br>fromList :: [a] -&gt; List a<br>fromList xs = List $ \c n -&gt; foldr c n xs<br><br>-- The original idea:<br>-- newtype Left a b c = Left { feedLeft :: b -&gt; Right a b c -&gt; List c }<br>-- newtype Right a b c = Right { feedRight :: Left a b c -&gt; List c }<br><br>newtype Zipping a b c = Z { feed :: (b -&gt; Zipping a b c -&gt; List c) -&gt; List c }<br>type Left a b c = b -&gt; Zipping a b c -&gt; List c<br>type Right a b c = Zipping a b c<br><br>-- Mimicking the original idea<br>left :: (b -&gt; Right a b c -&gt; List c) -&gt; Left a b c<br>left k = k<br>feedLeft :: Left a b c -&gt; b -&gt; Right a b c -&gt; List c<br>feedLeft l = l<br><br>right :: (Left a b c -&gt; List c) -&gt; Right a b c<br>right = Z<br>feedRight :: Right a b c -&gt; Left a b c -&gt; List c<br>feedRight = feed<br><br>nilL :: Left a b c<br>nilL = left $ \_ _ -&gt; nil<br><br>nilR :: Right a b c<br>nilR = right $ \_ -&gt; nil<br><br>zipl :: (a -&gt; b -&gt; c) -&gt; List a -&gt; Left a b c<br>zipl f xs = foldR xs (\a l -&gt; left $ \b r -&gt; f a b `cons` feedRight r l) nilL<br><br>zipr :: List b -&gt; Right a b c<br>zipr ys = foldR ys (\b r -&gt; right $ \l -&gt; feedLeft l b r) nilR<br><br>zipW :: (a -&gt; b -&gt; c) -&gt; List a -&gt; List b -&gt; List c<br>zipW f xs ys = feedRight (zipr ys) (zipl f xs)<br><br>-- [(1,1), (2,2), ..., (10,10)]<br>ex1 = toList $ zipW (,) (fromList [1..10]) (fromList [1..10])<br>-- [(1,1), (2,2), ..., (9,9)]<br>ex2 = toList $ zipW (,) (fromList [1..10]) (fromList [1..9])<br>-- [(1,1), (2,2), ..., (9,9)]<br>ex3 = toList $ zipW (,) (fromList [1..9]) (fromList [1..10])<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">---- snip ----<br><br></div><div class="gmail_extra">I don&#39;t really understand what, &quot;the only justification is classical,&quot; means. System F has non-strict positive types. Is it classical?<br><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​I care about them inasmuch as I&#39;d be interested in seeing a system that allowed them, so I could see what kinds of programs they&#39;d be useful for, and what tradeoffs would have to be made to avoid breaking various properties of the system. From the above, it seems like they have uses when you&#39;re doing things with continuation passing.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">And if &quot;justification&quot; refers to the existence of some particular sort of model, I basically don&#39;t care about that at all. So positive types would automatically win that fight for me.<br></div><br>--<div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​ Dan​</div><br><br><div class="gmail_quote">On Fri, Apr 10, 2015 at 3:16 PM, Thorsten Altenkirch <span dir="ltr">&lt;<a href="mailto:Thorsten.Altenkirch@nottingham.ac.uk" target="_blank">Thorsten.Altenkirch@nottingham.ac.uk</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why do you want non-strict positive types? They don&#39;t make any sense to me. The only justification is classical.<br>
<br>
Thorsten<br>
<br>
Sent from my iPhone<br>
<div><div class="h5"><br>
&gt; On 10 Apr 2015, at 18:22, Frédéric Blanqui &lt;<a href="mailto:frederic.blanqui@inria.fr">frederic.blanqui@inria.fr</a>&gt; wrote:<br>
&gt;<br>
&gt; Hello.<br>
&gt;<br>
&gt; Le 10/04/2015 17:19, Aaron Stump a écrit :<br>
&gt;&gt; Hello, Frédéric.  Thanks for this interesting information about Coq.<br>
&gt;&gt; I have a couple follow-up questions if you don&#39;t mind:<br>
&gt;&gt;<br>
&gt;&gt; -- So are you saying that Coq could allow nonstrictly positive small<br>
&gt;&gt; inductive types?<br>
&gt; Yes. You can have a look at:<br>
&gt; <a href="http://iospress.metapress.com/content/tf54nwg673hvgk5d/" target="_blank">http://iospress.metapress.com/content/tf54nwg673hvgk5d/</a><br>
&gt; or <a href="https://who.rocq.inria.fr/Frederic.Blanqui/fi05-pdf.html" target="_blank">https://who.rocq.inria.fr/Frederic.Blanqui/fi05-pdf.html</a><br>
&gt;<br>
&gt;&gt;  It seems it currently does not, as this one is rejected, for example:<br>
&gt;&gt;<br>
&gt;&gt; Inductive Cont (A:Prop) : Prop :=<br>
&gt;&gt;  D : Cont A<br>
&gt;&gt; | C : ((Cont A -&gt; A) -&gt; A) -&gt; Cont A.<br>
&gt; Unfortunately, yes, mainly for technical reasons I guess. This would<br>
&gt; require to restrict pattern-matching definitions so that they can be<br>
&gt; encoded into recursors, or upgrade the Coq termination checker to<br>
&gt; size-based termination since the structural subterm ordering is defined<br>
&gt; for strictly positive types only and cannot handle non-strictly positive<br>
&gt; types...<br>
&gt;<br>
&gt;&gt; -- is it necessary to forbid large eliminations with big inductive<br>
&gt;&gt; types due to the Coquand-Paulin example we have been discussing (in<br>
&gt;&gt; addition to forbidding nonstrictly positive big inductive types)?<br>
&gt;&gt; Or is there another example that shows the problem with large<br>
&gt;&gt; eliminations and big inductive types?<br>
&gt;&gt; Sorry if these things are already explained somewhere in<br>
&gt;&gt; theories/Logic/ in the Coq library...<br>
&gt; I know no other counter-example but current (sufficient) termination<br>
&gt; conditions require so.<br>
&gt;<br>
&gt; Frédéric.<br>
&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt; Aaron<br>
&gt;&gt;<br>
&gt;&gt;&gt; On 04/10/2015 01:40 AM, Frédéric Blanqui wrote:<br>
&gt;&gt;&gt; Hello.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Speaking of Coq: because Prop is impredicative, one usually<br>
&gt;&gt;&gt; distinguishes between:<br>
&gt;&gt;&gt; 1. small inductive types where Type-level constructor arguments are<br>
&gt;&gt;&gt; parameters<br>
&gt;&gt;&gt; 2. big inductive types<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Coquand&#39;s counter-example is a big inductive type.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; For this reason, strong elimination on big inductive types is<br>
&gt;&gt;&gt; forbidden in Coq.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Adding small inductive types preserves termination and logical<br>
&gt;&gt;&gt; consistency in system F or Fomega. A reference to Mendler&#39;s work has<br>
&gt;&gt;&gt; already been given. For some more recent works, see Abel et al. More<br>
&gt;&gt;&gt; generally, you can consider monotone types (positivity is a syntactic<br>
&gt;&gt;&gt; condition ensuring monotony): see Matthes and Uustalu works. Adding<br>
&gt;&gt;&gt; dependent types doesn&#39;t change anything.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So, there should be no problem in Agda.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Frédéric.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Le 09/04/2015 18:07, Vilhelm Sjöberg a écrit :<br>
&gt;&gt;&gt;&gt; On 2015-04-09 11:49, Andrés Sicard-Ramírez wrote:<br>
&gt;&gt;&gt;&gt;&gt; Retaking the discussion in<br>
&gt;&gt;&gt;&gt;&gt; <a href="http://thread.gmane.org/gmane.comp.lang.agda/6008" target="_blank">http://thread.gmane.org/gmane.comp.lang.agda/6008</a>, it&#39;s known that<br>
&gt;&gt;&gt;&gt;&gt; using *negative* types it&#39;s possible<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; a) to prove absurdity or<br>
&gt;&gt;&gt;&gt;&gt; b) to write non-terminating terms.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Is there some example in *Agda* of a positive but not strictly<br>
&gt;&gt;&gt;&gt;&gt; positive type which allows a) or b)?<br>
&gt;&gt;&gt;&gt; I&#39;m interested in the answer to this question also. If I correctly<br>
&gt;&gt;&gt;&gt; understand what Thierry Coquand wrote in the thread you mention, the<br>
&gt;&gt;&gt;&gt; answer is no; because Agda is predicative allowing positive<br>
&gt;&gt;&gt;&gt; datatypes would be sound. But it would be interesting to see this<br>
&gt;&gt;&gt;&gt; fleshed out more.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I wrote up a blog post about using non-strictly positive datatypes<br>
&gt;&gt;&gt;&gt; to get a paradox in Coq:<br>
&gt;&gt;&gt;&gt; <a href="http://vilhelms.github.io/posts/why-must-inductive-types-be-strictly-positive/" target="_blank">http://vilhelms.github.io/posts/why-must-inductive-types-be-strictly-positive/</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Vilhelm<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; Agda mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.chalmers.se/mailman/listinfo/agda" target="_blank">https://lists.chalmers.se/mailman/listinfo/agda</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Agda mailing list<br>
&gt;&gt;&gt; <a href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a><br>
&gt;&gt;&gt; <a href="https://lists.chalmers.se/mailman/listinfo/agda" target="_blank">https://lists.chalmers.se/mailman/listinfo/agda</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Agda mailing list<br>
&gt; <a href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a><br>
&gt; <a href="https://lists.chalmers.se/mailman/listinfo/agda" target="_blank">https://lists.chalmers.se/mailman/listinfo/agda</a><br>
<br>
<br>
<br>
<br>
</div></div>This message and any attachment are intended solely for the addressee<br>
and may contain confidential information. If you have received this<br>
message in error, please send it back to me, and immediately delete it.<br>
<br>
Please do not use, copy or disclose the information contained in this<br>
message or in any attachment.  Any views or opinions expressed by the<br>
author of this email do not necessarily reflect the views of the<br>
University of Nottingham.<br>
<br>
This message has been checked for viruses but the contents of an<br>
attachment may still contain software viruses which could damage your<br>
computer system, you are advised to perform your own checks. Email<br>
communications with the University of Nottingham may be monitored as<br>
permitted by UK legislation.<br>
<br>
<br>_______________________________________________<br>
Agda mailing list<br>
<a href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a><br>
<a href="https://lists.chalmers.se/mailman/listinfo/agda" target="_blank">https://lists.chalmers.se/mailman/listinfo/agda</a><br>
<br></blockquote></div><br></div></div>