在语言环境中约束类型变量

时间:2017-01-06 13:39:44

标签: isabelle

Isabelle库包含类real_innerreal_normed_vector,后者在~~src/HOL/Library/Inner_Product.thy中被声明为前者的子类。

现在,假设我们有一个语言环境

locale foo =
  fixes goo :: "'a::{real_normed_vector} => bool"

并希望使用一些新常量扩展此语言环境,并同时将'a的类型限制为real_inner,如下所示:

locale extended = foo +
  fixes ext :: "'a::{real_inner} => nat"

有办法做到这一点吗?尝试使用上面的示例执行此操作时,Isabelle会在'b::{real_normed_vector} => bool中为goo提供extended类型,而我需要类型'a::{real_inner} => bool

1 个答案:

答案 0 :(得分:3)

你可以这样做:

locale extended = foo goo
  for goo :: "'a :: real_inner ⇒ bool" +
  fixes ext :: "'a => nat"