Упражнения по теме Добавление новых функций и типов
-
Постройте модель для следующих символов и конъюнкции утверждений:
function a: int
function b: int
function f int int: int
f a a <> f b b
f a b = a
f (f b a) b <> f a b </code>
-
Определите и докажите наличие/отсутствие логического следствия (при помощи построения модели):
function z: int
function d: int
function f int int: int
axiom A0: z <> d
axiom A1: forall a. f z a = a
axiom A2: forall a b. f a b = f b a
goal G: forall x. f (f z x) (f x d) = f (f x x) d </code>
-
Определите и докажите наличие/отсутствие логического следствия (при помощи построения модели) - те же символы, что и в предыдущем задании, но везде вместо
int
используется множество мощности 2. - Та же задача, что и пункте 2, но с еще одной аксиомой:
axiom A3: forall a b c. f (f a b) c = f a (f b c)
-
Определите всё необходимое для поддержки знаковой машинной арифметики (сложение, вычитание, умножение, сравнения): тип-символ для ограниченных целых, функциональные и предикатные символы, примитивы для моделей программы.
-
На языке WhyML напишите модель программы и модель требований из практического задания 1. Используйте аксиоматизацию из предыдущего упражнения. Докажите полную корректность.
-
Определите теорию для списков – последовательностей конечной длины из значений некоторого одного типа.
- При помощи наших средств докажите следующее утверждение: длина конкатенации списков равна сумме их длин.