Читается это довольно просто, а вот специфическую литературу не помню.
Сначала, видимо, просто описывают название АТД. Оно дальше никак не используется (логичнее считать, что используется
, которое
ниже) и написано либо для возможности ссылаться на этот «модуль» целиком где-то дальше, либо потому что писавшему хотелось какого-то замыкания и он стеснялся без; математически этот заголовок не имеет никакой ценности.
Дальше описываются сорты значений, которые нужны для описания операций, позволяемых над этим АТД. Скорее всего, вы знакомы с типами значений в программировании, вот тут это одно и то же (если и есть какие-то отличия, в этом фрагменте их нельзя усмотреть). Описаны, как можно видеть, сорт объектов самого АТД
и сорты целых чисел
и логических значений
.
Дальше идёт описание сигнатур/заголовков/типов операций — называть могут по-разному, но в сущности здесь говорится, аргументы каких типов операции принимают и какого типа значения возвращают. (И вы зря выделили названия операций
как ключевые слова.) Например,
должно означать, что принимаются
и
и выдаётся
— как в математической записи определения функции, и функция это и есть (а сорты можно понимать как множества); по смыслу же, очевидно,
должно означать множество, полученное из
добавлением
. Попробуйте с остальными (их смысл должен однозначно восстанавливаться из аксиом, даже если его не описали неформально где-то перед этим определением).
И в конце мы видим аксиомы, говорящие, какой у операций смысл. Например, если добавить в множество два раза подряд один и тот же элемент, это должно быть то же самое, что добавить в него элемент один раз. Это перевод аксиомы
. Попробуйте с остальными тоже.
как это писать
Скорее всего никакого стандарта наподобие UML для описания АТД нет. Когда дело доходит до их реализации, всё пишется уже в терминах конкретного языка, а когда нужны теоретические изыскания, то по-хорошему авторы или ссылаются на схему, которую используют, или описывают её на месте хотя бы рукомахательно, или надеются на то, что читатель более-менее в теме и поймёт, чему какая конструкция должна соответствовать. Автор же вашего курса скорее всего должен был сделать первое или второе, потому что третье было бы нечестно — и если ничего совсем нашлось, мои соболезнования.
Ещё: если вы знакомы с каким-нибудь языком программирования с зависимыми типами, то можете воспринимать это описание как этакий «интерфейс» (если язык их позволяет — взять хоть Idris — ещё лучше), в котором есть «нормальные» методы — операции — и «методы-аксиомы», для которых перечисленные здесь аксиомы будут в таком случае типами (а названия этих методов могут символизировать смысл аксиом), и пишущий реализацию должен реализовать не только операции, но и методы-аксиомы, написав их доказательства, которые скомпилируются только тогда, когда реализация в целом корректна (с точки зрения вот такой спецификации).
(Оффтоп)
Или же такое описание можно понимать как описание формальной теории в некотором (многосортном) языке первого порядка, но это вряд ли кому-нибудь поможет, потому что там, где они обычно описываются (учебники матлогики; притом многосортные теории рассматриваются крайне редко в обычных учебниках), речь обычно совсем о другом.
UPD: ещё немного поредактировал-подобавлял.
-- Вт май 14, 2019 21:50:12 --empty: -> intset
Да, ещё вот это место наверняка может запутать. Тут написано, если математически, либо что
, где
— это множество, содержащее кортеж нулевой длины, либо что
(более традиционно это
) — это или нульместная функция с типом результата
, либо константа такого типа; это одно и то же, и можно видеть, что в аксиомах используется
без пустых скобок, но вообще они могли бы там быть.
-- Вт май 14, 2019 21:52:18 --а вот специфическую литературу не помню
С другой стороны если в некоторой книге есть хотя бы раздел или глава, посвящённые только АТД, там наверняка будет введена какая-то нотация типа той, что выше. Поищите книги, в названии которых упоминается АТД, вдруг найдётся что.