Czytaj książkę: «Искусственный интеллект. Строки, контекст и волны на Паскале»

Czcionka:

«Обучение путем подачи хорошего примера часто – самый эффективный, а иногда – и единственно возможный метод.»

Никлаус Вирт, создатель языка Паскаль.

«Меня не интересует создание мощного компьютерного интеллекта. Мне вполне хватило бы самого посредственного – примерно как у президента Американской телефонной и телеграфной компании.»

Приписывается Алану Тьюрингу


© Сергей Соболенко, 2019

ISBN 978-5-4496-3281-4

Создано в интеллектуальной издательской системе Ridero

Предисловие, которое рекомендуется прочитать

Учебные заведения России и мира продолжают обучать программированию на Паскале. И это происходит не из-за лени преподавателей к переизданию методических пособий по информатике. Такое обучение позволяет понять гибкую внутреннюю логику организации программ, ведь Паскаль обладает свойствами универсальности и широкими возможностями, при своей компактности и легкости понимания. С помощью этого языка программирования можно адаптировать, подготовить восприятие школьника или студента для самоорганизации и в других языковых средах.

Поэтому в этой книге автор изложил полезные и практичные аспекты накопленного многолетнего опыта, приемы и методы работы с неформализованными строковыми данными на Паскале; а также сведения о новой технологии, являющейся плодом этих практических изысканий. Модель описанной технологии искусственного интеллекта, в качестве исследовательского проекта также реализуется на этом языке. При этом, значительная часть приведенных алгоритмов и программных процедур публикуется впервые, что придает изданию особую ценность.

Почему эта книга актуальна?

Вся беда в том, что профессиональным приемам подробной, прикладной работы с данными строкового типа занимается очень ограниченное число специалистов. Отсюда вытекает явный недостаток практических пособий по данной тематике,1 и как следствие – неявный прикладной функционал в современных языковых компиляторах.2 Также этому есть и другое вполне логичное объяснение. Тема парсинга строковых данных много десятилетий являлась своего рода табу, дурным тоном программирования. Традиционно устоялся стереотип, что строковые переменные – это «рабы интерфейса» и баз данных, а неформализованные сведения – зло, с которым нужно бороться. Результат – налицо: отсутствие приличной школы: как учителей, разработчиков, так и их учеников. Отсутствие предложения за много десятилетий сформировало зеркальное отсутствие спроса. А затем появились и искусственные нейронные сети, которые худо-бедно начали с этими данными работать; но вот разработчикам от этого не стало легче. По существу, искусственные нейросети «подарили» программистам «черный ящик», действия которого бывают необъяснимы.3

Этот пробел явно требует компенсации; тем более, очевидно невостребованной в современной парадигме когнитивных систем оказалась ниша символьного искусственного интеллекта.4

В книге приводятся необычные, но достаточно простые решения по проекту интеллектуальной символьной диалоговой системы. Тем не менее, описанные подходы к ее реализации категорически отличаются от классического представления об объектно-ориентированном программировании, традиционных символьных экспертных систем и от современной методологии машинного обучения. Также весьма существенным моментом в этой работе является отказ от прямого использования символьных конструкций на естественном языке. Тем не менее, практические результаты показывают, что этот комплекс методик может решать задачи, по сей день считавшиеся серьезной проблемой.

Чем мы занимаемся?

«Мы» в данном случае – это небольшое сообщество единомышленников, не входящих в какое-либо формальное объединение, но захваченных идеей реализации искусственного интеллекта на базе технологии MSM.

Сверхзадачей исследований в данном направлении не являлось и не является создание сильного искусственного интеллекта5 в понимании современных физиков и инженеров; (такого, который будет многократно превосходить умственные способности людей). Для начала, следовало бы создать «средний» интеллект. Такой, каким обладает например, ваш сосед, Михаил Ефремович, учитель географии средних лет. Особо ничем не выдающийся, иногда не очень внимательный или рассеянный, иногда циничный, иногда смешной, но… понимающий. Способный сравнивать, оценивать, делать выводы, формулировать суждения. Решать повседневные задачи. Планировать, следовать определенным целям. И главное, способный действовать так, как этого требуют обстоятельства. Вы скажете, такие машины уже есть? Хорошо, если вы так считаете, не будем спорить. Но, автор считает, что нет.

