Как я могу создать экземпляр класса типов в =>? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь использовать Изабель / Pure в качестве логической основы для реализации помощника по проверке новой логики (поэтому Изабель / HOL не имеет значения, кроме как мотивация).

Есть ли способ определить класс типовсоздание экземпляра для функции type =>, что-то вроде

instantiation "=>" :: (foo,foo)foo

, так что когда A и B будут экземплярами foo, тогда A => B будет автоматически?Вышеуказанный синтаксис не принят;кажется, что мне нужно имя для конструктора типа функции (не просто нотация), но если такое имя существует, я не знаю, что это такое и где его найти.

Я новичок вИзабель, поэтому, пожалуйста, скажи мне, если я по какой-то причине пытаюсь сделать что-то неправильное.

1 Ответ

0 голосов
/ 04 июня 2018

Да, вы можете определить экземпляр класса для функций.Это не проблема, если вы используете имя конструктора типов для функций fun, а не инфиксный оператор =>.

Например:

class foo = 
  fixes bar :: 'a

instantiation "fun" :: (foo,foo) foo
begin
definition "(bar :: 'a ⇒ 'b) = (λ x. bar)" 
instance ..
end

Два замечания:

  • fun в двойных кавычках, так как в противном случае он конфликтовал бы с внешним ключевым словом fun для определения функций.
  • в этом примере вы также можете написать instantiation "fun" :: (type,foo) foo, поскольку определение bar для функций не зависит от константы bar типа 'a.
...