### isabelle

#### 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 λ.

### Related Links

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?