РАН
Государственный геологический музей им. Вернадского
Алгоритм классификации магматических горных пород
и
формальное определение вида горной породы
Отчёт
отдел ГИС, руководитель: В.М. Ряховский
петрология: Д.И. Кудрявцев
алгоритмика: А.В. Шкотин
Август 2010
© 2010 Государственный геологический музей им. Вернадского
версия 28.08.2010
Первоисточником алгоритма является [1]. Алгоритм задан как совокупность функций для каждой из которых дана блок-схема.
В отчёте суммированы идеи и задачи разработки и описаны принятые решения и оставшиеся вопросы к Автору классификации.
Алгоритм и необходимые определения даны для ультрамафических видов плутонических горных пород. Детальное обсуждение и решение оставшихся проблем должно подтвердить правомерность подхода формализации. После чего он может быть распространён на другие разделы первоисточника.
Три основных цели проекта:
- определение алгоритма классифицирующего образец по его характеристикам;
- уточнение правил классификации;
- выявление формальных определений видов горных пород.
Замечание: в отчёте будут использоваться исходные английские термины для обозначения минералов, видов пород и других формализуемых терминов.
Принятые обозначения и термины:
VPC означает Volume Percentage Content - объёмное процентное содержание обычно минерала в образце, известное также как модальное содержание.
sb1 (сокращение для solid body 1) - обозначает запись со сведениями об образце, к которой применяется алгоритм. Мы не уточняем какие сведения находятся в записи и будем извлекать из неё нужную информацию применяя к ней различные функции.
Функцию алгоритма (например, ultramafic_rock_type), которая получает на вход запись с характеристиками образца породы, а возвращает наименование вида породы этого образца, назовём классифицирующей (образец).
:= означает на блок-схеме оператор (действие) присваивания переменной значения.
Отношения между числами будут обозначаться так:
> - "больше",
≥ - "больше или равно" (на блок-схемах - «>=»),
< - "меньше",
≤ - "меньше или равно" (на блок-схемах - «<=»).
Функцию, которая возвращает истинностное значение (true, false) будем называть предикат.
Формула вида 0 ≤ VPC_hornblende(sb1) ≤100 есть сокращение для 0 ≤ VPC_hornblende(sb1) and VPC_hornblende(sb1) ≤100
Нам понадобятся функции объёмного процентного содержания минералов в образце. Полный состав минералов необходимых алгоритму выяснится постепенно. Пока понадобились следующие функции одного аргумента, возвращающие действительное число:
VPC_melilite,
VPC_kalsilite,
VPC_leucite,
VPC_Ol,
VPC_Opx,
VPC_Cpx,
VPC_hornblende,
VPC_garnet,
VPC_spinel,
VPC_biotite.
Таким образом применение такой функции к записи об образце даст процентное содержание соответствующего минерала. Скорее всего эти функции являются полями в записи сведений об образце (sb1).
Существует естественное ограничение на VPC-величины: они должны быть в диапазоне от 0 до 100.
Например, для VPC_biotite будем иметь
0 ≤ VPC_biotite(sb1) ≤ 100
Считается что эти требования выполнены всегда. Совокупность таких требований назовём VPC-range.
Нам понадобятся следующие предикаты для характеристики образца:
pyroclastic
kimberlite
lamproite
lamprophyre
charnockite
plutonic
volcanic.
Скорее всего эти предикаты имеют определения.
Используя одни функции можно определять другие. Некоторым функциям, которые нам понадобятся определения ещё не даны. Тогда вместо формулы стоит «???».
Этот показатель нужен для классификации некоторых плутонических пород.
Definition
VPC_Px(sb1) = VPC_Opx(sb1)+VPC_Cpx(sb1)
Замечание: список http://en.wikipedia.org/wiki/Pyroxene#Pyroxene_minerals подтверждает формулу.
Definition
VPC_OOC(sb1) = VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)
Definition
VPC_OPH(sb1) = VPC_Ol(sb1)+VPC_Px(sb1)+VPC_hornblende(sb1)
Функция VPC_M возвращает объёмное процентное содержание минералов группы M в образце (о группе см. [1] стр. 4, 28).
Решение 28-0. Все минералы упомянутые в первом предложении на [1] стр.28 считать принадлежащими группе M.
Вопрос к петрологу: скорее всего это не так для garnet и spinel.
Definition
VPC_M(sb1) = VPC_Ol(sb1) + VPC_Opx(sb1) + VPC_Cpx(sb1) + VPC_hornblende(sb1)
+ VPC_biotite(sb1) + VPC_garnet(sb1) + VPC_spinel(sb1)
Задача 4-1: обработать описание на стр.4 - "M = mafic and related minerals, e.g. mica, amphibole, pyroxene, olivine, opaque minerals, accessory minerals (e.g. zircon, apatite, titanite), epidote, allanite, garnet, melilite, monticellite, primary carbonate."
Вопрос к Автору: нужен полный список минералов группы M.
см. также http://en.wikipedia.org/wiki/Mafic
Определение этой функции из [1] ещё не рассматривалось.
Стоит иметь в виду определение из http://en.wikipedia.org/wiki/Carbonate_minerals:
"Carbonate minerals are those minerals containing the carbonate ion: CO32-.".
Definition
VPC_carbonates(sb1) = ???
На стр.21 [1] (см. также [3]) описаны тонкости отнесения к plutonic и volcanic, а также именования в "пограничном" случае.
Это пока не внесено в алгоритм и может потребовать такой "субъективной" характеристики образца как "глубина формирования".
Definition
plutonic(sb1) = ???
Предикат plutonic ещё не определён.
Далее части алгоритма приписываются конкретным секциям первоисточника, продолжением текста которых они фактически являются. Таким образом алгоритм является дальнейшей формализацией (и уточнением!) правил классификации первоисточника.
В результате получается описание "сверху-вниз" - от вызывающих к вызываемым функциям.
Блок-схемы. Алгоритм задан совокупностью блок-схем. Блок-схема есть специальный вид правой части определения функции.
В узлах блок-схемы либо действие либо условие (формула возвращающая значение true или false). Узлы-условия легко отличить т.к. из них выходит две стрелки помеченные true и false.
У блок-схемы могут существовать собственные (внутренние) переменные, задаваемые «квантором» Var.
Нам понадобится операция “+” - конкатенация, соединение двух строк. Формулу возвращающую строку будем называть терм.
Нам понадобятся следующие действия:
return <терм>. Значение терма становится значением функции;
abort <строка>. Выполнение алгоритма завершается аварийно и выдаётся сообщение;
<переменная>:=<терм>. Внутренней переменной блок схемы присваивается значение терма.
Алгоритм верхнего уровня задан классифицирующей функцией rock_type.
Именно эту функцию надо вызывать чтобы классифицировать образец.
Далее приводятся предложения первоисточника и их формализация, которая по большей части очевидна, но два случая требуют пояснения и описаны в конце в обсуждении.
За формализацией следует блок схема.
Исходный текст для алгоритма находится на стр.6 первоисточника (см. также [3]). Формализация: для каждой порции исходного текста даётся формальное условие перехода к соответствующей секции.
"(1) if the rock is considered to be of pyroclastic
origin go to section 2.2 “Pyroclastic Rocks
and Tephra” on p.7"
pyroclastic(sb1)
"(2) if the rock contains > 50% of modal car-
bonate rocks go to section 2.3 “Carbonatites” on
p.10"
VPC_carbonates(sb1)>50
"(3) if the rock contains > 10% of modal melilite
go to section 2.4 “Melilite-bearing Rocks”
on p.11"
VPC_melilite(sb1)>10
"(4) if the rock contains modal kalsilite go to
section 2.5 “Kalsilite-bearing Rocks” on
p.12"
VPC_kalsilite(sb1)>0
"(5) check to see if the rock is a kimberlite as
described in section 2.6 on p.13"
kimberlite(sb1)
"(6) check to see if the rock is a lamproite as
described in section 2.7 on p.16"
lamproite(sb1)
"(7) if the rock contains modal leucite go to
section 2.8 “Leucite-bearing Rocks” on p.18"
if VPC_leucite(sb1)>0
"(8) check to see if the rock is a lamprophyre as
described in section 2.9 on p.19. Note ..."
lamprophyre(sb1)
"(9) check to see if the rock is a charnockite as
described in section 2.10 on p.20"
charnockite(sb1)
"(10)if the rock is plutonic, as defined in section
2.1, go to section 2.11 “Plutonic rocks” on
p.21"
plutonic(sb1)
"(11)if the rock is volcanic, as defined in section
2.1, go to section 2.12 “Volcanic rocks” on
p.30"
volcanic(sb1)
"(12)If you get to this point, either the rock is not
igneous or you have made a mistake."
abort("either the rock is not igneous or you have made a mistake")
Замечание: вполне возможно, что когда будут даны определения для предикатов условий приведённых выше окажется, что их объединение будет всегда верно. И наоборот - если это не так, то всегда найдётся (теоретически) сочетание характеристик образца магматической породы, которое приведёт к abort.
"
(1) if M is less than 90% the rock is classified
according to its felsic minerals, using the
now familiar QAPF diagram (Fig. 2.4),
or the QAPF double triangle (section 2.11.1)
VPC_M(sb1) < 90
(2) if M is greater or equal to 90%, it is an
ultramafic rock and is classified according
to its mafic minerals, as shown in section
2.11.2, p.28"
VPC_M(sb1) ≥ 90
Одноместные предикаты, использованные в формулах, будем называть предикатами верхнего уровня. 4 формулы основаны на модальном минеральном составе образца (они начинаются с VPC).
Определения предикатов верхнего уровня ещё не даны. Но предполагается, что у образца будут указаны "физические" характеристики на основе которых будет дано их определение.
Большинство предикатов непосредственно употребляются в тексте первоисточника и так как сам текст написан в стиле алгоритма его формализация выполнена "один к одному".
Но в двух случаях пришлось сделать предположения. Заодно рассмотрим "преобразование" текста в код.
Случай 6-1.
Текст:
"(1) if the rock is considered to be of pyroclastic
origin go to section 2.2 “Pyroclastic Rocks
and Tephra” on p.7
"
Чтобы не вводить предикат "pyroclastic_origin" предположим, что
Предположение 6-1: Tephra является pyroclastic.
И критерий перехода к алгоритму секции 2.2 выглядит так:
pyroclastic(sb1)
Вопрос к Автору: верно ли Предположение 6-1.
Случай 6-2.
Текст:
"(7) if the rock contains modal leucite go to
section 2.8 “Leucite-bearing Rocks” on p.18
"
Теоретически "contains" может означать "значительное количество" (например >5%) пока же сделано предположение
Предположение 6-2: "contains" означает ">0".
И критерий перехода к алгоритму секции 2.8 выглядит так:
VPC_leucite(sb1)>0
Вопрос к Автору: верно ли Предположение 6-2?
Алгоритм написан на основе текста параграфа 2.11.2 "ULTRAMAFIC ROCKS (M > 90%)", стр.28-29 (см. [1] или [3]).
Каждая из диаграмм, применяющихся для классификации ультрамафических пород, реализована в виде отдельной классифицирующей функции, которая фактически возвращает наименование зоны треугольника исходя из характеристик образца. Для верхнего треугольника функция названа OOC_diagram_field, для нижнего - OPH_diagram_field.
p.28:
" The Subcommission
(Streckeisen, 1973, 1976) recommended two
diagrams, both of which are shown in Fig. 2.9.
One for the rocks consisting essentially of olivine,
orthopyroxene, and clinopyroxene, and the
other for rocks containing hornblende,
pyroxenes, and olivine.
"
Решение 28-1: как критерий выбора между диаграммами выбрано наличие или отсутствие в образце hornblende:
VPC_hornblende(sb1) = 0 - для верхней диаграммы
VPC_hornblende(sb1) > 0 - для нижней.
Вопрос к Автору: верно ли Решение 28-1?
Основную часть функции ultramafic_rock_type, составляют инструкции по добавлению квалификационного имени к имени породы в случае, когда образец содержит garnet или spinel.
p.29 "
Ultramafic rocks containing garnet or spinel
should be qualified in the following manner. If
garnet or spinel is less than 5% use garnet-
bearing peridotite, chromite-bearing dunite etc.
If garnet or spinel is greater than 5% use garnet
peridotite, chromite dunite etc.
"
Квалификация для garnet и spinel определяется независимо. При присутствии в образце обоих минералов порядок слов квалификации в термине - по возрастающей концентраций.
Критерий "входа" в квалификацию: VPC_garnet(sb1) + VPC_spinel(sb1) > 0
Далее указаны критерии квалификации и соответствующее добавляемое имя:
Вопрос к Автору: (терминологический): Почему порода объявляется обогащённой хромитом, на основании высокого содержания шпинели? Более естественным кажется использовать "spinel" вместо "chromite" в квалификации, т.е. "spinel-bearing", "spinel".
Две диаграммы Fig.2.9, [1], стр.28 (см. также [3]) формализованы в виде функций: OOC_diagram_field (верхний треугольник), OPH_diagram_field (нижний треугольник).
Формализация диаграмм требует некоторых уточнений:
- вычисления координат точек пересечения некоторых линий. Так линии внутреннего треугольника имеют значение 5, т.к. В его вершинах это значение дважды плюс 90 должно дать 100.
- решения какому из полей (именованных зон) диаграммы принадлежит граничная линия ("граница").
Алгоритм классифицирующей функции диаграммы намеренно выполнен как "цепочка" if-узлов каждый из которых "отвечает" за одну конкретную именованную зону диаграммы. Каждое условие представляет собой систему линейных неравенств. Совокупность таких условий обладает важными математическими свойствами:
- каждые два условия не совместны, т.к. соответствующие им зоны не пересекаются.
- объединение всех условий вместе даёт неравенства для треугольника, т.к. условия "покрывают" весь треугольник.
Интересно, что описанные свойства могут быть проверены "автоматически", если определения "загрузить" в машину вывода (МВ), работающую с линейными неравенствами. И такие МВ есть (например, Racer), т.к. запись линейных неравенств возможна на расширении OWL 2[2].
Вопрос к Автору: число 10 на обоих диаграммах - скорее всего опечатка, т.к. Оно приписано линии для Opx и должно быть 90.
Вопрос к Автору: верны ли неравенства блок-схем?
Создание алгоритма потребовало уточнения текста [1], т.е. текст содержит не достаточно информации и приходится делать предположения, которые конечно должны быть подтверждены Автором. Так же как и правомерность самого подхода.
Если подход правилен, то он может быть распространён на все варианты классификации. Кроме того продолжая работы надо дать определения предикатов верхнего уровня (plutonic...), уточнить определение функций VPC_M, VPC_carbonates...
В идеале блок-схемы и определения функций должны стать частью документа [1].
Важным результатом алгоритмизации является выявление первичных предикатов и функций, которые используются в определениях других, именно они будут "символами теории" при построении теории исчисления предикатов первого порядка для предметной области магматических горных пород.
Алгоритм классификации содержит в неявном виде определения всех видов магматических горных пород.
Из него можно получить определения в виде формул, которые оказываются формулами с одной свободной переменной исчисления предикатов первого порядка с числами.
Сама формула того или иного вида говорит о "сложности" понятия, стоящего за термином, а также указывает все понятия на которые опирается данное. Что чрезвычайно важно для поиска первичных понятий.
Замечание: когда определений много становится естественно классифицировать и характеризовать сами определения и определяемые термины. Так определение для harzburgite есть определение вида горной породы.
Интересно, что формально мы должны ввести предикат rock_type(x), аргументом которого будут унарные (с одним аргументом) предикаты, т.е. выйти за пределы исчисления предикатов первого порядка.
Получим для примера формулы для harzburgite и dunite.
Нам понадобится вспомогательный предикат:
Definition:
not_first_9(sb1) = not pyroclastic(sb1) and not VPC_carbonates(sb1)>50 and not VPC_melilite(sb1)>10 and not VPC_kalsilite(sb1)>0 and not kimberlite(sb1) and not lamproite(sb1) and not VPC_leucite(sb1)>0 and not lamprophyre(sb1) and not charnockite(sb1)
который верен в том случае, если образец не удовлетворяет первым 9-ти условиям верхнего уровня.
Преобразуем формулу справа применив отрицания:
not pyroclastic(sb1) and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and not kimberlite(sb1) and not lamproite(sb1) and VPC_leucite(sb1)=0 and not lamprophyre(sb1) and not charnockite(sb1)
Перегруппируем and-члены:
not pyroclastic(sb1) and not kimberlite(sb1) and not lamproite(sb1) and not lamprophyre(sb1) and not charnockite(sb1)
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0
Вынесём not за скобки:
Definition
nf9(sb1) =
not (pyroclastic(sb1) or kimberlite(sb1) or lamproite(sb1) or lamprophyre(sb1)
or charnockite(sb1))
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10
and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0
Рассмотрим ситуацию на примере породы harzburgite. Предикат harzburgite() будучи применён к образцу (его характеристикам) должен давать true если образец является harzburgite, а в противном случае - false.
Чтобы получить предикат надо пройти по блок-схемам сверху вниз и собрать условия приводящие к узлу на блок-схеме OOC_diagram_field выдающему значение «harzburgite». Эти условия надо соединить логической операцией «and».
Получится следующая формула
nf9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and
(0.4*VPC_OOC(sb1) ≤ VPC_Ol(sb1)) and (VPC_Ol(sb1) ≤ 0.9*VPC_OOC(sb1)) and (0 ≤ VPC_Cpx(sb1)) and (VPC_Cpx(sb1) < 0.05*VPC_OOC(sb1))
Подставим формулу nf9 и перегруппируем and-члены:
Definition
harzburgite(sb1) =
plutonic(sb1) and not (pyroclastic(sb1) or kimberlite(sb1) or lamproite(sb1) or lamprophyre(sb1) or charnockite(sb1))
and VPC_carbonates(sb1)≤50 and VPC_melilite(sb1)≤10 and VPC_M(sb1) ≥ 90
and VPC_kalsilite(sb1)=0 and VPC_leucite(sb1)=0 and VPC_hornblende(sb1)=0
and 0.4*VPC_OOC(sb1)≤VPC_Ol(sb1)≤0.9*VPC_OOC(sb1) and VPC_Cpx(sb1)<0.05*VPC_OOC(sb1)
где (см. «Определения»)
VPC_OOC(sb1) = VPC_Ol(sb1)+VPC_Opx(sb1)+VPC_Cpx(sb1)
Кроме того считаются выполненными требования VPC-range, что дало возможность убрать из второй строки определения "and 0≤VPC_Cpx(sb1)".
Таким образом точное определение вида магматической горной породы harzburgite состоит из трёх частей:
1. качественные характеристики (первая строка);
2. абсолютные ограничения на модальный состав (вторая и третья строки);
3. относительные ограничения на модальный состав (четвёртая строка).
Задачка harzburgite-1. В формуле нигде не сказано, что Ol, Px должны составлять основную массу образца. Можно представить образец, состоящий в основном (например, на 70%) их anthophyllite, который судя по всему есть минерал группы M (см. стр.4 [1]), а ещё на 25% из Ol, Cpx, Opx. Такой образец тоже будет классифицирован как harzburgite при попадании в границы относительных пропорций?
Возможно это следует из качественных характеристик.
Формула для dunite интересна тем, что сам он упоминается на двух диаграммах поэтому (редкий случай!) она содержит "or":
Definition
dunite(sb1) =
nf9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)=0 and (0.9*VPC_OOC(sb1) < VPC_Ol(sb1)) and (0 ≤ VPC_Opx(sb1)) and (0 ≤ VPC_Cpx(sb1))
or
nf9(sb1) and plutonic(sb1) and VPC_M(sb1) ≥ 90 and VPC_hornblende(sb1)>0 and (0.9*VPC_OPH(sb1) < VPC_Ol(sb1)) and (0 ≤ VPC_Px(sb1)) and (0 ≤ VPC_hornblende(sb1))
Пусть запись sb1 содержит сведения об образце. Тогда алгоритм отвечает на вопрос «Каков вид породы у sb1?». Формула предиката вида горной породы (например, harzburgite) отвечает на вопрос «sb1 есть harzburgite?».
Но, что более важно, сама формула отвечает на вопрос «что такое harzburgite?», т.к. содержит его определение.
Таким образом получено первое приближение формального определения вида магматической горной породы, которое пока оказалось системой линейных неравенств.
А для них существуют эффективные машины вывода. Что даёт возможность применять формулы для автоматической классификации образцов, а также анализировать всю совокупность определений математическими методами.
- согласовать с Автором [1] предположения использованные при написании алгоритма.
- продолжить работу с определениями предикатов и функций.
-- наиболее интересными и важными являются определения предикатов верхнего уровня алгоритма, т.к. на уровне диаграмм "правит" модальность.
- полная алгоритмизации всех вариантов классификации.
- автоматическое построение определений по алгоритму.
- создание теории исчисления предикатов первого порядка, содержащей определения всех терминов для видов магматических горных пород и их группировок.
- загрузка определений в машину вывода (например, Racer) для автоматического построения иерархии терминов, анализа свойств системы определений и классификации образцов.
1. Igneous Rocks: A Classification and Glossary of Terms или http://amigoreader.com/book/?b=29372
2. OWL 2 Web Ontology Language. Data Range Extension: Linear Equations. http://www.w3.org/TR/2009/NOTE-owl2-dr-linear-20091027/
3. копии цитируемых страниц первоисточника прикреплены к июньскому отчёту. см. http://sites.google.com/site/alex0shkotin/formal-geology/iugs-igneous-rocks-classification-algorithm