Это учебник?

Книгу можно использовать как учебное пособие по разделу строковых данных на Паскале. Но было бы неверно воспринимать показанные решения, как нечто неоспоримое, – любая приведенная процедура может быть усовершенствована. Сама природа строк приближает нас к другой форме подхода к методикам реализации. Здесь, в этой новой реальности открывается то, что называется нечеткостью, субъективной оценкой и многогранностью связей элементов конструктора, который мы можем выстраивать.

Книга затронет и некоторые философские, психологические, лингвистические аспекты сущности человеческого восприятия. Но она не станет тешить человеческое самолюбие или рисовать утопические миры. На этом поле и без того работают слишком много мастеров слова, чтобы стать только очередным из них. Автору это неинтересно.

Гораздо интереснее работа, имеющая под собой практическое основание, а не метафорические рассуждения. «Практика есть критерий истины» – известное выражение, приписываемое Карлу Марксу, но авторство в данном случае не имеет значения.

Эта книга пробует осветить шаг за шагом движение в новом, малоизученном направлении работы с новой технологией. Страница за страницей практического освоения вы имеете шанс испытать чувства первооткрывателя, какие вероятно испытывал Левенгук, настраивающий первый оптический микроскоп. И пусть спустя сотни лет был построен и микроскоп электронный, но микроскоп конструкции Левенгука был самым важным, первым шагом в нужном направлении.

С другой стороны, кто-то мог бы и сказать «Да обернитесь вокруг: в нашем мире data science,6 блокчейна7 и искусственных нейросетей нет места для того, чтобы заниматься какими-то символами…» Но вещь, кажущаяся сегодня слишком простой или неочевидной может стать завтра тем самым электронным микроскопом. История знает массу таких примеров.

Например, концепция первого перцептрона,8 на основании которой родилось все изобилие современных искусственных нейросетей и машинного обучения более чем на 30 лет была подвергнута остракизму во время так называемой «Зимы искусственного интеллекта». И что бы сказали бывшие критики перцептрона теперь, когда каждая домохозяйка, школьник или пенсионер, имея некоторый интерес и немного свободного времени может настроить искусственную нейросеть и сортировать огурцы по 12 критериям в собственном гараже.9

Можно освоить вещи и поинтереснее огурцов, например машинный перевод, зрение сквозь стены или толщи океанских вод… Но автор в данном случае равнодушен по отношению к искусственным нейросетям, к биг-дате или к попыткам создавать коннектоны. Безусловно, это в своем роде интересные, нужные и незаменимые вещи, представляющие немаловажный научный и коммерческий интерес. Плохая новость состоит в том, что все это имеет мало общего с настоящим интеллектом, который основан на процессе понимания смысла. Да, искусственные нейросети хорошо работают. Выписывают штрафы. Рисуют картины. Консультируют по ряду известных проблем. Играют в шахматы, Го или водят машины. Они это все умеют или будут уметь; и ваша сетка будет уметь гораздо лучше сортировать огурцы, чем человек, – с помощью нескольких строк кода, небольшой настройки переменных и нескольких тысяч примеров выборки. Это – сложная, но популярная и вполне осуществимая задача в рамках существующей парадигмы машинного обучения. Кроме того – уже изданы сотни прикладных учебных пособий по этой теме, существуют простые видеоинструкции по работе с кодом на Питоне и в свободном доступе находятся нужные приложения и наборы данных.

То, о чем говорит эта книга – трудно. Требует умственного труда, фиксации внимания, сосредоточенности. Эта книга – для тех, кто привык использовать критическое мышление, ставить все под сомнение, моделировать собственную реальность, а не идти вперед за общественным мнением.

Кого-то эта книга может развлечь, кого-то заставит задуматься или по-новому взглянуть на информационные технологии. Возможно – кто-то сделает интересный учебный проект, доклад, презентацию или реферат, за который может получить хорошую оценку. А кто-то, (и на это хочется надеяться), использует описанные методы, чтобы участвовать в приближении лучшего будущего с машинами, имеющими сознание. При этом, не будет иметь значения язык реализации, – все описанные методики могут быть переведены на любой язык программирования для достижения лучших показателей в скорости, адаптивности или коммерческой ценности.

Что здесь интересного?

