<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">I am wondering if there is any implementation of dependent type theory performs normalization before termination checking?</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">It sounds theoretical doable, but somehow termination checking is commonly syntactical, like agda and coq. However, those who care about compilation performance might not be too happy about it.<br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">I am wondering if there is an example makes normalization here looks non-trivial?<br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div><font style="font-size:12pt" size="3"><span style="color:rgb(69,129,142)"><span style="font-family:trebuchet ms,sans-serif"><b>Sincerely Yours,<br>
</b></span></span></font></div>
<font style="font-size:12pt" size="3"><span style="color:rgb(69,129,142)"><span style="font-family:trebuchet ms,sans-serif"><b><br>
Jason Hu<a target="_blank" id="LPNoLP"></a></b></span></span></font> </div>
</div>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Agda <agda-bounces@lists.chalmers.se> on behalf of Serge Leblanc <33dbqnxpy7if@gmail.com><br>
<b>Sent:</b> July 30, 2018 9:02:29 PM<br>
<b>To:</b> agda@lists.chalmers.se<br>
<b>Subject:</b> Re: [Agda] Checking termination is not sufficiently exploratory.</font>
<div> </div>
</div>
<meta content="text/html; charset=utf-8">
<div style="background-color:#FFFFFF"><span id="x_result_box" class="" lang="en"><span class="">In my opinion, a normal form verification phase could be added without changing the termination checking algorithm.</span></span><span id="x_result_box" class="" lang="en"><span class=""></span></span><br>
<span id="x_result_box" class="" lang="en"><span class=""></span></span><span id="x_result_box" class="" lang="en"><span class="">Laŭ mi, normala kontrola fazo povus esti aldonita sen ŝangi la finiĝan kontrolan algoritmon.
</span></span><br>
<span id="x_result_box" class="" lang="en"><span class=""></span></span>
<p><span id="x_result_box" class="" lang="en"><span class="">Sincere<br>
</span></span></p>
<br>
<div class="x_moz-cite-prefix">On 2018-07-30 20:06, a.j.rouvoet wrote:<br>
</div>
<blockquote type="cite">
<p>I believe that you are right that the two snippets are equivalent, but it requires some computation to show that this is the case.<br>
The check that Agda runs on the other hand is very syntactic. This is indeed a limitation, but at least it ensures that checking for termination terminates ;-)<br>
<br>
</p>
<div class="x_moz-cite-prefix">On 07/30/2018 06:04 PM, Serge Leblanc wrote:<br>
</div>
<blockquote type="cite">Yes, but you translat the code <font color="#3333ff">(toCostring ">>") ++ coSplit "(♭ xs)</font> to its normal form, it equals to
<font color="#3333ff">'>' ∷ ♯ ('>' ∷ ♯ coSplit '(♭ xs))</font>. Right?<br>
So, the recursive call is well protected by a constructor.<br>
<br>
Jes, sed vi plenumas la kodon (toCostring ">>") ++ coSplit″ (♭ xs) ĝis sia normala formo, ĝi egalas al  '>' ∷ ♯ ('>' ∷ ♯ coSplit′ (♭ xs)). Ĉu ne ?<br>
Do, la memsinkceva alvoko estas bone ŝirmi per konstruisto.<br>
<br>
<div class="x_moz-cite-prefix">On 2018-07-30 16:59, a.j.rouvoet wrote:<br>
</div>
<blockquote type="cite">
<p>For coSplit to pass the checker, the recursive invocation must appear guarded by a constructor.<br>
This is clearly the case in coSplit', but not necessarily in coSplit'' (e.g. when toString ">>" returns the empty costring).<br>
</p>
<br>
<div class="x_moz-cite-prefix">On 07/30/2018 04:55 PM, Serge Leblanc wrote:<br>
</div>
<blockquote type="cite"><span id="x_result_box" class="" lang="en"><span class="">Dear all,<br>
Why the checking termination rejects the coSplit" function although the coSplit' function is accepted ?</span></span><br>
<span id="x_result_box" class="" lang="en"><span class=""><span id="x_result_box" class="x_short_text" lang="en"><span class=""><span id="x_result_box" class="" lang="en"><span class="">Why the checking termination so suspicious?</span></span><br>
</span></span>Sincerely<br>
</span></span><br>
Estimataj ĉiuj,<br>
Kial la finiĝa kontrolo malakceptas la funkcion coSplit″ kvankam la funkcio coSplit′ trafas ?<br>
Kial la finiĝa kontrolo estas tiel malakceptanda ?<br>
Sincere<br>
<br>
<font color="#3333ff">  coSplit′ : Costring → Costring<br>
  coSplit′ [] = []<br>
  coSplit′ (x ∷ xs) with x ≐ '!'<br>
  ... | false = x ∷ ♯ coSplit′ (♭ xs)<br>
  ... | true = '>' ∷ ♯ ('>' ∷ ♯ coSplit′ (♭ xs))<br>
<br>
  coSplit″ : Costring → Costring<br>
  coSplit″ [] = []<br>
  coSplit″ (x ∷ xs) with x ≐ '!'<br>
  ... | false = x ∷ ♯ coSplit″ (♭ xs)<br>
  ... | true = (toCostring ">>") ++ coSplit″ (♭ xs)<br>
<br>
  main = run $ ♯ getContents >>= λ s → ♯ (putStrLn∞ ∘ coSplit′) s<br>
<span id="x_result_box" class="" lang="en"><span class=""></span></span></font>
<div class="x_moz-signature"><font color="#3333ff"><br>
</font>-- <br>
Serge Leblanc
<hr>
gpg --search-keys 0x67B17A3F <br>
Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F</div>
<br>
<fieldset class="x_mimeAttachmentHeader"></fieldset> <br>
<pre>_______________________________________________
Agda mailing list
<a class="x_moz-txt-link-abbreviated" href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a>
<a class="x_moz-txt-link-freetext" href="https://lists.chalmers.se/mailman/listinfo/agda">https://lists.chalmers.se/mailman/listinfo/agda</a>
</pre>
</blockquote>
<br>
<br>
<fieldset class="x_mimeAttachmentHeader"></fieldset> <br>
<pre>_______________________________________________
Agda mailing list
<a class="x_moz-txt-link-abbreviated" href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a>
<a class="x_moz-txt-link-freetext" href="https://lists.chalmers.se/mailman/listinfo/agda">https://lists.chalmers.se/mailman/listinfo/agda</a>
</pre>
</blockquote>
<br>
<div class="x_moz-signature">-- <br>
Serge Leblanc
<hr>
gpg --search-keys 0x67B17A3F <br>
Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F</div>
<br>
<fieldset class="x_mimeAttachmentHeader"></fieldset> <br>
<pre>_______________________________________________
Agda mailing list
<a class="x_moz-txt-link-abbreviated" href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a>
<a class="x_moz-txt-link-freetext" href="https://lists.chalmers.se/mailman/listinfo/agda">https://lists.chalmers.se/mailman/listinfo/agda</a>
</pre>
</blockquote>
<br>
<br>
<fieldset class="x_mimeAttachmentHeader"></fieldset> <br>
<pre>_______________________________________________
Agda mailing list
<a class="x_moz-txt-link-abbreviated" href="mailto:Agda@lists.chalmers.se">Agda@lists.chalmers.se</a>
<a class="x_moz-txt-link-freetext" href="https://lists.chalmers.se/mailman/listinfo/agda">https://lists.chalmers.se/mailman/listinfo/agda</a>
</pre>
</blockquote>
<br>
<div class="x_moz-signature">-- <br>
Serge Leblanc
<hr>
gpg --search-keys 0x67B17A3F <br>
Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F</div>
</div>
</body>
</html>