<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for Bugs Are Easy</title>
	<atom:link href="http://bugsareeasy.wordpress.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://bugsareeasy.wordpress.com</link>
	<description>essays on designing complex systems</description>
	<lastBuildDate>Wed, 04 Nov 2009 07:01:19 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on Languages Are Not Technology by Michael Katelman</title>
		<link>http://bugsareeasy.wordpress.com/2009/03/27/languages-are-not-technology/#comment-69</link>
		<dc:creator>Michael Katelman</dc:creator>
		<pubDate>Wed, 04 Nov 2009 07:01:19 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=314#comment-69</guid>
		<description>ok, so a very belated response :). 
First, I don&#039;t think that it&#039;s productive to focus on the semantics of``technology&#039;&#039;.  What I guess I object to is the dismissive attitude toward
languages that I get from your post. 

You say that:

``I don’t believe any type of language is technology in the sense that the 
language itself has any special properties that make it better than other
languages.&#039;&#039;

But then go on to write:

``Languages that use higher levels of abstraction are more productive to use 
precisely because they use a higher level of abstraction.&#039;&#039;

These seem contradictory to me: isn&#039;t ``more productive&#039;&#039; also ``better&#039;&#039;? In any 
case, I think we can agree that some languages are more productive than others,
C vs assembly, e.g. 
I would agree that a language isn&#039;t very useful without associated programs to process it; if it was then the language with a syntactic construct
&quot;do-what-I-want&quot; would be the end of the story.  However, I do think that language design, e.g. coming up with the right abstractions, can be enormously
powerful. Many people find static scoping in languages like Haskell to be
better than dynamic scoping; it&#039;s subjective, but a ``special&#039;&#039; property that
can be debated and isn&#039;t really about a ``higher level of abstraction&#039;&#039;.