Во-первых, эта книга является практическим руководством по работе со строковыми данными и может выполнять роль «решебника» для разного типа задач; во-вторых, она рассказывает о новой технологии, (в которую автор оказался замешан практически поневоле); и в-третьих – она затрагивает различные аспекты и неординарные подходы к проблеме сильного искусственного интеллекта.

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

Вначале мы поговорим о представлении строковых данных на Паскале и о том, какие необычные процедуры и функции можно использовать, чтобы решать неординарные задачи, из разряда олимпиадных задач по информатике. Вероятно, эта часть особенно понравится школьникам и студентам, ведь здесь будет описано множество подпрограмм, имеющих прикладное применение.

Также мы вспомним о том, что такое альтернативная классификация данных в многомерном строчном множестве и каковы могут быть приемы работы с ними.

Далее, мы сосредоточимся на том, чтобы немного разобраться в действующих диалоговых интеллектуальных системах, постараемся понять их сильные и слабые места, разберем их «по винтикам» и порассуждаем, «как это работает?»

Во второй половине книги будут приведены новые методы работы с полисемией и контекстом, в чем нам поможет волна предложений, адаптированный толковый словарь и еще немного мозгового усердия.

И наконец, в завершении мы постараемся сконструировать систему, (пока только в теории, но со значительной степенью детализации) претендующую на звание «сильной логической машины». В частности, здесь мы поговорим о гештальт-цикличности, теориях физики мышления и связи логики, языка и интеллекта.

Кстати, в книге вы не увидите отсылки в приложения (чего так не любят многие читатели): все процедуры и функции описываются в разделе соответствующей тематики прямо по ходу повествования с приведением иллюстраций, показывающих, что происходит на экране компьютера.

О чем речь?

Это повествование является не столько логическим продолжением первой книги автора, сколько изложением «обратной стороны» практического программирования, комплекса приемов, демонстрирующих структуру программы обработки строковых данных «с нуля».

Книга «Искусственный интеллект: начала MSM», вышла в начале 2018 года.10 Она рассказывает об основах перспективной технологии в построении искусственного интеллекта – многомерном строчном (строковом) множестве (или «Multidimensional Strings Multiplicity», англ.). Простая программная среда, построенная на основе специфического классификатора всего за год с небольшим своего существования показала замечательные результаты, в связи с чем автор посчитал важным продолжить публикацию данных, а также методов и технологий, реализуемых в этом проекте.

В новой книге автор расскажет и о технологических приемах, использующихся в программной модели для решения наиболее сложных проблем «понимания» естественного языка. В первую очередь это касается вопросов полисемии и контекста, которые чаще всего, (а может быть и по привычке), считаются в ЭВМ непреодолимыми.

Что потребуется?

Все приведенные в качестве примера процедуры и функции реализованы на языке Pascal, а точнее, в бесплатном компиляторе TMT Pascal lite.11 Выбор автора оказался на стороне этого компилятора отнюдь не случаен. Это один из немногих компиляторов Паскаля, позволяющих использовать во внутренних процедурах и функциях входные и выходные массивы переменных строчного, логического и целочисленного типа.12 Кроме того, TMT Pascal известен, доступен и понятен настолько, что строить простые программные модели, обрабатывающие строковые массивы данных не доставит большого труда.

Споры об MSM

Технология MSM – вещь своенравная. Первые публикации о ней в сети в начале 2018 года были восприняты с подозрением, а иногда и с недоумением. Под сомнение ставилась как сама технология, так и квалификация автора, мол «Куда ты, блогер, сунулся в калашный ряд?»13 Но были среди критических замечаний и вполне корректные, достойные рассмотрения.

Особенно часто оппонентам автора вспоминался Курт Фридрих Гедель,14 австрийский математик и философ с его теорией о неполноте, а также интерпретация этой теории физиком и математиком Роджером Пенроузом15 в контексте принципиального различия между человеческим мозгом и компьютером. Мы не будем сильно беспокоить Геделя, поскольку систему MSM, едва ли можно назвать математически формальной.

