Návrh softwarového projektu: ANAA

Cíl projektu: vytvořit program, který k zadanému vzorci anorganické chemické sloučeniny vytvoří jeho racionální český název a naopak k zadanému českému názvu anorganické sloučeniny vytvoří příslušný vzorec. Z toho je také odvozen název projektu (Anorganické zvosloví). Důraz bude kladen na zvládnutí všech výjimek a nepravidelností.

Úvod do problematiky: V chemii jsou základními informačními jednotkami chemické symboly, vzorce, názvy prvků a jejich sloučenin. Různými kombinacemi těchto elementárních jednotek vyjadřují chemici složitou stavbu hmotného světa a dějů v něm probíhajících. Nejjednodušším grafickým vyjádřením struktury molekuly je chemický vzorec. Formulací pravidel, podle kterých se zapisují chemické vzorce a tvoří názvy chemických sloučenin, se zabývá chemické názvosloví. České anorganické názvosloví má jistá specifika, daná historickým vývojem od 20. let 19. století až do současné doby.

Přestože chemické názvosloví patří k poměrně známým oblastem chemie, autorům tohoto návrhu není znám software, který by komplexně řešil tuto problematiku. Dostupné aplikace se v lepším případě omezují na konkrétní typy chemických sloučenin (např. kyselin, hydroxidů) a umějí vytvářet pouze ze vzorce název nebo sice umějí obojí, ale pracují pouze na principu prohledávání databáze.

Náš program bude pracovat obecněji. Jakési "databázi v malém" se sice rovněž nevyhneme, protože některé základní chemické sloučeniny mají pouze triviální názvy (voda, amoniak apod.). Cílem projektu je ovšem minimalizovat rozsah takovýchto výčtů a názvy/vzorce odvozovat z několika málo faktů, které bude program znát. Rozsah počátečních znalostí je nastíněn níže a bude podrobněji popsán ve specifikaci. Pro začátek předpokládáme následující rozsah znalostí:

Název/vzorec se pak bude odvozovat podle jistých pravidel z těchto faktů. Pro lepší představu uvedeme zjednodušeně uvažovaný postup odvozování pro konkrétní příklad:
  • vstup: Al2(HPO4)3
  • zpracování na vnitřní struktury: Každý chemický vzorec se dá napsat jako seznam dvojic (X, n), kde X je buď prvek nebo seznam dvojic, a n je celé číslo. Tedy (Al,2)( (H,1)(P,1)(O,4), 3)
  • porovnání s maskou: Podle jistých charakteristik (typicky: konkrétní prvek/skupina na konkrétním místě) se rozpozná, o jaký typ sloučeniny se jedná. Masky budou navrženy co možná nejobecněji. V našem případě jde o sloučeninu typu Xi[(]HjYOk[)l], kde i,j,k,l jsou čísla splňující jisté podmínky, X,Y prvky/skupiny splňující jisté podmínky. Uvedená sloučenina je tedy hydrogensůl.
  • nazvání sloučeniny: pro každou masku bude definována množina pravidel, podle nichž se vytvoří název. Podle pravidel pro hydrogensůl se vypočítají potřebná oxidační čísla a s pomocí informací o prvcích se poskládá název: "" + "hydrogen" + "fosfor" + "ečnan"+ " " + "hlin" + "itý". Zadaná sloučenina je tedy hydrogenfosforečnan hlinitý.
  • Odvozování vzorce z názvu bude probíhat přesně opačným způsobem. Program bude zároveň schopen se v jistém smyslu učit, tj. pokud danou sloučeninu nebude umět pojmenovat, bude existovat možnost ho "naučit" jednak konkrétní sloučeninu a rovněž i nová fakta/odvozovací pravidla, a rozumně modifikovat fakta stávající. Jako vedlejší efekt při tvorbě názvu/vzorce bude zvážena realizace výpočtu některých dalších charakteristik anorganických chemických látek, které lze zjistit z názvu/vzorce (např. relativní atomová hmotnost, zda zadaná sloučenina může ve skutečnosti existovat). Ačkoliv daná problematika vypadá poměrně jednoduše, vytváření názvů složitějších sloučenin (jako např. heteropolyaniontových kyselin nebo komplexů) je již složitější. Pro lepší představu o náročnosti projektu by bylo dobré nahlédnout např. na tuto stránku, kde je podstatná část problematiky vyložena poměrně názorně a v populární formě.

    Představa je, že program v základní verzi by měl zvládat názvosloví v rozsahu vyučovaném na středních školách, tj. binární a "pseudobinární" sloučeniny (tj. např. oxidy, sulfidy, hydroxidy...), kyseliny s jedním centrálním atomem, soli a hydrogensoli, podvojné sloučeniny, hydráty. Struktura programu bude navržena dostatečně obecně tak, aby nebyl problém postupným dopisováním procedur zvládat další typy sloučenin, zejména komplexy (koordinační sloučeniny), preoxo- a thiosloučeniny a heteropolyaniontové kyseliny. Názvosloví těchto sloučenin již překračuje rámec středoškolských znalostí. Přesný rozsah schopností programu bude detailněji popsán po provedení podrobnější analýzy ve specifikaci. Na tomto místě je ovšem potřeba upozornit, že budou existovat sloučeniny, které program (bez naučení) nezvládne. Výše uvedený výčet pokrývá ale více než podstatnou část známých anorganických chemických sloučenin. Z těchto důvodů také nelze problematiku názvosloví řešit rozumně pro organické sloučeniny, u nichž se systematické názvosloví používá jen v omezené míře a jen u některých typů sloučenin. Navíc pro vytváření názvů/vzorců organických sloučenin nestačí pouze sumární vzorec, ale jsou potřeba i informace o struktuře látky. Proto se tento projekt soustředí pouze na názvosloví anorganické.

    Poznámky k předpokládané SW realizaci: Program bude napsán v jazyce C nebo C++. Jádro programu bude napsáno nezávisle na platformě. Součástí realizace by mělo být i webové rozhraní k aplikaci, které bude pracovat na principu cgi-skriptu. Mimo konzolové verze programu předpokládáme vytvoření GUI pro Windows a případně i pro X Window System.

    Odhadovaný počet řešitelů: 4 - 5, zatím obsazena čtyři místa

    Potřebné znalosti: Kromě programování v C (C++) a chuti do práce se přepokládá znalost anorganického chemického názvosloví minimálně v rozsahu středoškolské výuky.

    Kontakt: Jakub Lysák, Pavel Jiroutek