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
4
votes
1 answer

Find Lemmas used by simp/auto/clarify

How can I find which lemmas are used by the simp, auto methods, etc? In one concrete case, I have a goal like: lemma "x ∉ dom S ⟹ Something" apply auto and after applying auto I get: ¬ Something ⟹ ∃y. S x = Some y. I would like to find out why the…
Peter Zeller
  • 2,245
  • 19
  • 23
4
votes
1 answer

Defining functions between constants in Isabelle

I'm a mathematician just starting to get used to Isabelle, and something that should be incredibly simple turned out to be frustrating. How do I define a function between two constants? Say, the function f: {1,2,3} \to {1,2,4} mapping 1 to 1, 2 to…
4
votes
1 answer

Isabelle / isar: Implementing equational reasoning

I'm still trying to get my head around equality relations and how to define one in Isabelle. Luckily there is a chapter about this in the isar reference manual 2.3.1 p38f. I tried to rebuild the given example. To avoid any overlaps with the…
TKler
  • 135
  • 7
4
votes
1 answer

Isabelle - Code generation - typedef

I am trying to generate code from a very simple Isabelle-program. typedef point = "{p::(real*real). True}" by(auto) definition xCoord :: "point ⇒ real" where "xCoord P ≡ fst(Rep_point P)" export_code xCoord in Haskell module_name Example file…
LandWab
  • 43
  • 3
4
votes
1 answer

Operator overloading in Isabelle

I want to use the nat type in Isabelle but I want to overload some existing definitions like for example addition. I wrote the following code: theory Prueba imports Main HOL begin primrec suma::"nat ⇒ nat ⇒ nat" where "suma 0 n = 0" | "suma (Suc x)…
Martin Copes
  • 931
  • 1
  • 7
  • 14
4
votes
1 answer

Existing constants (e.g. constructors) in type class instantiations

Consider this Isabelle code theory Scratch imports Main begin datatype Expr = Const nat | Plus Expr Expr it is quite reasonable to instantiate the plus type class to get nice syntax for the Plus constructor: instantiation Expr :: plus begin …
Joachim Breitner
  • 25,395
  • 6
  • 78
  • 139
4
votes
0 answers

Isabelle/HOL proof of normalization of simply typed lambda calculus with pairs

Is there a formalization in Isabelle/HOL of the strong normalization property of the simply typed lambda-calculus with pairs? I am aware of the development in ~~/src/HOL/Proofs/Lambda/StrongNorm.thy, but that one does not support pairs. (Terms only…
Dominique Unruh
  • 1,248
  • 8
  • 23
4
votes
1 answer

Make automatic termination proof use different size function

I have written a custom size function size2 for my datatype. Using this function I can manually prove the termination of my function: termination apply (relation "measure (λ(a,b,c). size2 c)") apply auto done Is there a way to make fun use my…
Peter Zeller
  • 2,245
  • 19
  • 23
4
votes
1 answer

Inductive predicate with type parameters in Isabelle

I started learning Isabelle and wanted to try defining a monoid in Isabelle but don't know how. In Coq, I would do something like this: Inductive monoid (τ : Type) (op: τ -> τ -> τ) (i: τ): Prop := | axioms: (forall (e: τ), op e i = e) -> …
Alex
  • 1,184
  • 7
  • 15
4
votes
1 answer

Isabelle type unification/inference error

I'm just getting started in Isabelle and I'm getting a type unification error while working through Exercise 3.3 in of Concrete Semantics: Define a substitution function subst :: vname ⇒ aexp ⇒ aexp ⇒ aexp such that subst x a e is the result of…
4
votes
1 answer

Is there a reference definition of higher-order logic as in HOL, Isabelle, etc?

I am reading "Concrete semantics with Isabelle/HOL" and I am getting very intrigued by higher-order logic. I know ordinary first-order logic and some modal logic but I have little if none previous exposure to higher-order logic and its metatheory,…
Pietro Braione
  • 1,123
  • 8
  • 22
4
votes
1 answer

How to define abstract types in agda

How is it possible to define abstract types in Agda. We use typedecl in Isabelle to do so. More precisely, I would like the agda counterpart of the below code in Isabelle: typedecl A Thanks
qartal
  • 2,024
  • 19
  • 31
4
votes
3 answers

A theorem prover / proof assistant supporting (multiple) subtyping / subclassing

In short, I am looking for a theorem prover which its underlying logic supports multiple subtyping / subclassing mechanism.( I tried to use Isabelle, but it does not seem to provide a first class support for subtyping. see this ) I would like to…
qartal
  • 2,024
  • 19
  • 31
4
votes
2 answers

Printing out / showing detailed steps of proof methods (like simp) in a proof in isabelle

Suppose I have the following code in Isabelle: lemma"[| xs@zs = ys@xs ;[]@xs = []@[] |] => ys=zs" (*never mind the lemma body*) apply simp done In the above code, The simp method proves the lemma. I am interested to see and print out the detailed…
qartal
  • 2,024
  • 19
  • 31
4
votes
2 answers

Taming meta implication in Isar proofs

Proving a simple theorem I came across meta-level implications in the proof. Is it OK to have them or could they be avoided? If I should handle them, is this the right way to do so? theory Sandbox imports Main begin lemma "(x::nat) > 0 ∨ x =…
Gergely
  • 6,879
  • 6
  • 25
  • 35