На волне недавних тем насчёт логики вспомнил про эту вещь и опишу здесь возникший велосипед (практически никакой свободы выбора деталей не было, потому это наверняка уже триста раз придумывали и просто трудно найти).
Обычно для простоты изложения [предикатные и функциональные] символы языка интерпретируются как отношения и операции на всей области интерпретации. Если при этом мы имеем дело, скажем, с операцией взятия обратного элемента в кольце, она доопределяется на элементах, у которых нет обратного, как угодно, т. к. формулы с «неправильным» использованием соответствующего символа появляться не должны. Лично мне такой подход когда-то был странен, но сейчас привычен, что всё равно не мешает рассмотреть более сложную альтернативу (которая, возможно, прошлому мне понравилась бы больше [после написания уже не так уверен]).
Для этого внесём несколько изменений в определения формулы первого порядка и интерпретации. Формулой теперь будет ещё и конструкция
![$\mathrm{defined}(e)$ $\mathrm{defined}(e)$](https://dxdy-03.korotkov.co.uk/f/6/6/5/66519098814e3927a51573a2e4e2421482.png)
для любого терма или формулы
![$e$ $e$](https://dxdy-01.korotkov.co.uk/f/8/c/d/8cd34385ed61aca950a6b06d09fb50ac82.png)
соответствующего языка. Интерпретации коснётся куча изменений, так что определим всё с нуля. Пусть множество формул нашего видоизменённого языка —
![$\mathcal F$ $\mathcal F$](https://dxdy-03.korotkov.co.uk/f/e/2/d/e2d5d4a1d2b179a56832b70d26157d9382.png)
, термов —
![$\mathcal T$ $\mathcal T$](https://dxdy-01.korotkov.co.uk/f/0/8/b/08b23d9ce416111822470c1e9e961e6e82.png)
, переменных —
![$\mathcal V$ $\mathcal V$](https://dxdy-02.korotkov.co.uk/f/5/4/3/543a7bd20b094514d4c7472b450ff77582.png)
, функциональных символов —
![$F$ $F$](https://dxdy-04.korotkov.co.uk/f/b/8/b/b8bc815b5e9d5177af01fd4d3d3c2f1082.png)
, предикатных символов —
![$P$ $P$](https://dxdy-02.korotkov.co.uk/f/d/f/5/df5a289587a2f0247a5b97c1e8ac58ca82.png)
; множество
![$B^A$ $B^A$](https://dxdy-03.korotkov.co.uk/f/6/5/2/6526ef576f7a52378385a5e13f38c4de82.png)
будем также обозначать
![$A\to B$ $A\to B$](https://dxdy-03.korotkov.co.uk/f/6/e/d/6edc8a876728a5e3fcd408de719f28fc82.png)
;
![$A^* := \bigcup_{n=0}^\infty A^n$ $A^* := \bigcup_{n=0}^\infty A^n$](https://dxdy-03.korotkov.co.uk/f/6/f/7/6f776a74fd3f1c199870376290a40f5e82.png)
; множество логических значений
![$\mathbb B := \{0,1\}$ $\mathbb B := \{0,1\}$](https://dxdy-02.korotkov.co.uk/f/d/3/0/d3029c0d9f2d8df0af5c151265e6ed9e82.png)
с обычными операциями
![$\wedge,\vee,\to,\neg,\ldots$ $\wedge,\vee,\to,\neg,\ldots$](https://dxdy-03.korotkov.co.uk/f/a/a/d/aad2c424b5c4d1275cbeeef3635a209582.png)
на нём.
Интерпретацией языка назовём набор из
• области интерпретации
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
;
• функции областей определения
![$D\colon F\cup P\to2^{A^*}$ $D\colon F\cup P\to2^{A^*}$](https://dxdy-03.korotkov.co.uk/f/2/8/a/28af8acee9251216809372788364a66a82.png)
, причём должно выполняться
![$D(s)\subset A^{\operatorname{arity}(s)}$ $D(s)\subset A^{\operatorname{arity}(s)}$](https://dxdy-04.korotkov.co.uk/f/f/c/e/fcea4f487e7256bdd923fc2694336d0682.png)
(хотя можно этого — вместе с фиксированностью арности — не требовать, но тут это оффтоп);
• интерпретаций символов
![$I\colon F\to(A^*\to A)$ $I\colon F\to(A^*\to A)$](https://dxdy-04.korotkov.co.uk/f/b/c/6/bc679a70fa043c5fa80b45eb7151df2782.png)
,
![$I\colon P\to(A^*\to\mathbb B)$ $I\colon P\to(A^*\to\mathbb B)$](https://dxdy-04.korotkov.co.uk/f/7/a/a/7aa37952e44454db7f1cd8e1ecf68d1d82.png)
, причём должно выполняться
![$\operatorname{dom}I(s) = D(s)$ $\operatorname{dom}I(s) = D(s)$](https://dxdy-01.korotkov.co.uk/f/8/4/2/842fa4b74324d1783428684e67a88b6182.png)
;
• функции определённости термов
![$DI\colon\mathcal T\times(\mathcal V\to A)\to\mathbb B$ $DI\colon\mathcal T\times(\mathcal V\to A)\to\mathbb B$](https://dxdy-02.korotkov.co.uk/f/5/a/1/5a1620418888216222774f7374619ec382.png)
такой, что
![$(I(t_1,w),\ldots,I(t_n,w))\in D(f)$ $(I(t_1,w),\ldots,I(t_n,w))\in D(f)$](https://dxdy-01.korotkov.co.uk/f/c/a/0/ca0b243dfb5b699d6582fc005fa4801882.png)
и
![$DI(v,w) = 1$ $DI(v,w) = 1$](https://dxdy-01.korotkov.co.uk/f/8/9/3/893d60e93e9c91fa319fc85a228ff6f682.png)
;
• функции интерпретации термов
![$I\colon\mathcal T\to(\mathcal V\to A)\to A$ $I\colon\mathcal T\to(\mathcal V\to A)\to A$](https://dxdy-01.korotkov.co.uk/f/4/2/5/4258b3e3d7f94f045f77df8bbb7f940f82.png)
такой, что
![$I(f(t_1,\ldots,t_n),w) = I(f)(I(t_1,w),\ldots,I(t_n,w))$ $I(f(t_1,\ldots,t_n),w) = I(f)(I(t_1,w),\ldots,I(t_n,w))$](https://dxdy-03.korotkov.co.uk/f/a/3/8/a384a4c020a3c71e7686f12b7e4ca3f382.png)
, если правая часть равенства определена, и
![$I(v,w) = w(v)$ $I(v,w) = w(v)$](https://dxdy-02.korotkov.co.uk/f/d/c/c/dccaa9e2c13aa694c72c59e98c75d4da82.png)
— а если не
![$DI(t,w)$ $DI(t,w)$](https://dxdy-02.korotkov.co.uk/f/5/0/0/500979596b70a02199cd7439bbcd630682.png)
,
![$I(t,w)$ $I(t,w)$](https://dxdy-01.korotkov.co.uk/f/4/2/c/42cfb739c9f09da82ffbe22b3b13039682.png)
может быть чем угодно;
• функции определённости формул
![$DI\colon\mathcal F\times(\mathcal V\to A)\to\mathbb B$ $DI\colon\mathcal F\times(\mathcal V\to A)\to\mathbb B$](https://dxdy-03.korotkov.co.uk/f/6/b/4/6b4897cd6a48b5c805d89e87eacfb57482.png)
такой, что:
![$(I(t_1,w),\ldots,I(t_n,w))\in D(p)$ $(I(t_1,w),\ldots,I(t_n,w))\in D(p)$](https://dxdy-02.korotkov.co.uk/f/1/c/7/1c7c72d10499b3afdfc7238c639e73a082.png)
,
![$DI(\neg A,w) = DI(A,w)$ $DI(\neg A,w) = DI(A,w)$](https://dxdy-01.korotkov.co.uk/f/4/4/f/44f30e9dd371fc9f022c9ac233eec4ab82.png)
,
![$DI(B,w)\wedge\neg I(B,w)$ $DI(B,w)\wedge\neg I(B,w)$](https://dxdy-03.korotkov.co.uk/f/a/1/e/a1ecf9c761c5c6c6f6a3282649d3bae282.png)
,
![$DI(B,w)\wedge I(B,w)$ $DI(B,w)\wedge I(B,w)$](https://dxdy-04.korotkov.co.uk/f/7/3/d/73db514fe24046d54cc84dfb2420209a82.png)
,
![$DI(B,w)\wedge I(B,w)$ $DI(B,w)\wedge I(B,w)$](https://dxdy-04.korotkov.co.uk/f/7/3/d/73db514fe24046d54cc84dfb2420209a82.png)
,
![$DI(A\leftrightarrow B,w)$ $DI(A\leftrightarrow B,w)$](https://dxdy-04.korotkov.co.uk/f/7/1/9/719f2ecd2e165dbeb08f6373d4fa09cf82.png)
тоже по смыслу,
![$DI(\forall xA,w)$ $DI(\forall xA,w)$](https://dxdy-01.korotkov.co.uk/f/c/9/d/c9d5bcc0a8c004ea29498c6b0006e7dd82.png)
в соответствие с тем, как у
![$\wedge$ $\wedge$](https://dxdy-03.korotkov.co.uk/f/2/7/2/27290dc895d845aaaa0cf6cd9efb862f82.png)
,
![$DI(\exists xA,w)$ $DI(\exists xA,w)$](https://dxdy-03.korotkov.co.uk/f/6/5/e/65e90d59f1691405a1c091be6b7fcb6782.png)
в соответствие с тем, как у
![$\vee$ $\vee$](https://dxdy-04.korotkov.co.uk/f/f/d/9/fd925eff76f375c2bf103304b13a5b3582.png)
,
![$DI(\operatorname{defined}(e),w) = 1$ $DI(\operatorname{defined}(e),w) = 1$](https://dxdy-04.korotkov.co.uk/f/b/f/c/bfc68feff88c594649ba6ada2637387282.png)
;
• функции интерпретации формул
![$I\colon\mathcal F\times(\mathcal V\to A)\to\mathbb B$ $I\colon\mathcal F\times(\mathcal V\to A)\to\mathbb B$](https://dxdy-01.korotkov.co.uk/f/0/4/8/048e6eaa1da4686287ac74fc78c657c282.png)
такой, что:
![$I(p(t_1,\ldots,t_n),w) = I(p)(I(t_1,w),\ldots,I(t_n,w))$ $I(p(t_1,\ldots,t_n),w) = I(p)(I(t_1,w),\ldots,I(t_n,w))$](https://dxdy-04.korotkov.co.uk/f/3/0/9/30906174516b17fec760d9faf3a4815582.png)
, если правая часть равенства определена, или что угодно вместо неё,
![$I(A\wedge B,w),\ldots,I(\exists xA,w)$ $I(A\wedge B,w),\ldots,I(\exists xA,w)$](https://dxdy-01.korotkov.co.uk/f/8/2/7/827cdbfd80611d7dc7e09843723b0bec82.png)
как для формул первого порядка в классической логике,
![$I(\operatorname{defined}(e),w) = DI(e,w)$ $I(\operatorname{defined}(e),w) = DI(e,w)$](https://dxdy-02.korotkov.co.uk/f/1/4/c/14cae6e8ed04f7c775c84117488d816482.png)
.
Уф, всё. Будем теперь говорить, что формула/терм
![$e$ $e$](https://dxdy-01.korotkov.co.uk/f/8/c/d/8cd34385ed61aca950a6b06d09fb50ac82.png)
имеет значение
![$I(e,w)$ $I(e,w)$](https://dxdy-02.korotkov.co.uk/f/9/4/0/940b19672c2d72f4cdb19a4c0347d18382.png)
в данной интерпретации при значениях переменных
![$w$ $w$](https://dxdy-04.korotkov.co.uk/f/3/1/f/31fae8b8b78ebe01cbfbe2fe5383262482.png)
,
если ![$DI(e,w)=1$ $DI(e,w)=1$](https://dxdy-02.korotkov.co.uk/f/9/b/2/9b24eed9e0ee2aaada12d375950e659882.png)
, а в противном случае говорить, что
![$e$ $e$](https://dxdy-01.korotkov.co.uk/f/8/c/d/8cd34385ed61aca950a6b06d09fb50ac82.png)
бессмысленно. Будем называть формулу
![$e$ $e$](https://dxdy-01.korotkov.co.uk/f/8/c/d/8cd34385ed61aca950a6b06d09fb50ac82.png)
общезначимой, если она имеет значение
![$1$ $1$](https://dxdy-01.korotkov.co.uk/f/0/3/4/034d0a6be0424bffe9a6e7ac9236c0f582.png)
во всех интерпретациях, etc.. Сразу натыкаемся на особенность этой системы: если взять
любую формулу
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
,
![$A\vee\neg A$ $A\vee\neg A$](https://dxdy-02.korotkov.co.uk/f/9/0/b/90bd4cbb730e868b196488b90dbd905382.png)
получится не всегда общезначимой (а мы не пытались вылезать за пределы классической логики — см. определение
![$I$ $I$](https://dxdy-03.korotkov.co.uk/f/2/1/f/21fd4e8eecd6bdf1a4d3d6bd1fb8d73382.png)
для формул), т. к. любые входящие туда символы могут интерпретироваться нигде не определённой функцией. Что и чем можно заменять, нуждается в уточнении. Если рассмотреть язык с равенством, аналогичная ситуация будет с получением «тавтологий» вида
![$\sqrt{-2}=\sqrt{-2}$ $\sqrt{-2}=\sqrt{-2}$](https://dxdy-02.korotkov.co.uk/f/5/4/a/54ade5a19bd03947886196f8cb17416b82.png)
.
Выход, впрочем, тоже виден — раз мы ввели в язык определённость, надо её учитывать; нельзя просто заменить в формуле
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
свободные вхождения какой-то переменной
![$v$ $v$](https://dxdy-03.korotkov.co.uk/f/6/c/4/6c4adbc36120d62b98deef2a20d5d30382.png)
на терм
![$t$ $t$](https://dxdy-01.korotkov.co.uk/f/4/f/4/4f4f4e395762a3af4575de74c019ebb582.png)
, нужно взять в качестве результата «замены» сразу
![$\operatorname{defined}(t)\to A[t/v]$ $\operatorname{defined}(t)\to A[t/v]$](https://dxdy-01.korotkov.co.uk/f/8/e/a/8eabd39cecc95e737d128b40b750b15282.png)
; аналогично с заменой пропозициональных переменных в схемах аксиом или ещё где.
Перевод из таких языков в обычные языки первого порядка с тем же набором символов + по символу для всех
![$\operatorname{defined}(f(\ldots))$ $\operatorname{defined}(f(\ldots))$](https://dxdy-04.korotkov.co.uk/f/f/0/0/f00f740365c1f828f71509f3e7902b9982.png)
, прозрачен. В обратную сторону тоже. Вопрос о расширениях теории определением нового символа тоже, кажется, прозрачен (в определяющую
![$f$ $f$](https://dxdy-02.korotkov.co.uk/f/1/9/0/190083ef7a1625fbc75f243cffb9c96d82.png)
аксиому будет входить ещё и предложение
![$\forall\vec v(\operatorname{defined}(f(\ldots))\leftrightarrow\ldots)$ $\forall\vec v(\operatorname{defined}(f(\ldots))\leftrightarrow\ldots)$](https://dxdy-02.korotkov.co.uk/f/1/a/6/1a645aac3f8111e2678ca8993f290e0582.png)
) и т. п.).
Штука кажется всё же неудобной (но, по идее, подобные вещи мы будем делать и в обычной обстановке, где в свободной записи попадаются даже штуки вида
![$\exists f'(a)$ $\exists f'(a)$](https://dxdy-01.korotkov.co.uk/f/4/2/f/42f28ff8a966f0a6f37e19358934c1e082.png)
или
![$\exists\lim\ldots$ $\exists\lim\ldots$](https://dxdy-02.korotkov.co.uk/f/d/5/5/d557bd8db035474b154e863674499baa82.png)
— по смыслу это
![$\mathrm{defined}$ $\mathrm{defined}$](https://dxdy-01.korotkov.co.uk/f/0/0/6/0066b7d31ed01d79566e010aac90da9d82.png)
). Может быть, кто-то знает лучшие описания подобного? И не забыл ли я чего-то в этом описании (кроме лени дописать про
![$DI$ $DI$](https://dxdy-01.korotkov.co.uk/f/4/1/6/4160f01f24b777ea3f5814d5733ea93c82.png)
и
![$I$ $I$](https://dxdy-03.korotkov.co.uk/f/2/1/f/21fd4e8eecd6bdf1a4d3d6bd1fb8d73382.png)
)?
(Никого не склоняю этим пользоваться, и сам тоже, повторюсь, не в восторге.)
-- Пн июл 18, 2016 04:20:27 --P. S. Можно было бы слить
![$DI$ $DI$](https://dxdy-01.korotkov.co.uk/f/4/1/6/4160f01f24b777ea3f5814d5733ea93c82.png)
и
![$I$ $I$](https://dxdy-03.korotkov.co.uk/f/2/1/f/21fd4e8eecd6bdf1a4d3d6bd1fb8d73382.png)
вместе, используя специальное значение для неопределённости. Тогда это станет напоминать трёхзначную логику (ту, в которой
![$a\to b=\neg a\vee b$ $a\to b=\neg a\vee b$](https://dxdy-01.korotkov.co.uk/f/0/6/8/0685201c9c1ea2d8af3f134fc1e2186d82.png)
) (и у которой довольно неудобные свойства), но только напоминать из-за того, что есть
![$\mathrm{defined}$ $\mathrm{defined}$](https://dxdy-01.korotkov.co.uk/f/0/0/6/0066b7d31ed01d79566e010aac90da9d82.png)
. Кажется.
P. P. S. Предлагаю вместо
![$\operatorname{defined(e)}$ $\operatorname{defined(e)}$](https://dxdy-04.korotkov.co.uk/f/b/b/f/bbf7dc73d4a601bdb5b31e61d07e2d6982.png)
набирать менее длинное
![$\Delta(e)$ $\Delta(e)$](https://dxdy-04.korotkov.co.uk/f/7/f/3/7f328d03021011901c3d09afca9fb66982.png)
. Если кому-то это вообще придётся набирать.