Isabelle HOLCF doesn't understand fixrec
Here is a very simple theory: theory Test imports HOLCF begin fixrec down :: "'a u → 'a" where "down (up x) = x" end It gives the following error: Type unification failed: Clash of types "_ ⇒ _" and "_ → _" Type error in application: operator not of function type Operator: up :: ??'a → ??'a⇩⊥ Operand: x :: ??'b I have tried to declare different functions but I always get a similar error. What's a problem and how to fix it? I tried to replace → by ⇒, but it doesn't help.
The single arrow → is the space of continuous functions whereas the double arrow ⇒ represents the space of all total functions. All packages in HOLCF only work with continuous functions. This is why ⇒ will not work for most of HOLCF. Function application for continuous functions, however, must be written explicitly using the ASCII infix operator $ or \<cdot>. So the following works: fixrec down :: "'a u → 'a" where "down $ (up $ x) = x" Similarly, lambda abstractions for continuous functions use a capital Λ instead of a small λ.
Establishing that a record type belongs to a given class
Generating Isabelle HTML documentation *without proofs*
When would you use `presume` in an Isar proof?
how to create an object logic via thf
What Isabelle library to reuse for expressing that some function is a linear order (on some set)
Isabelle: how to print result of 1 + 2?
Inductive Set with Non-fixed Parameters
What Kind of Type Definitions are Legal in Local Contexts?
Isabelle: Sledgehammer finds a proof but it fails
How to hide defined constants
Inductive predicates for a fixed tuple parameter
proof (rule disjE) for nested disjunction
Canonical way to get a more specific lemma
Can I define multiple names for a theorem?
How do I remove duplicate subgoals in Isabelle?
Why won't Isabelle simplify the body of my “if _ then _ else” construct?