If we agree that one language can be more productive than another, then it seems the relevant question to ask is what is the relative benefit I get from a
more productive verification engineer vs a more productive automated algorithm?
I agree that both are important, but I don&#039;t think that one is universally more important than the other. If a new test gen. algorithm covers a few percent more
coverage goals but a new language allows the verification engineer to develop
the original constrained random testbench 25% faster, I&#039;d take the latter.</description>
		<content:encoded><![CDATA[<p>ok, so a very belated response <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
First, I don&#8217;t think that it&#8217;s productive to focus on the semantics of&#8220;technology&#8221;.  What I guess I object to is the dismissive attitude toward<br />
languages that I get from your post. </p>
<p>You say that:</p>
<p>&#8220;I don’t believe any type of language is technology in the sense that the<br />
language itself has any special properties that make it better than other<br />
languages.&#8221;</p>
<p>But then go on to write:</p>
<p>&#8220;Languages that use higher levels of abstraction are more productive to use<br />
precisely because they use a higher level of abstraction.&#8221;</p>
<p>These seem contradictory to me: isn&#8217;t &#8220;more productive&#8221; also &#8220;better&#8221;? In any<br />
case, I think we can agree that some languages are more productive than others,<br />
C vs assembly, e.g.<br />
I would agree that a language isn&#8217;t very useful without associated programs to process it; if it was then the language with a syntactic construct<br />
&#8220;do-what-I-want&#8221; would be the end of the story.  However, I do think that language design, e.g. coming up with the right abstractions, can be enormously<br />
powerful. Many people find static scoping in languages like Haskell to be<br />
better than dynamic scoping; it&#8217;s subjective, but a &#8220;special&#8221; property that<br />
can be debated and isn&#8217;t really about a &#8220;higher level of abstraction&#8221;.</p>
<p>If we agree that one language can be more productive than another, then it seems the relevant question to ask is what is the relative benefit I get from a<br />
more productive verification engineer vs a more productive automated algorithm?<br />
I agree that both are important, but I don&#8217;t think that one is universally more important than the other. If a new test gen. algorithm covers a few percent more<br />
coverage goals but a new language allows the verification engineer to develop<br />
the original constrained random testbench 25% faster, I&#8217;d take the latter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entymology 101: the Third Law of Verification by Mario</title>
		<link>http://bugsareeasy.wordpress.com/2008/11/04/entymology-101-the-third-law-of-verification/#comment-67</link>
		<dc:creator>Mario</dc:creator>
		<pubDate>Wed, 16 Sep 2009 14:48:30 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=28#comment-67</guid>
		<description>Thanks for sharing this graph which has the merit of giving a concrete approach to this.  Unfortunately - for now - I can not confirm this based metrics I did.

I would however tend to disagree with this third law.  There is an saying that says something like when you solve a bug you&#039;ll be putting another one in that is harder to find.  We&#039;ve had this quite a number of times.

The metaphore of black and white balls is a nice one and is valid for bugs that have equal hardness.  A bug that is harder to find is like a ball that is harder to catch.
When I look at your graph, I observer that bug hardness doesn&#039;t drop under the value of about 3 once day 225 is passed.  So it looks like single event bugs and double event bugs have mostly been found.
Further, I think we have to be careful with how bug hardness is described.  In my opinion bug descriptions are localized to the block where they occur.  Even if I find a bug during DMA transfer to the memory, I would still write that it happens during memory write bursts forgetting to mention all the conditions that are needed to get the memory doing this kind of burst to that memory.  This is where separating IP Verification and Integration verification helps.  It is more efficient to verify smaller blocks exhaustively before integrating them in a larger system that is verified too.  And that might mean that one needs to split an IP into smaller pieces for verification.  This is not often done and it makes certain bugs just harder to find.

To conclude: interesting idea that I&#039;ll thinker about.</description>
		<content:encoded><![CDATA[<p>Thanks for sharing this graph which has the merit of giving a concrete approach to this.  Unfortunately &#8211; for now &#8211; I can not confirm this based metrics I did.</p>
<p>I would however tend to disagree with this third law.  There is an saying that says something like when you solve a bug you&#8217;ll be putting another one in that is harder to find.  We&#8217;ve had this quite a number of times.</p>
<p>The metaphore of black and white balls is a nice one and is valid for bugs that have equal hardness.  A bug that is harder to find is like a ball that is harder to catch.<br />
When I look at your graph, I observer that bug hardness doesn&#8217;t drop under the value of about 3 once day 225 is passed.  So it looks like single event bugs and double event bugs have mostly been found.<br />
Further, I think we have to be careful with how bug hardness is described.  In my opinion bug descriptions are localized to the block where they occur.  Even if I find a bug during DMA transfer to the memory, I would still write that it happens during memory write bursts forgetting to mention all the conditions that are needed to get the memory doing this kind of burst to that memory.  This is where separating IP Verification and Integration verification helps.  It is more efficient to verify smaller blocks exhaustively before integrating them in a larger system that is verified too.  And that might mean that one needs to split an IP into smaller pieces for verification.  This is not often done and it makes certain bugs just harder to find.</p>
<p>To conclude: interesting idea that I&#8217;ll thinker about.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entymology 101: The Second Law of Verification by Mario</title>
		<link>http://bugsareeasy.wordpress.com/2008/10/23/entymology-101-the-second-law-of-verification/#comment-66</link>
		<dc:creator>Mario</dc:creator>
		<pubDate>Wed, 16 Sep 2009 13:13:57 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=33#comment-66</guid>
		<description>a. Some bugs can not be detected in simulation.  I can ask one designer to make a counter up to say 1023 and this counter should indicate an overflow if it would need to go to 1024 which it can&#039;t.  It also has a reset input which makes the counter go to 0.
I integrate this counter in my design to serve as a delay counter which I reset every 128 cycles.
If my designer implemented the overflow badly, then if the use of the counter in the system respects the design requirements, I&#039;ll never see the bug in the counter.
However, if the delay controller does not reset the counter properly, there might be some rare case where the overflow does not work properly.
Something similar happened in a design I had to verify and one could say that it kind of happened for the first Ariane5 they had to blow up.
b. I&#039;ld prefer an objective metric for &#039;bug hardness&#039; and another that takes into account the effectiveness of the method used which could be &#039;effective/actual&#039; bug hardness.</description>
		<content:encoded><![CDATA[<p>a. Some bugs can not be detected in simulation.  I can ask one designer to make a counter up to say 1023 and this counter should indicate an overflow if it would need to go to 1024 which it can&#8217;t.  It also has a reset input which makes the counter go to 0.<br />
I integrate this counter in my design to serve as a delay counter which I reset every 128 cycles.<br />
If my designer implemented the overflow badly, then if the use of the counter in the system respects the design requirements, I&#8217;ll never see the bug in the counter.<br />
However, if the delay controller does not reset the counter properly, there might be some rare case where the overflow does not work properly.<br />
Something similar happened in a design I had to verify and one could say that it kind of happened for the first Ariane5 they had to blow up.<br />
b. I&#8217;ld prefer an objective metric for &#8216;bug hardness&#8217; and another that takes into account the effectiveness of the method used which could be &#8216;effective/actual&#8217; bug hardness.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Pitfalls of Comparing Verification Methodologies by Mario</title>
		<link>http://bugsareeasy.wordpress.com/2009/02/26/the-pitfalls-of-comparing-verification-methodologies/#comment-65</link>
		<dc:creator>Mario</dc:creator>
		<pubDate>Wed, 16 Sep 2009 12:54:41 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=290#comment-65</guid>
		<description>Not sure that orthogonal verification methods are the best term to use.  Surely two methods are not really orthogonal if they are both using dynamic simulation because then simulation would be the common factor.
I prefer the expression &quot;Defense in Depth&quot;.  That refers to the different lines of defense in &#039;war&#039;.  If the ennemy (the bug) would get through the first line of defense, then the second line of defense can still catch it.</description>
		<content:encoded><![CDATA[<p>Not sure that orthogonal verification methods are the best term to use.  Surely two methods are not really orthogonal if they are both using dynamic simulation because then simulation would be the common factor.<br />
I prefer the expression &#8220;Defense in Depth&#8221;.  That refers to the different lines of defense in &#8216;war&#8217;.  If the ennemy (the bug) would get through the first line of defense, then the second line of defense can still catch it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Amdahl&#8217;s Law is a Law (Hey, a New Post!) by bugsareeasy</title>
		<link>http://bugsareeasy.wordpress.com/2009/09/14/amdahls-law-is-a-law-hey-a-new-post/#comment-64</link>
		<dc:creator>bugsareeasy</dc:creator>
		<pubDate>Wed, 16 Sep 2009 06:17:59 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=331#comment-64</guid>
		<description>Grant,

The association of the word &quot;law&quot; with scientific laws is not very scientific (irony intended). For example, we call them Maxwell&#039;s equations, not Maxwell&#039;s laws, the simple reason being that each individual law was already named after someone else.

You may have heard of certain laws being called a &quot;square law&quot; or &quot;inverse law&quot;. Newton&#039;s universal law of gravitation is an example of an inverse square law. Put this way, interpreting &quot;law&quot; to mean proven or &quot;assumed to be true&quot; doesn&#039;t make sense. Interpreting &quot;law&quot; to mean &quot;relationship&quot; makes a lot more sense. Amdahl&#039;s law describes a relationship, so it makes sense to call it a law. 

It&#039;s interesting to think of why a relationship of quantities is called a law. We usually think of laws as governing behavior - you can&#039;t commit murder or run red lights, for example. Well, scientific laws also govern behavior. Newton&#039;s laws of motion govern how things move, for example.

Moore&#039;s law is an interesting case. It does state a relationship between two quantities, namely chip density and time. However, it doesn&#039;t actually allow you to make compute one quantity from another. The fact that this year is 2009 does not automatically mean you can calculate chip density. Moore&#039;s law says density doubles every 1.5 years, therefore you would need to know what the density was 1.5 years ago in order to predict the density today.  Maybe Moore&#039;s rule-of-thumb is more appropriate.

--chris</description>
		<content:encoded><![CDATA[<p>Grant,</p>
<p>The association of the word &#8220;law&#8221; with scientific laws is not very scientific (irony intended). For example, we call them Maxwell&#8217;s equations, not Maxwell&#8217;s laws, the simple reason being that each individual law was already named after someone else.</p>
<p>You may have heard of certain laws being called a &#8220;square law&#8221; or &#8220;inverse law&#8221;. Newton&#8217;s universal law of gravitation is an example of an inverse square law. Put this way, interpreting &#8220;law&#8221; to mean proven or &#8220;assumed to be true&#8221; doesn&#8217;t make sense. Interpreting &#8220;law&#8221; to mean &#8220;relationship&#8221; makes a lot more sense. Amdahl&#8217;s law describes a relationship, so it makes sense to call it a law. </p>
<p>It&#8217;s interesting to think of why a relationship of quantities is called a law. We usually think of laws as governing behavior &#8211; you can&#8217;t commit murder or run red lights, for example. Well, scientific laws also govern behavior. Newton&#8217;s laws of motion govern how things move, for example.</p>
<p>Moore&#8217;s law is an interesting case. It does state a relationship between two quantities, namely chip density and time. However, it doesn&#8217;t actually allow you to make compute one quantity from another. The fact that this year is 2009 does not automatically mean you can calculate chip density. Moore&#8217;s law says density doubles every 1.5 years, therefore you would need to know what the density was 1.5 years ago in order to predict the density today.  Maybe Moore&#8217;s rule-of-thumb is more appropriate.</p>
<p>&#8211;chris</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Amdahl&#8217;s Law is a Law (Hey, a New Post!) by gmartin15</title>
		<link>http://bugsareeasy.wordpress.com/2009/09/14/amdahls-law-is-a-law-hey-a-new-post/#comment-63</link>
		<dc:creator>gmartin15</dc:creator>
		<pubDate>Tue, 15 Sep 2009 19:56:04 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=331#comment-63</guid>
		<description>Interesting - in electronics engineering we call things laws that may be better described as &quot;Observations&quot; (I think of Moore&#039;s &quot;Law&quot; here) and &quot;Formulae&quot; (perhaps Amdahl&#039;s Law would be better as Amdahl&#039;s Forumula).  Even if meeting the requirement of being a scientific Law, I think the colloquial interpretation of a Law may constrain people&#039;s thinking.  For example:  in decoding a video stream using a portable device, there is a more or less sequential portion (using the user interface to select the video stream) followed by a parallelisable portion (decoding the stream).   In terms of overall elapsed time, the sequential portion cannot be sped up using parallel resources - but since it is controlled by the user reaction time much more than the sequential computation time, speeding it up may be irrelevant to the overall perception of speed.   And interestingly, use of parallel resources in the video decode may be not so much to speed it up (since a certain rate of processing is required) but to reduce overall energy consumption by running each resource at a lower frequency and hopefully requiring a lower supply voltage.  I think it may be fruitful for people to worry less about the sequential portion in many applications and start looking at them from different perspectives - irrespective of Laws or Formulae.

Grant Martin</description>
		<content:encoded><![CDATA[<p>Interesting &#8211; in electronics engineering we call things laws that may be better described as &#8220;Observations&#8221; (I think of Moore&#8217;s &#8220;Law&#8221; here) and &#8220;Formulae&#8221; (perhaps Amdahl&#8217;s Law would be better as Amdahl&#8217;s Forumula).  Even if meeting the requirement of being a scientific Law, I think the colloquial interpretation of a Law may constrain people&#8217;s thinking.  For example:  in decoding a video stream using a portable device, there is a more or less sequential portion (using the user interface to select the video stream) followed by a parallelisable portion (decoding the stream).   In terms of overall elapsed time, the sequential portion cannot be sped up using parallel resources &#8211; but since it is controlled by the user reaction time much more than the sequential computation time, speeding it up may be irrelevant to the overall perception of speed.   And interestingly, use of parallel resources in the video decode may be not so much to speed it up (since a certain rate of processing is required) but to reduce overall energy consumption by running each resource at a lower frequency and hopefully requiring a lower supply voltage.  I think it may be fruitful for people to worry less about the sequential portion in many applications and start looking at them from different perspectives &#8211; irrespective of Laws or Formulae.</p>
<p>Grant Martin</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Formal Verification Identity Crisis by Eugene Goldberg</title>
		<link>http://bugsareeasy.wordpress.com/2009/03/06/the-formal-verification-identity-crisis/#comment-60</link>
		<dc:creator>Eugene Goldberg</dc:creator>
		<pubDate>Sat, 13 Jun 2009 18:17:11 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=299#comment-60</guid>
		<description>Hi Chris,
1)	I continue commenting your last post.  As far as I understand, your example with a  combinational circuit that turns into a sequential one is aimed at finding  a limitation of  TTPE.  In reality, a formal proof and simulation work in the same search space. So having  a finite proof and infinite set of tests may mean only one thing:  formal verification and simulation work in different search spaces. Once  this problem is fixed either both a formal proof and test set  become infinite or finite.

2)	However,  if you are looking for a catch in TTPE, here it is. TTPE has the same problem as formal verification. Namely, to find a formal proof one needs to have a clearly defined search space.  (A formal proof is not just a set of operations over some meaningless symbols. Every symbol has to have a definition relating this symbol to the search space).  On the contrary, in simulation, one just needs to know how to perform a simulation run. For example, it is quite possible that for some test vectors, simulation  is not even possible yet (because some parts of the design are not finished yet). Then one can run simulation over allowable input assignments.   

BTW, this is one more answer to your question about separation of formal verification and simulation.  One can run simulation even when formal verification is not applicable  because the search space is still “under construction”.
3)  In theory the  answer to the question “Is it possible to produce a proof that is only polynomially larger than the minimum sized proof in polynomial time?” is no.  As I mentioned before this is due to the fact that all non-trivial proof systems known so far are most likely non-automatizable.  However these results  have  little bearing on  practical applications because they assume that no extra information is  given  about a particular formula.  In reality, every design has tons of extremely useful information that people just do not know how to use. One of the examples of extremely useful information is    design high-level structure.  When used properly  the knowledge of this structure may dramatically reduce the complexity of finding a good proof (the shortest proofs are ones formulated in  high-level terms).

Best regards,
Eugene</description>
		<content:encoded><![CDATA[<p>Hi Chris,<br />
1)	I continue commenting your last post.  As far as I understand, your example with a  combinational circuit that turns into a sequential one is aimed at finding  a limitation of  TTPE.  In reality, a formal proof and simulation work in the same search space. So having  a finite proof and infinite set of tests may mean only one thing:  formal verification and simulation work in different search spaces. Once  this problem is fixed either both a formal proof and test set  become infinite or finite.</p>
<p>2)	However,  if you are looking for a catch in TTPE, here it is. TTPE has the same problem as formal verification. Namely, to find a formal proof one needs to have a clearly defined search space.  (A formal proof is not just a set of operations over some meaningless symbols. Every symbol has to have a definition relating this symbol to the search space).  On the contrary, in simulation, one just needs to know how to perform a simulation run. For example, it is quite possible that for some test vectors, simulation  is not even possible yet (because some parts of the design are not finished yet). Then one can run simulation over allowable input assignments.   </p>
<p>BTW, this is one more answer to your question about separation of formal verification and simulation.  One can run simulation even when formal verification is not applicable  because the search space is still “under construction”.<br />
3)  In theory the  answer to the question “Is it possible to produce a proof that is only polynomially larger than the minimum sized proof in polynomial time?” is no.  As I mentioned before this is due to the fact that all non-trivial proof systems known so far are most likely non-automatizable.  However these results  have  little bearing on  practical applications because they assume that no extra information is  given  about a particular formula.  In reality, every design has tons of extremely useful information that people just do not know how to use. One of the examples of extremely useful information is    design high-level structure.  When used properly  the knowledge of this structure may dramatically reduce the complexity of finding a good proof (the shortest proofs are ones formulated in  high-level terms).</p>
<p>Best regards,<br />
Eugene</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Formal Verification Identity Crisis by Eugene Goldberg</title>
		<link>http://bugsareeasy.wordpress.com/2009/03/06/the-formal-verification-identity-crisis/#comment-59</link>
		<dc:creator>Eugene Goldberg</dc:creator>
		<pubDate>Sat, 13 Jun 2009 05:24:10 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=299#comment-59</guid>
		<description>Hi Chris,

1)	To explain how one can use proofs, I need to formulate two generic problems of testing/simulation (in terms of SAT). Problem number 1 (property checking):  given a CNF formula F, generate a set of points P such that F(P)=0  implies that F evaluates to 0 for all points.  In this problem, one uses simulation to check if a particular design property  holds. Problem number 2 (property preservation): given an unsatisfiable formula F, find a set of points P that detects satisfiable variations F* of F. This problem describes the situation when the  property in question holds for the current design and one needs to check if it still holds after a design change (the new design being specified by a CNF formula F*).  This change may describe a manufacturing fault or design modification depending on whether the design is implemented in hardware or as a software model.

2)	For solving problem 1 (property checking) one can use a proof that F is unsatisfiable under some symplifying assumptions. (I omit explanations here.)


3)	Here is how a proof can be used for solving problem number 2 (property preservation). Given a CNF formula F and a proof R, one  just builds a proof encoding P={p1,…,pk} of R and uses the input parts of  pi as tests. (Here pi is a complete assignment to the variables of F where F  specifies a circuit N. So  pi can be represented as  (ti,yi) where ti is the assignment to the input variables of N and yi is a simulation trace i.e. assignment to internal variables of N.) The main idea here is follows. One can view R as a proof of a complex proposition  F (describing  the  circuit N plus a property). Suppose that   N changes into N* due to a technological fault or design correction  and this change is described by CNF formula F* (specifying N* plus the same property).   Suppose that the property is broken (i.e. F* is satisfiable).  Then the proof R is obviously  wrong for F*. Since P encodes R there is high probability that  there is a point pi of P such  that F(pi) != F*(pi).  In this case,  the input part ti of pi is a test detecting the bug/fault.


4)	Here is a more concrete example. Let N be the circuit to be tested. If one generates a “natural” resolution proof R  that two copies of N are identical, then a proof encoding P={p1,..,pk} of R contains tests detecting all stuck-at faults (each test ti being the input part of pi of P as described above).    Interestingly, a proof encoding of R actually contains a stronger test set (because even a certain subset of P contains tests detecting all  stuck-at faults).  So not only, TTPE explains why the stuck-at fault model works well in ATPG, but it also shows a way to build stronger test sets.


5)	When I say that simulation can benefit  from  TTPE  (even if formal verification turns out to be unscalable) I mean the following. In many cases, one can derive some properties of good test sets without any knowledge of a proof. For example, in the new paper I mentioned before, I show that so called boundary points are good for encoding ANY resolution proof.  (A boundary point is a complete assignment  p such that all clauses falsified by p share the same variable). 

Another approach is to find a proof for a reduced version of the design at hand.  Then analyzing this proof one may come up with a better metric to be used for the entire design (e.g. when analyzing the proof one may identify some non-obvious events that have to be tested). 

Eugene</description>
		<content:encoded><![CDATA[<p>Hi Chris,</p>
<p>1)	To explain how one can use proofs, I need to formulate two generic problems of testing/simulation (in terms of SAT). Problem number 1 (property checking):  given a CNF formula F, generate a set of points P such that F(P)=0  implies that F evaluates to 0 for all points.  In this problem, one uses simulation to check if a particular design property  holds. Problem number 2 (property preservation): given an unsatisfiable formula F, find a set of points P that detects satisfiable variations F* of F. This problem describes the situation when the  property in question holds for the current design and one needs to check if it still holds after a design change (the new design being specified by a CNF formula F*).  This change may describe a manufacturing fault or design modification depending on whether the design is implemented in hardware or as a software model.</p>
<p>2)	For solving problem 1 (property checking) one can use a proof that F is unsatisfiable under some symplifying assumptions. (I omit explanations here.)</p>
<p>3)	Here is how a proof can be used for solving problem number 2 (property preservation). Given a CNF formula F and a proof R, one  just builds a proof encoding P={p1,…,pk} of R and uses the input parts of  pi as tests. (Here pi is a complete assignment to the variables of F where F  specifies a circuit N. So  pi can be represented as  (ti,yi) where ti is the assignment to the input variables of N and yi is a simulation trace i.e. assignment to internal variables of N.) The main idea here is follows. One can view R as a proof of a complex proposition  F (describing  the  circuit N plus a property). Suppose that   N changes into N* due to a technological fault or design correction  and this change is described by CNF formula F* (specifying N* plus the same property).   Suppose that the property is broken (i.e. F* is satisfiable).  Then the proof R is obviously  wrong for F*. Since P encodes R there is high probability that  there is a point pi of P such  that F(pi) != F*(pi).  In this case,  the input part ti of pi is a test detecting the bug/fault.</p>
<p>4)	Here is a more concrete example. Let N be the circuit to be tested. If one generates a “natural” resolution proof R  that two copies of N are identical, then a proof encoding P={p1,..,pk} of R contains tests detecting all stuck-at faults (each test ti being the input part of pi of P as described above).    Interestingly, a proof encoding of R actually contains a stronger test set (because even a certain subset of P contains tests detecting all  stuck-at faults).  So not only, TTPE explains why the stuck-at fault model works well in ATPG, but it also shows a way to build stronger test sets.</p>
<p>5)	When I say that simulation can benefit  from  TTPE  (even if formal verification turns out to be unscalable) I mean the following. In many cases, one can derive some properties of good test sets without any knowledge of a proof. For example, in the new paper I mentioned before, I show that so called boundary points are good for encoding ANY resolution proof.  (A boundary point is a complete assignment  p such that all clauses falsified by p share the same variable). </p>
<p>Another approach is to find a proof for a reduced version of the design at hand.  Then analyzing this proof one may come up with a better metric to be used for the entire design (e.g. when analyzing the proof one may identify some non-obvious events that have to be tested). </p>
<p>Eugene</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Formal Verification Identity Crisis by bugsareeasy</title>
		<link>http://bugsareeasy.wordpress.com/2009/03/06/the-formal-verification-identity-crisis/#comment-58</link>
		<dc:creator>bugsareeasy</dc:creator>
		<pubDate>Fri, 12 Jun 2009 04:40:12 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=299#comment-58</guid>
		<description>a few more thoughts,

1) I am not clear on what benefit the user derives from having a proof of unsatisfiability. There is certainly benefit to knowing that a property is unsatisfiable (no bugs), but I don&#039;t see how the user would use the proof. I think users would want to use the test vectors for regression testing. But, if the design changes, then the proof would change also. Running the old set of vectors on the new design does not mean that all bugs in the new design will be caught. Even on moderate sized designs, the proof could be thousands of vectors. I don&#039;t think anybody is going to spend a lot of time studying that many vectors, especially if the proof changes every time the design changes. Also, I don&#039;t understand your claim that TTPE is useful even if formal verification doesn&#039;t scale. I think the only way to produce a (minimal sized) proof is to use formal verification. I don&#039;t think it is possible to produce minimal sized proofs on large designs since formal verification won&#039;t work on large designs.

