Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Concerning your statement <em>sledgehammer is one of the most important parts of Isabelle</em>: You <em>never need</em> sledgehammer to succeed with a proof. But of course sledgehammer is <em>very</em> convenient and can save a lot of tedious reasoning. Thus it is definitely a very important part for making Isabelle more usable for people who did not spend many years using it (and even for those sledgehammer makes everyday proving more productive).</p> <p>Coming to your question</p> <blockquote> <p>Try the <code>blast</code> or <code>auto</code> proof methods, passing the necessary facts via <code>unfolding</code>, <code>using</code>, <code>intro:</code>, <code>elim:</code>, <code>dest:</code>, or <code>simp:</code>, as appropriate.<br> [...]<br> So what about [this] option. Are there any easy to follow heuristics that I can apply?</p> </blockquote> <p>Indeed there are:</p> <p><code>unfolding</code>: This (recursively) <em>unfolds</em> equations, i.e., it is very similar to <code>apply (simp only: ...)</code>. The heuristic is, when you do not get the expected result with <code>simp: ...</code> try <code>unfolding ...</code> instead (it might be the case that other equations are interfering).</p> <p><code>using</code>: This is used to add additional assumptions to the current subgoal. The heuristic is, whenever a fact does not fit one of the patterns below, try <code>using</code> instead.</p> <p><code>intro:</code>: This is used for <em>introduction rules</em>, i.e., of the form that whenever certain assumptions are satisfied some connective (or more generally constant) may be introduced.<br> <strong>Example:</strong> <code>A ==&gt; B ==&gt; A &amp; B</code> (where the introduced constant is <code>op &amp;</code>).</p> <p><code>elim:</code>: This is used for <em>elimination rules</em>, i.e., of the form that from the presence of a certain connective (or more generally constant) some facts may be concluded as additional assumptions.<br> <strong>Example:</strong> <code>A &amp; B ==&gt; (A ==&gt; B ==&gt; P) ==&gt; P</code> (where the constant <code>op &amp;</code> is eliminated in favour of explicitly having <code>A</code> and <code>B</code> as assumptions). Note the general form of the conclusion (which is not related to the major premise <code>A &amp; B</code>), this is important to not loose provability (see also <code>dest:</code>).</p> <p><code>dest:</code>: This is used for <em>destruction rules</em>, i.e., of the form that from the presence of a certain constant some facts may be concluded directly.<br> <strong>Example:</strong> <code>A &amp; B ==&gt; B</code> (Note that the information that <code>A</code> holds is lost in the conclusion, unlike in the <code>elim:</code> example.)</p> <p><code>simp:</code>: This is used for <em>simplification rules</em>, i.e., (conditional) equations, which are always applied from left to right (thus it is sometimes useful to add <code>[symmetric]</code> to a fact, in order to apply it from right to left, but beware of nontermination, for it is easy to introduce looping derivations in this way).</p> <p>Having said this, often it is just experience that lets you decide in which way best to employ a given fact inside a proof. What I usually do when I got a proof by <code>sledgehammer</code> which is too slow in Isar is to inspect the facts that where used by the found proof. Then categorize them as above, invoke <code>auto</code> appropriately and if that did not completely solve the goal, apply <code>sledgehammer</code> once more (hopefully delivering an "easier" proof this time).</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload