Two classes are defined containing the same function, but when the two classes is used in a locale there is an unification error:
theory Scratch
imports Main
begin
class c1 =
fixes getName :: "'a ⇒ string"
class c2 =
fixes getName :: "'a ⇒ string"
locale c12 =
fixes match :: "('a::c1) ⇒ ('b::c2) ⇒ bool"
assumes as : "match a b ⟶ (getName a) = (getName b)"
end
The unification error is resolved by renaming (getName b) to (getName_b b) and use the class definition
class c2 =
fixes getName_b :: "'a ⇒ string"
Does a solution exist without renaming?
Here a solution is given when the overloading is needed when datatypes are parameters.