Основой MSM является иерархическая онтология, которая строится в соответствии с интуитивной, смысловой, неформализованной «нагрузкой» понятий, их синонимов, весов, отношений и правил. Иерархия имеет комплементарный код каждого элемента, не имеющий фиксированной числовой разрядности, который построен по принципу бесконечности и многомерности. В словарях, организованных по принципу MSM программная модель оперирует не конкретными словами, а их смысловым кодом, и действует на основе подбора правил, выбранных в соответствие с конкретными ситуациями. Также в логике MSM реализован механизм, который позволяет уйти от математической, компьютерной точности в сторону нечеткости, адаптивности к конкретным условиям. Этот механизм помогает определять близкие понятия, находить родство и различия слов-множеств на основании онтологических связей, фактически вшитых в код понятий, в противовес четкому математическому сходству формального написания слов на естественном языке.

В книге «Искусственный интеллект: начала MSM» приводился простой пример, когда эталонное знание «Кошачьи имеют красивую шерсть» автоматически порождает новые знания о том, что «У киски есть красивая шерстка» или «У льва есть прекрасная грива», и еще сотен подобных. Этот процесс совсем не похож на математичный. Первоначально введенные данные, формально, математически, совершенно отличаются от проверочных, и тем не менее программа находит их идентичными, поскольку связи объектов, вшитые в коде, и правила обработки позволяют это сделать.

Конечно же, подобный результат можно было бы получить и посредством обычного объектно-ориентированного программирования (ООП),16 однако относительно энергозатрат в данном случае MSM оказывается в безусловном выигрыше за счет комплементарности кода понятий и общей простоты организации системы. На следующем примере также видно принципиальное отличие в построении классификатора традиционной семантической сети (рис. 1) и MSM (рис. 2).

В отличие от традиционного решения семантической сети и вариантов объектного программирования, в которых сеть связей элементов описывается с помощью дополнительных описательных блоков, не обладающих комплементарными зависимостями, элементы в MSM входят в единую структуру, где каждый из них обладает «памятью предков», а кроме того «отягощен» свойствами и «отношениями». Эта структура обладает безграничной глубиной связей, «зашитой» в самом коде элементов. На рисунке – показан лишь микроскопический фрагмент, примерно 1/10 000 доли реального объема структуры, которая кодируется с помощью этих простых правил.

Рис. 1. Элементы семантической сети представлены в виде ориентированного графа, вершины которого обозначают объекты предметной области, а ребра между ними формируют отношения между ними.


Кроме того, во взаимоотношениях элементов MSM играют немаловажную роль дополнительные словари зависимостей, весов и свойств, позволяющие с помощью минимальных средств строить сложные логические конструкции, обобщающиеся на целые классы значений.

Приведенный фрагмент классификатора занимает минимальный объем памяти, составляющий менее (!) 1 килобайта. За счет подобной реализации в перспективе можно достигнуть возможностей мощной логической машины, имеющей ничтожный объем в десятки или сотни мегабайт. Так приложение на основе MSM сможет работать даже в обычной бытовой технике вроде холодильника или микроволновки.


Рис. 2. Фрагмент визуализации дерева элементов MSM в 3D.


(Правда, насколько для потребителя может быть актуальна «понимающая» смысл языка микроволновая печь – это большой вопрос, но почему бы и нет?)

Но возвращаясь к теории Геделя, а точнее, к ее интерпретации, сам Роджер Пенроуз отчасти соглашается с вероятным сценарием построения сильного искусственного интеллекта: «Наше непонимание человеческого сознания говорит о наличие большого пробела в научных знаниях и этот пробел, возможно, находится там, где теории нужно выйти за пределы вычислительной системы».17

Вот еще цитата из его книги «Тени разума»:18

«В современной научной картине мира отсутствует один очень важный ингредиент. Этот недостающий ингредиент совершенно необходим, если мы намерены хоть сколько-нибудь успешно уместить центральные проблемы мыслительных процессов человека в рамки логически последовательного научного мировоззрения. Я утверждаю, что сам по себе этот ингредиент не находится за пределами, доступными науке, хотя в данном случае нам, несомненно, придется в некоторой степени расширить наш научный кругозор…»

Не является ли MSM тем самым недостающим звеном, пробелом в науке, выходящим за рамки математических вычислений? Ведь зависимости, образующиеся в этой технологии в большей степени функциональны только по причине организованных «вручную» связей, основанных на смысловой «нагрузке» языка, а также их отношений? Нематематические «вычисления» следуют контексту естественного языка, который выступает носителем смыслов, весов, свойств и отношений между элементами; и система MSM в достаточной степени удовлетворяет полноте отражения этих отношений.