2) With respect to the definition of semi-formal verification, I agree that there are different levels of information, but even an implicit representation of what has not been proven is still more than simulation produces. The dividing line for me is zero knowledge vs. more than zero knowledge. An implicit representation is clearly some knowledge and so I think this is a pretty crisp definition.

3) I realized that my argument about what constitutes a complete proof in simulation is not quite right. It is not 2^N for an N-input circuit, but is, in fact, infinite. The issue is that for the proof to be 2^N, we have to make the assumption that the circuit is combinational when it may not be, even if the specification says so. Since, for simulation, I assume zero knowledge, we cannot make that assumption. For example, suppose we are verifying a 2-input AND gate. If we knew it was combinational, the proof would only be four vectors. But, it could have been designed incorrectly such that there is some state in the design and bugs don&#039;t manifest until after more than four vectors have been applied. (This actually happens  when designing at the transistor level). For any finite-sized proof, we could insert a time bomb that only triggers once the proof has been exhausted. Therefore, the only way to be sure there is no sequential behavior is to verify an infinite number of vectors.

4) Having said that, pragmatically, detecting whether a circuit has state or not is relatively easy (can be done in polynomial time, I think). Therefore, it is not unreasonable to claim that finite proofs can be generated using simulation provided we allow some amount of formal analysis as long as it is computationally tractable (say, no more than polynomial complexity).

