<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coq/test-suite/output-modulo-time, branch master</title>
<subtitle>The formal proof system</subtitle>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/'/>
<entry>
<title>Remove regularly failing test from test-suite.</title>
<updated>2019-03-05T09:19:37+00:00</updated>
<author>
<name>Théo Zimmermann</name>
</author>
<published>2019-03-05T09:15:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=6188c34dd35b9d0f3a8fef6ec2c87a93614cfad8'/>
<id>6188c34dd35b9d0f3a8fef6ec2c87a93614cfad8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Test ltacprof in sequential mode</title>
<updated>2019-01-09T10:18:31+00:00</updated>
<author>
<name>Maxime Dénès</name>
</author>
<published>2018-12-21T14:11:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=62ece342f56380e54ecfe2b403159e9b115a8406'/>
<id>62ece342f56380e54ecfe2b403159e9b115a8406</id>
<content type='text'>
Scripting these commands in async mode does not really make sense.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Scripting these commands in async mode does not really make sense.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix ltacprof_abstract (I think because of #6411 parallel merge).</title>
<updated>2017-12-19T11:24:34+00:00</updated>
<author>
<name>Gaëtan Gilbert</name>
</author>
<published>2017-12-19T11:24:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=e48a20056e298215392b9a756dcc52cdf5c825fa'/>
<id>e48a20056e298215392b9a756dcc52cdf5c825fa</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge PR #6406: Make [abstract] nodes show up in the Ltac profile</title>
<updated>2017-12-18T17:57:56+00:00</updated>
<author>
<name>Maxime Dénès</name>
</author>
<published>2017-12-18T17:57:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=7e2f9861f3d38829baf246883e4925d48c9e2998'/>
<id>7e2f9861f3d38829baf246883e4925d48c9e2998</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Make [abstract] nodes show up in the Ltac profile</title>
<updated>2017-12-14T23:02:41+00:00</updated>
<author>
<name>Jason Gross</name>
</author>
<published>2017-12-12T17:00:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=29644bf0814945cbf2b4388b8f8bd19f109503a0'/>
<id>29644bf0814945cbf2b4388b8f8bd19f109503a0</id>
<content type='text'>
This closes #5082 and closes #5778, but makes #6404 apply to `abstract`
as well as `transparent_abstract`.  This is unfortunate, but I think it
is worth it to get `abstract` in the profile (and therefore not
misassign the time spent sending the subproof to the kernel).  Another
alternative would have been to add a dedicated entry to `ltac_call_kind`
for `TacAbstract`, but I think it's better to just deal with #6404 all
at once.

The "better" solution here would have been to move `abstract` out of the
Ltac syntax tree and define it via `TACTIC EXTEND` like
`transparent_abstract`.  However, the STM relies on its ability to
recognize `abstract` and `solve [ abstract ... ]` syntactically so that
it can handle `par: abstract`.

Note that had to add locations to `TacAbstract` nodes, as I could not
figure out how to call `push_trace` otherwise.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This closes #5082 and closes #5778, but makes #6404 apply to `abstract`
as well as `transparent_abstract`.  This is unfortunate, but I think it
is worth it to get `abstract` in the profile (and therefore not
misassign the time spent sending the subproof to the kernel).  Another
alternative would have been to add a dedicated entry to `ltac_call_kind`
for `TacAbstract`, but I think it's better to just deal with #6404 all
at once.

The "better" solution here would have been to move `abstract` out of the
Ltac syntax tree and define it via `TACTIC EXTEND` like
`transparent_abstract`.  However, the STM relies on its ability to
recognize `abstract` and `solve [ abstract ... ]` syntactically so that
it can handle `par: abstract`.

Note that had to add locations to `TacAbstract` nodes, as I could not
figure out how to call `push_trace` otherwise.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix #5081 by more fine-grained LtacProf recording</title>
<updated>2017-12-13T01:51:38+00:00</updated>
<author>
<name>Jason Gross</name>
</author>
<published>2017-12-13T01:12:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=79e97ce799d35c1082ccc1a57468f8bb4f8efe42'/>
<id>79e97ce799d35c1082ccc1a57468f8bb4f8efe42</id>
<content type='text'>
To fix #5081, that LtacProf associates time spent in tactic-evaluation
with the wrong tactic, I added two additional calls to the profiler
during tactic evaluation phase.  These two calls do not update the call
count of the relevant tactics, but simply add time to them.

Although this fixes #5081, it introduces a new bug, involving tactics
which are aliases of other tactics, which I am not sure how to fix.
Here is the explanation of the issue, as I currently understand it (also
recorded in a comment in `profile_ltac.mli`):

Ltac semantics are a bit insane.  There isn't
really a good notion of how many times a tactic has been "called",
because tactics can be partially evaluated, and it's unclear
whether the number of "calls" should be the number of times the
body is fetched and unfolded, or the number of times the code is
executed to a value, etc.  The logic in `Tacinterp.eval_tactic`
gives a decent approximation, which I believe roughly corresponds
to the number of times that the engine runs the tactic value which
results from evaluating the tactic expression bound to the name
we're considering.  However, this is a poor approximation of the
time spent in the tactic; we want to consider time spent evaluating
a tactic expression to a tactic value to be time spent in the
expression, not just time spent in the caller of the expression.
So we need to wrap some nodes in additional profiling calls which
don't count towards to total call count.  Whether or not a call
"counts" is indicated by the `count_call` boolean argument.

Unfortunately, at present, we can get very strange call graphs when
a named tactic expression never runs as a tactic value: if we have
`Ltac t0 := t.` and `Ltac t1 := t0.`, then `t1` is considered to
run 0(!) times.  It evaluates to `t` during tactic expression
evaluation, and although the call trace records the fact that it
was called by `t0` which was called by `t1`, the tactic running
phase never sees this.  Thus we get one call tree (from expression
evaluation) that has `t1` calls `t0` calls `t`, and another call
tree which says that the caller of `t1` calls `t` directly; the
expression evaluation time goes in the first tree, and the call
count and tactic running time goes in the second tree.  Alas, I
suspect that fixing this requires a redesign of how the profiler
hooks into the tactic engine.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
To fix #5081, that LtacProf associates time spent in tactic-evaluation
with the wrong tactic, I added two additional calls to the profiler
during tactic evaluation phase.  These two calls do not update the call
count of the relevant tactics, but simply add time to them.

Although this fixes #5081, it introduces a new bug, involving tactics
which are aliases of other tactics, which I am not sure how to fix.
Here is the explanation of the issue, as I currently understand it (also
recorded in a comment in `profile_ltac.mli`):

Ltac semantics are a bit insane.  There isn't
really a good notion of how many times a tactic has been "called",
because tactics can be partially evaluated, and it's unclear
whether the number of "calls" should be the number of times the
body is fetched and unfolded, or the number of times the code is
executed to a value, etc.  The logic in `Tacinterp.eval_tactic`
gives a decent approximation, which I believe roughly corresponds
to the number of times that the engine runs the tactic value which
results from evaluating the tactic expression bound to the name
we're considering.  However, this is a poor approximation of the
time spent in the tactic; we want to consider time spent evaluating
a tactic expression to a tactic value to be time spent in the
expression, not just time spent in the caller of the expression.
So we need to wrap some nodes in additional profiling calls which
don't count towards to total call count.  Whether or not a call
"counts" is indicated by the `count_call` boolean argument.

Unfortunately, at present, we can get very strange call graphs when
a named tactic expression never runs as a tactic value: if we have
`Ltac t0 := t.` and `Ltac t1 := t0.`, then `t1` is considered to
run 0(!) times.  It evaluates to `t` during tactic expression
evaluation, and although the call trace records the fact that it
was called by `t0` which was called by `t1`, the tactic running
phase never sees this.  Thus we get one call tree (from expression
evaluation) that has `t1` calls `t0` calls `t`, and another call
tree which says that the caller of `t1` calls `t` directly; the
expression evaluation time goes in the first tree, and the call
count and tactic running time goes in the second tree.  Alas, I
suspect that fixing this requires a redesign of how the profiler
hooks into the tactic engine.
</pre>
</div>
</content>
</entry>
<entry>
<title>remove unneeded -emacs flag to coq-prog-args</title>
<updated>2017-05-01T15:34:00+00:00</updated>
<author>
<name>Paul Steckler</name>
</author>
<published>2017-05-01T15:34:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=f6856c5022ef27cdc492daadd1301cfcad025b01'/>
<id>f6856c5022ef27cdc492daadd1301cfcad025b01</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>test-suite/output-modulo-time made more robust</title>
<updated>2016-09-30T14:19:45+00:00</updated>
<author>
<name>Enrico Tassi</name>
</author>
<published>2016-09-30T14:19:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=98da77db53b4a41062c47f8f55418eb1fbb7e5bb'/>
<id>98da77db53b4a41062c47f8f55418eb1fbb7e5bb</id>
<content type='text'>
Order of items made stable
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Order of items made stable
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'github/pr/303' into v8.6</title>
<updated>2016-09-30T10:58:03+00:00</updated>
<author>
<name>Maxime Dénès</name>
</author>
<published>2016-09-30T10:58:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=a7a3e5b4d6df64b9bee42a86cd018c19ac6b01c0'/>
<id>a7a3e5b4d6df64b9bee42a86cd018c19ac6b01c0</id>
<content type='text'>
Was PR#303: LtacProf cutoff is for total percent, not time
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Was PR#303: LtacProf cutoff is for total percent, not time
</pre>
</div>
</content>
</entry>
<entry>
<title>LtacProf cutoff is for total percent, not time</title>
<updated>2016-09-29T22:57:52+00:00</updated>
<author>
<name>Jason Gross</name>
</author>
<published>2016-09-29T22:28:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=c4c7aa6d7b14a6d76c287b97d487abe055406577'/>
<id>c4c7aa6d7b14a6d76c287b97d487abe055406577</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