Возвращаясь к рассуждениям в книге «Тени разума», можно сделать вывод, что Пенроуз в своем видении вычислительной модели опирается на математизм подхода к рассмотрению идеи воплощения искусственного интеллекта. Суть же метода MSM состоит в парсинге сходства и различия объектов и использовании правил обработки не только относительно конкретных элементов, но и в отношении классов объектов и фраз, предложений, составленных из классов моделей. Похожие процессы происходят и в искусственных нейросетях, которые также основаны на приципе поиска сходства и различий, однако диалоговые нейросети используют для своих операций слова, фразы и предложения естественного языка, тогда как MSM оперирует их смысловым кодом, заимствованным из понимания естественного языка.

Но другой вопрос состоит в том, является ли сам человек эталоном смысла и интеллекта? И возможно ли, анализируя смысловую нагрузку языка, достигнуть более высоких интеллектуальных результатов, чем у среднестатистического человека, как это видится многим нашим современникам?

Еще одна цитата Пенроуза в этом месте кажется весьма уместной: «Мы уверены, что являем собой апофеоз интеллекта в царстве животных, однако этот интеллект, по всей видимости, оказывается самым жалким образом не способен справиться с множеством проблем, которые продолжает ставить перед нами наше собственное общество».19

Таким образом Пенроуз понимает, что человеческий интеллект несовершенен. И как вы помните, наша задача в конструировании MSM видится скорее в воссоздании модели человеческой логики в программной модели, нежели в создании сверхинтеллекта. Объективное человеческое несовершенство является частью человеческой сущности; в связи с чем рано или поздно нам не избежать его воплощения, частичного или полного в электронно-вычислительной машине.

Почему этот вывод становится нам очевидным? Напомню, что посыл реализации диалоговой модели на основе MSM состоит в том, что человеческое мышление и символьный язык по существу неотъемлемы, как утверждает, в частности, Ноам Хомски.20 И хотя этот тезис неоднозначен, но он хорошо аргументирован, ведь мышление без языка – это набор рефлективных зависимостей, бихевиористический подход, способный решать лишь узкий набор задач, отвечающих за реакцию на положительное подкрепление. Находить выход в лабиринте, избежать столкновения, выиграть в шахматы или Го, – это все замечательные примеры реализации статистических, а иначе говоря, математических методов в построении искусственного интеллекта. И даже те современные системы, которые направлены на работу с естественным языком (например, переводчики или боты-консультанты) по существу не оперируют смыслом языка, а производят лишь внешнюю, автоматную, формальную обработку статистических зависимостей того или иного написания слов. Однако они не «понимают» принципиальной разницы между кукурузой и кузнечиком, не могут сказать, кто быстрее или умнее, не различают позитивных и отрицательных факторов; а ведь эти вопросы по существу является сутью мышления.