5) The natural follow-on question from that is: are there polynomial formal analyses that can be done to reduce the proof size to less than 2^N? This would be extremely useful, especially if it were exponentially reduced in polynomial time. I am thinking of how NP-hard problems such as traveling salesman can be solved within a finite bound of being optimal in polynomial time. Is it possible to produce a proof that is only polynomially larger than the minimum sized proof in polynomial time?


cheers,

--chris</description>
		<content:encoded><![CDATA[<p>a few more thoughts,</p>
<p>1) I am not clear on what benefit the user derives from having a proof of unsatisfiability. There is certainly benefit to knowing that a property is unsatisfiable (no bugs), but I don&#8217;t see how the user would use the proof. I think users would want to use the test vectors for regression testing. But, if the design changes, then the proof would change also. Running the old set of vectors on the new design does not mean that all bugs in the new design will be caught. Even on moderate sized designs, the proof could be thousands of vectors. I don&#8217;t think anybody is going to spend a lot of time studying that many vectors, especially if the proof changes every time the design changes. Also, I don&#8217;t understand your claim that TTPE is useful even if formal verification doesn&#8217;t scale. I think the only way to produce a (minimal sized) proof is to use formal verification. I don&#8217;t think it is possible to produce minimal sized proofs on large designs since formal verification won&#8217;t work on large designs.</p>
<p>2) With respect to the definition of semi-formal verification, I agree that there are different levels of information, but even an implicit representation of what has not been proven is still more than simulation produces. The dividing line for me is zero knowledge vs. more than zero knowledge. An implicit representation is clearly some knowledge and so I think this is a pretty crisp definition.</p>
<p>3) I realized that my argument about what constitutes a complete proof in simulation is not quite right. It is not 2^N for an N-input circuit, but is, in fact, infinite. The issue is that for the proof to be 2^N, we have to make the assumption that the circuit is combinational when it may not be, even if the specification says so. Since, for simulation, I assume zero knowledge, we cannot make that assumption. For example, suppose we are verifying a 2-input AND gate. If we knew it was combinational, the proof would only be four vectors. But, it could have been designed incorrectly such that there is some state in the design and bugs don&#8217;t manifest until after more than four vectors have been applied. (This actually happens  when designing at the transistor level). For any finite-sized proof, we could insert a time bomb that only triggers once the proof has been exhausted. Therefore, the only way to be sure there is no sequential behavior is to verify an infinite number of vectors.</p>
<p>4) Having said that, pragmatically, detecting whether a circuit has state or not is relatively easy (can be done in polynomial time, I think). Therefore, it is not unreasonable to claim that finite proofs can be generated using simulation provided we allow some amount of formal analysis as long as it is computationally tractable (say, no more than polynomial complexity).</p>
<p>5) The natural follow-on question from that is: are there polynomial formal analyses that can be done to reduce the proof size to less than 2^N? This would be extremely useful, especially if it were exponentially reduced in polynomial time. I am thinking of how NP-hard problems such as traveling salesman can be solved within a finite bound of being optimal in polynomial time. Is it possible to produce a proof that is only polynomially larger than the minimum sized proof in polynomial time?</p>
<p>cheers,</p>
<p>&#8211;chris</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on The Formal Verification Identity Crisis by Eugene Goldberg</title>
		<link>http://bugsareeasy.wordpress.com/2009/03/06/the-formal-verification-identity-crisis/#comment-57</link>
		<dc:creator>Eugene Goldberg</dc:creator>
		<pubDate>Thu, 11 Jun 2009 13:58:00 +0000</pubDate>
		<guid isPermaLink="false">http://bugsareeasy.wordpress.com/?p=299#comment-57</guid>
		<description>Chris,Michael,

1)	The list of applications of TTPE (Treating Tests as a Proof Encoding) is very long. One of the most important applications is building  good metrics. (Currently finding  a metric is black magic.) TTPE implies that a formal proof is an “ideal metric”. It contains a complete set of events one needs to test to guarantee that the property in question holds.  So, examining  formal proofs of design properties and their encodings in terms of tests one actually studies high  quality metrics.

2)	In a sense, TTPE justifies formal verification once and for all. Before, a verification engineer could say that all  formal verification tools are toys that can handle only small design bits. Now, a formal verification person can  retort that  a formal proof is an ideal metric. Without studying the structure of proofs (and tests encoding those proofs) one can not make progress in the metrics business. Note that this argument works even if formal verification never becomes scalable.
Eugene</description>
		<content:encoded><![CDATA[<p>Chris,Michael,</p>
<p>1)	The list of applications of TTPE (Treating Tests as a Proof Encoding) is very long. One of the most important applications is building  good metrics. (Currently finding  a metric is black magic.) TTPE implies that a formal proof is an “ideal metric”. It contains a complete set of events one needs to test to guarantee that the property in question holds.  So, examining  formal proofs of design properties and their encodings in terms of tests one actually studies high  quality metrics.</p>
<p>2)	In a sense, TTPE justifies formal verification once and for all. Before, a verification engineer could say that all  formal verification tools are toys that can handle only small design bits. Now, a formal verification person can  retort that  a formal proof is an ideal metric. Without studying the structure of proofs (and tests encoding those proofs) one can not make progress in the metrics business. Note that this argument works even if formal verification never becomes scalable.<br />
Eugene</p>
]]></content:encoded>
	</item>
</channel>
</rss>