isabelle

Core of Verifier in Isabelle/HOL

爷,独闯天下 提交于 2020-12-29 04:12:25
问题 Question What is the core algorithm of the Isabelle/HOL verifier? I'm looking for something on the level of a scheme metacircular evaluator. Clarification I'm only interested in the Verifier , not the strategies for automated theorem proving. Context I want to implement a simple proof verifier from scratch (purely for education reasons, not for production use.) I want to understand the core Verifier algorithm of Isabelle/HOL. I don't care about the strategies / code used for automated theorem

Why can't I make my cases explicit in Isabelle when the proof is already complete but gives a “fails to refine any pending goal” error?

℡╲_俬逩灬. 提交于 2020-06-08 19:59:33
问题 I'm going through chapter 5 of concrete semantics. I got some error while working through this toy example proof: lemma shows "¬ ev (Suc 0)" I know this is more than needed (since by cases ) magically solves everything & gives a finished proof, but I wanted to make explicit the cases. I tried this: lemma shows "¬ ev (Suc 0)" proof (rule notI) assume "ev (Suc 0)" then show False proof (cases) case ev0 then show ?case by blast next case evSS then show ?case sorry qed but if I put my mouse on

Using the type-to-sets approach for defining quotients

一笑奈何 提交于 2020-05-30 11:28:27
问题 Isabelle has some automation for quotient reasoning through the quotient package. I would like to see if that automation is of any use for my example. The relevant definitions is: definition e_proj where "e_proj = e'_aff_bit // gluing" So I try to write: typedef e_aff_t = e'_aff_bit quotient_type e_proj_t = "e'_aff_bit" / "gluing However, I get the error: Extra type variables in representing set: "'a" The error(s) above occurred in typedef "e_aff_t" Because as Manuel Eberl explains here, we

Using the type-to-sets approach for defining quotients

Deadly 提交于 2020-05-30 11:28:10
问题 Isabelle has some automation for quotient reasoning through the quotient package. I would like to see if that automation is of any use for my example. The relevant definitions is: definition e_proj where "e_proj = e'_aff_bit // gluing" So I try to write: typedef e_aff_t = e'_aff_bit quotient_type e_proj_t = "e'_aff_bit" / "gluing However, I get the error: Extra type variables in representing set: "'a" The error(s) above occurred in typedef "e_aff_t" Because as Manuel Eberl explains here, we

What is the best way to search through general definitions, theorems, functions, etc for Isabelle?

北慕城南 提交于 2020-05-29 02:35:49
问题 I was trying to go through the Isar chapter for Isabelle (theorem Prover) and the first statement has: lemma "¬ surj(f :: 'a ⇒ 'a set)" I wanted to understand what the constant surj was. I know that it's easy to look up theorems with: thm notI which displays: (?P ⟹ False) ⟹ ¬ ?P I tried googling surj but nothing useful came up. I went to the documentation (https://isabelle.in.tum.de/documentation.html) but I couldn't find an easy way to search through it (e.g. with a search bar). How do

Isabelle's document preparation

不问归期 提交于 2020-05-15 06:45:09
问题 I would like to obtain the LaTeX code associated with this theory. Previous answers only provide links to the documentation. Let me describe what I did. I went to the directory of Hales.thy and executed isabelle mkroot , followed by isabelle build -D . , which generated a file named document and a *.pdf file which was suspiciously (nearly) empty. Modifications of this command by adding Hales.thy as a parameter didn't succeed. I would appreciate if someone could describe briefly the commands

Case analysis on function definition in Isabelle

旧时模样 提交于 2020-04-30 08:33:31
问题 Imagine I have a function definition with three cases: function f where eq1 if cond1 | eq2 if cond2 | eq3 if cond3 How can I prove some equation: f x y = f y x using case analysis on the left-hand side? Just writing apply(cases f.cases) does not work for me. I get an error Undefined constant: "f"⌂ 回答1: I decided to post my comment as an answer in an attempt to close this issue. For your use case, it should be possible to use apply(cases ‹(x, y)› rule: f.cases) (or similar). However, it would