1.В данном случае рассматривались десятки русскоязычных учебных пособий, самоучителей, методических рекомендаций и задачников по Паскалю, C++, Java и PHP, изданных за последние 20—25 лет.
2.Хотя современные наборы процедур и функций для работы со строками, например в PHP, Object Pascal и C++ довольно похвальны, (а в Python, – интуитивно удобны и компактны), но на практике очень редки сколько-нибудь интересные алгоритмы, использующие их где-то, кроме баз данных и текстовых процессоров. Мастодонты странного программирования, как Lisp и Prolog автором не рассматривались принципиально, – они напугали его еще в ранней юности.
3.Разработчик системы на основе ИНС далеко не всегда может отвечать за определенные решения программы и ему также сложно утверждать, не является ли определенный ответ эффектом «переобучения», иначе говоря, случайным, «мусорным» ответом.
4.Символический (символьный) искусственный интеллект – это собирательное название для всех методов исследования искусственного интеллекта, основанных на высокоуровневом «символическом» (человекочитаемом) представлении задач, логики и поиска. Символический ИИ лёг в основу доминирующей парадигмы исследований ИИ с середины 1950-х до конца 1980-х. Наиболее успешная форма символического ИИ – это экспертные системы, использующие сеть продукционных правил. Продукционные правила объединяют символы в отношения, похожие на оператор «если-то». Экспертная система, обрабатывая эти правила, делает логические выводы и определяет, какая дополнительная информация ей необходима, то есть какие следует задать вопросы, используя человекочитаемые символы. Определение Wiki.
5.Сильный искусственный интеллект – гипотеза в философии искусственного интеллекта, согласно которой некоторые формы искусственного интеллекта могут действительно обосновывать и решать проблемы. Теория сильного искусственного интеллекта предполагает, что компьютеры могут приобрести способность мыслить и осознавать себя как отдельную личность (в частности, понимать собственные мысли), хотя и не обязательно, что их мыслительный процесс будет подобен человеческому. Определение Wiki.
6.«Наука о данных» (англ.) – раздел информатики, изучающий методы статистической обработки больших объемов данных в приложениях искусственного интеллекта и проблемы представления данных в цифровом формате для машинного обучения.
7.Blockchain (англ.) – технология распределенных баз данных для хранения информации на различных компьютерах в сети; преимущественно используется для хранения и передачи информации о финансовых транзакциях. Используется с 2008 года для работы с криптовалютами.
8.Перцептрон, или персептрон (англ. perceptron от лат. perceptio – восприятие; нем. Perzeptron) – кибернетическая модель мозга, предложенная Фрэнком Розенблаттом в 1957 году и впервые реализованная в виде электронной машины «Марк-1» в 1960 году. Перцептрон стал одной из первых моделей нейросетей, а «Марк-1» – первым в мире нейрокомпьютером.
9.Пример с огурцами – не выдумка. Японец Макото Коике в 2016 году создал систему, которая с помощью технологии машинного обучения TensorFlow от Google сортирует огурцы на ферме своих пожилых родителей. Для этого Макото использовал одноплатный компьютер Raspberry Pi 3, оснащенный камерой. Непосредственной сортировкой в его системе был занят микроконтроллер Arduino, получающий команды после обработки в сенсорной сети TensorFlow и отправляющий огурцы в разные ведра.
10.Соболенко С. В. «Искусственный интеллект: начала MSM: Сингулярность неизбежна: Издательские решения, 2018. – 272 с.
11.MS-DOS Edition Version 3.90 (Copyright © 1995, 2002 by TMT Development Corporation).
12.Для сравнения, популярный в России ABC Pascal – не позволяет производить данные операции; а поздние версии Delphi и Object Pascal используют более сложный операционный инструментарий, чтобы сосредоточиться на нем на страницах небольшой по объему книги.
13.Однако, что более интересно, – реакция зарубежного форума OpenAI, где демонстрация проекта произвела сильное впечатление, вызвала интерес и получила явное одобрение. Прим. автора.
14.Курт Фридрих Гедель (нем. Kurt Friedrich Gödel; 1906—1978) – австрийский логик, математик и философ математики. Наиболее известен сформулированными и доказанными им теоремами о неполноте, которые оказали огромное влияние на представление об основаниях математики. Считается одним из наиболее выдающихся мыслителей XX века.
15.Сэр Роджер Пенроуз (англ. Roger Penrose, род. 8.08.1931 года, г. Колчестер, Англия) – английский физик и математик, работающий в различных областях математики, общей теории относительности и квантовой теории.
16.Объектно-ориентированное программирование (ООП) – методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. Определение Wiki.
17.«Роджер Пенроуз: Квантовая природа сознания», видео канала «2045 Initiative», 2013 г., на 3 мин. 19 сек.
18.Роджер Пенроуз «Тени разума – в поисках науки о сознании», М. 2005. с. 27—28.
19.См. там же.
20.Аврам Ноам (Наум) Хомски (также часто транскрибируется как Хомский или Чомски, англ. Avram Noam Chomsky; род. 7 декабря 1928, Филадельфия, штат Пенсильвания, США) – американский лингвист, политический публицист, философ и теоретик. Профессор лингвистики Массачусетского технологического института. Также он известен своей открытой позицией относительно связи мышления, языка и интеллекта.

Darmowy fragment się skończył.

Ograniczenie wiekowe:
12+
Data wydania na Litres:
21 lutego 2019
Objętość:
308 str. 214 ilustracje
ISBN:
9785449632814
Format pobierania:
Tekst PDF
Średnia ocena 0 na podstawie 0 ocen