Questions tagged [isabelle]

Isabelle is a generic proof assistant, with Isabelle/HOL as main instance.

Isabelle is a generic proof assistant, which is best-known for its Isabelle/HOL instance. It allows mathematical formulas to be expressed in a formal language and provides tools for proving those formulas in a logical calculus. HOL specifications may be turned into program code in SML, OCaml, Haskell, or Scala. Isabelle includes many add-on tools like CVC4, Z3, SPASS, E prover.

User interfaces

Important links

1111 questions
0
votes
2 answers

Factoring out a lemma premise as a definition causes failure in proof method (auto) application in isabelle

I have the following code in Isabelle: typedecl Person consts age :: "Person ⇒ int" lemma "⟦(∀p::Person. age p > 20);p ∈ Person⟧⟹ age p > 20" apply (auto) done The auto proof method works fine and proves the lemma! when I want to factor out the…
qartal
  • 2,024
  • 19
  • 31
0
votes
1 answer

Organizing constraints in isabelle in order to model a system

Suppose that I have the following expression in Isabelle/HOL: typedecl Person typedecl Car consts age :: "Person ⇒ int" consts drives ::"(Person × Car) set" consts owns ::"(Person × Car) set" This is supposed to model Person and Car types with…
qartal
  • 2,024
  • 19
  • 31
0
votes
1 answer

Can I "map" an "OF" over a list of lemmas

I just wrote this code: lemmas gc_step_intros = normal[OF step.intros(1)] normal[OF step.intros(2)] normal[OF step.intros(3)] normal[OF step.intros(4)] normal[OF step.intros(5)] drop where step.intros really only has 5 lemmas. Is there a…
Joachim Breitner
  • 25,395
  • 6
  • 78
  • 139
0
votes
2 answers

How do I do simple multithreading in Isabelle ML?

I've found a use for wanting to start multiple Isabelle_System.bash processes. In this next source, I use 3 bash commands. For a simple example, I would like to start them in separate threads, so that they run concurrently, rather than…
user3317019
0
votes
2 answers

Search for element in tree in Isabelle

I have this function testing wether an element is in a binary tree or not: fun lookup::"int⇒bst⇒bool" where "lookup x _ = false" | "lookup x bst = ( if x = root(bst) then true else if x≤root(bst) then lookup x left(bst) else lookup x…
Sophie Sepp
  • 521
  • 1
  • 5
  • 16
0
votes
1 answer

Predefined functions for Binary trees in Isabelle

Are there any predefined functions for binary trees in Isabelle? For example to move to the left side of a binary tree?
Sophie Sepp
  • 521
  • 1
  • 5
  • 16
0
votes
1 answer

How to prove the reversion of a doubling function equals the doubling of a reversion function in Isabelle?

I have a function that doubles the elements of a list in the form double [x1, x2, ...] = [x1, x1, x2, x2, ...] namely fun double :: " 'a list ⇒ 'a list" where "double [] = []" | "double (x#xs) = x # x # double xs" and a function that…
Sophie Sepp
  • 521
  • 1
  • 5
  • 16
0
votes
3 answers

Transitive closure of identity relation

I am not able to prove the the following lemma in Isabelle: lemma "Id^* = Id" Any ideas on how to prove this?
Nuno Amálio
  • 101
  • 7
0
votes
2 answers

How to specify a non-document theory file in ROOT?

I import Nominal2 into my main theory file and in Isabelle/jEdit I can use atom_decl so it works. In ROOT I tried various attempts to specify Nominal2, like session "techreport" = "HOL" + options [document = pdf, document_output = "output"] …
Gergely
  • 6,879
  • 6
  • 25
  • 35
0
votes
1 answer

Isabelle simple double function

Im brand new to Isabelle, and HOL programming in general. One of the exercises in a text book is to: Define a recursive function double :: nat ⇒ nat and prove double m = add m m. Im Still trying to define it but i can't figure it out., Here is what…
Eridanis
  • 410
  • 1
  • 6
  • 19
0
votes
1 answer

Initial proof method to consume all incoming facts

Assume I have a goal A ⟹ B ⟹ C ⟹ G The goal is unwieldy (generated from some proof obligation), and it appears (in similar shape) several times in my development. So I create a lemma foo to simplify the goal, of the shape A ⟹ C ⟹ (P ⟹ Q) ⟹ G. I’d…
Joachim Breitner
  • 25,395
  • 6
  • 78
  • 139
0
votes
1 answer

How to streamline a proof of a function property on a datatype?

I have created a small proof with the intention of creating an example for using next on proof cases: theory RedGreen imports Main begin datatype color = RED | GREEN fun green :: "color => color" where "green RED = GREEN" | "green…
Gergely
  • 6,879
  • 6
  • 25
  • 35
0
votes
1 answer

Want to translate syntax "F;" to "True,True,True,True" and use it in a "bool list"

This represents what I want, but which doesn't work: syntax "_F_hex" :: "any => any" ("F;") translations "F;" => "True,True,True,True" I would use F; like this: [F;,F;] == [True,True,True,True,True,True,True,True]
user3317019
0
votes
1 answer

Datatype equality in higher order logic

Having the following theory: theory BitVector imports Main begin datatype bitvector = BTM | BITV bool bitvector lemma "∀ x1 x2 y1 y2. (BITV x1 x2 = BITV y1 y2) = (x1=y1) ∧ (x2=y2)" I get the following proof state: proof (prove): step 0 goal (1…
Gergely
  • 6,879
  • 6
  • 25
  • 35
0
votes
1 answer

Where is nat base 10 converted to num base 2?

For term "15::nat", the value 15 is automatically converted to the binary value (num.Bit1 (num.Bit1 (num.Bit1 num.One))). I would like to know where that's done, so I can know how it's done. (Small update: I know that 15 is a type class numeral…
user3317019