Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних

Розглядається проблема пошуку програмних інваріантів у програмах над вільними алгебрами даних. Для отримання більш релевантних результатів при верифікації програмного забезпечення сучасним «пруверам» необхідні інваріанти програм. Представлено реалізацію ітераційного алгоритму генерації інваріантів н...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Проблеми програмування
Datum:2012
1. Verfasser: Максимець, О.М.
Sprache:Ukrainisch
Veröffentlicht: Інститут програмних систем НАН України 2012
Schlagworte:
Online Zugang:https://nasplib.isofts.kiev.ua/handle/123456789/86607
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Назва журналу:Digital Library of Periodicals of National Academy of Sciences of Ukraine
Zitieren:Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних / О.М. Максимець // Проблеми програмування. — 2012. — № 2-3. — С. 228-233. — Бібліогр.: 7 назв. — укр.

Institution

Digital Library of Periodicals of National Academy of Sciences of Ukraine
_version_ 1859708731345862656
author Максимець, О.М.
author_facet Максимець, О.М.
citation_txt Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних / О.М. Максимець // Проблеми програмування. — 2012. — № 2-3. — С. 228-233. — Бібліогр.: 7 назв. — укр.
collection DSpace DC
container_title Проблеми програмування
description Розглядається проблема пошуку програмних інваріантів у програмах над вільними алгебрами даних. Для отримання більш релевантних результатів при верифікації програмного забезпечення сучасним «пруверам» необхідні інваріанти програм. Представлено реалізацію ітераційного алгоритму генерації інваріантів на абсолютно вільних алгебрах. Показано, що алгоритм генерує релевантні інваріанти для відповідної вільної алгебри. The problem of generating program invariants on free algebras is considered. Modern provers need program invariants as input to get more relevant results for software verification. Implementation of iterative algorithm for generating invariants on absolutely free algebras is presented. We show that the algorithm generates relevant invariants corresponding to free algebras.
first_indexed 2025-12-01T04:31:52Z
fulltext Формальні методи програмування УДК 51.681.3 ПОШУК ІНВАРІАНТІВ U-Y-ПРОГРАМ ІТЕРАЦІЙНИМ АЛГОРИТМОМ НАД АБСОЛЮТНО ВІЛЬНИМИ АЛГЕБРАМИ ДАННИХ О.М. Максимець Київський національний університет ім. Тараса Шевченка, 03680, м. Київ, проспект Глушкова, 2, корпус 6, E-mail: maksymets@gmail.com Розглядається проблема пошуку програмних інваріантів у програмах над вільними алгебрами даних. Для отримання більш релевантних результатів при верифікації програмного забезпечення сучасним «пруверам» необхідні інваріанти програм. Представлено реалізацію ітераційного алгоритму генерації інваріантів на абсолютно вільних алгебрах. Показано, що алгоритм генерує релевантні інваріанти для відповідної вільної алгебри. The problem of generating program invariants on free algebras is considered. Modern provers need program invariants as input to get more relevant results for software verification. Implementation of iterative algorithm for generating invariants on absolutely free algebras is presented. We show that the algorithm generates relevant invariants corresponding to free algebras. Вступ В стані програми інваріант являє собою твердження щодо змінних програми, яке є вірним завжди, коли процес обчислень потрапляє у цей стан. Будь-який прогрес у проблемах пошуку інваріантів є важливим для перевірки правильності програм у теорії верифікації [1]. Пошук інваріантів є полем для застосування алгоритмів на алгебрах, автоматичних «пруверів», абстрактних методів представлення і перевірки моделей. Особливої уваги заслуговує задача пошуку інваріантів для циклів. Розв’язок цієї задачі дозволяє знаходити вічні цикли на етапі компіляції і перевіряти більш складні програми [2]. У даній роботі розглянута узагальнена задача пошуку інваріантів, не фокусуючись на інваріантах циклів. Вибрана мова виразів не дозволяє покрити множину виразів, які використовуються в сучасних мовах програмування, але є наближенням до них. Новизною цієї роботи є реалізація ітераційного алгоритму [3] і демонстрація його на прикладі. Визначення Розглянемо U-Y програму на пам'яті змінних { }1,..., mR r r= , які визначені на алгебрі даних ( ),D Ω . є клас алгебр, який включає в себе алгебру ( ,K D Ω) ( ),D Ω і визначається набором рівностей [4]. Eq ( ),T RΩ є вільною алгеброю термів, на з класу R ( ),K D Ω . Ми розглядаємо абсолютно вільну алгебру, тому множина відомих співвідношень є пустою . Eq = ∅ Нехай { 0 1 *, ,..., }A a a a= – множина вершин U-Y програми. – множини базисів співвідношень, які є вірними в відповідній вершині програми на поточному кроці виконання методу. 0 1, ,...,a a aN N N * Розглядається задача пошуку інваріантів на мові . складається з термів визначених як рівності виду , де , . L L ( ):ir h r= ( ) ( ),h r T R∈ Ω ( )1,..., mr r r= Для демонстрації структур даних і алгоритму розглянемо приклад програми, яка обчислює суму 1 1 1 m y n z y y z m − = = ∑ ∑ по вхідних цілих , . Одна з U-Y програм, яка розв’язує цю задачу (рис. 1). m n Ребро U-Y програми складаються з умов переходу u , які знаходяться зліва від ребра на рис. 1 і опера- торів присвоєння , що знаходяться справа від ребра. позначає базис співвідношень для вершини програ- ми , який справджується на конкретному кроці алгоритму. y aN a Розглядається метод верхньої апроксимації (МВА) [5] для генерації інваріантів на вище наведеному прикладі. МВА ігнорує умови на ребрах, а ті які мають вигляд u ( )ir h r= переносяться в присвоєння цього ребра у вигляді . Таким чином, ребро між вершинами і , яке складається з y ( ):ir h r= 3a 4a ( )u z m= = і буде враховано, як 2 2 1( : ^ , : / )y x m y sum sum sum x= = = + 2 2 1( : ^ , : / , : )y x m y sum sum sum x z m= = = + = . ©О.М. Максимець, 2012 ISSN 1727-4907. Проблеми програмування. 2012. № 2-3. Спеціальний випуск 228 Формальні методи програмування a2 a1 a0 a3 : ,input m n 1 1 1 : m y n z y y z result m − = = ∑ ∑ y := 1 sum2 := 0 z := 1 sum1 := 0 x := z ^ y; sum1 := sum1 + x a4 x := m ^ y sum2 := sum2 + sum1/x z = m z:=z+1 z != m y:=y+1 y != n a* y = n Рис. 1. Приклад U-Y програми Метод використовує три нетривіальні операції над базисами: перетин, ефект і порівняння. Операція перетину базисів будує найбільший базис простору, який є підпростором і ( ,aef N y) BAN NI AN BN . Оператор за базисом співвідношень , які вірні перед виконанням операторів присвоювання , будує базис співвідношень, які вірні на перетвореному оператором стані пам’яті. Оператор порівняння двох базисів співвідношень ( ,aef N y) B aN y y AN N<> перевіряє чи збігаються простори співвідношень описані цими базисами, враховуючи, що в базисах можуть використовуватися різні набори змінних. Більш детально ці операції і їхня оцінка складності описані в [6]. Початкове наближення За означенням U-Y програма має тільки одну початкову вершину a0. На початкову вершину може подаватися вхідний базис співвідношень , який є правильним до виконання програми. Решту вершин мають порожні базиси співвідношень . Для розглядуваного прикладу 0aN 1,...,aN N *a 0aN = ∅ . Метод називається методом верхньої апроксимації тому, що ми будуємо початкові базиси співвідношень, які з кожним кроком звужуються. Початкове наближення цих базисів і є верхньою границею. Початкове наближення отримується в результаті виконання першого етапу методу. Далі приведена послідовність дій виконання першого етапу МВА (рис. 2) для пошуку початкового наближення: Na0 := N0 ToVisit.push(a0) Visited := {} while (ToVisit <> ) ∅ c := ToVisit.pop() Visited := Visited + c for every (c, y, a’) if Not a’ in Visited Na’:=ef(Nc, y) ToVisit.push(a’) Рис. 2. Перший етап МВА 229 Формальні методи програмування На кожному кроці зберігається стек вершин, які потрібно відвідати і множину, які вже були відвідані . На першому кроці методу стек складається з , а множина порожня. На кожній ітерації методу розглядається одна з вершин стеку . Розглядаються всі ребра ToVisit Visited ToVisit 0a Visited ToVisit c ( ), ,c y a′ , які виходять з цієї вершини і присвоюються aN ′ результуючий базис ефекту ( ),cef N y . Додаємо до множини для розгляду на наступних кроках. Етап закінчується, коли множина розглядуваних вершин є порожньою. a′ ToVisit ToVisit Проведемо обчислення методу для розглянутого прикладу U-Y програми: Беремо вершину з стеку , розглянемо ребро , , бо 0a ToVisit ( )( )1, 2 : 0; : 1 ,aca sum y= = ( )( ) ( )1 0: , 2 : 0; : 1 : 2 : 0; :N ef N sum y sum y= = = = = 1 0N= ∅ . = Додаємо до множини Visite , до стеку T . 0a d 1a oVisit Беремо вершину з стеку T , розглянемо ребро 1a oVisit ( )( )1 2, 1: 0; : 1 ,aa sum z= = : ( )1 : 2 : 0; :N sum y= = =1 = , ( )( ) ( )2 1: , 1: 0; : 1 : 2 : 0; 1: 2; : 1; :N ef N sum z sum sum sum z y z= = = = = = = . Додаємо до множини Visite , до стеку To . 1a d 2a Visit Беремо вершину з стеку To , розглянемо ребро 2a Visit ( )( )2 3, 1: 1 ^ ; : ^ ,aa sum sum z y x z y= + = . Продовжуючи виконання далі за методом отримуємо наступні базиси співвідношень, що приведені в табл. 1. Таблиця 1. Базиси початкового наближення Вершина Базис співвідношень 0aN ∅ 1aN 2 : 0 : 1 sum y = = 2 : 0 1: 2 : 1 : sum sum sum z y z = = = = 2aN 2 : 0 1: 2 : 1 : : ^ sum sum sum x z y z x z z = = + = = = 3aN 2 : 0 1 1: 0 ^ : : 1 : ^ sum sum sum z z z m y x z y = + = + = = = 4aN 2 : 0 0 ^ 1: 0 ^ : : : ^1 sum z z sum z z z m y n x z = + + = + = = = *aN Етап стабілізації розв’язку На кожному кроці зберігається множина вершин, які потрібно відвідати . На першому кроці методу множина складається з усіх вершин множини ToVisit ToVisit A окрім . На кожній ітерації методу розглядається одна з вершин стеку . Базис поточної множини співвідношень присвоюється базис множини співвідношень вершини : . Розглядаються всі ребра 0a ToVisit c c : cN N= ( ), ,a y c′ , які входять в вершину і для кожного ребра поточний базис множини співвідношень перетинається з базисом . Після проходу по всім перерахованим ребрам , то множина поповнюється всіма вершинами, для яких є c N ( ,cef N y) cN N<> ToVisit 230 Формальні методи програмування ребра, які ведуть з : , де – множина ребер U-Y програми. Етап методу закінчує виконання, якщо множина розглядуваних вершин To є порожньою. c ( ){ }| , ,a c y a S∈ S Visit Послідовність дій виконання другого етапу МВА (рис. 3). ToVisit := A\{a0} while (ToVisit <> ) ∅ c := take from ToVisit if (Nc <> ) ∅ N := Nc for every (a’, y, c) N := NI ef(Nc, y) if (N <> Nc) Nc := N ToVisit := ToVisit + {a | for every (c, y, a)} Рис. 3. Другий етап МВА Розглянемо виконання 2-го етапу методу (рис. 3) на розглядуваному прикладі програми (рис. 1). Множина To містить { } . Visit 1 2 3 4 *, , , ,a a a a a Розглянемо вершину , . 1a 1:N N= Розглянемо ребро : ( )( )0, 2 : 0; : 1 ,1sum y= = ( )( ) ( )0 , 2 : 0; : 1 2 : 0; : 1ef N sum y sum y= = = = = . Присвоюємо: ( ) ( ) ( ): 2 : 0; : 1 2 : 0; : 1 : 2 : 0; : 1N sum y sum y sum y= = = ∩ = = = = = Розглянемо ребро ( )4 1, : 1,a y y a= + : ( )4 : 2 : 0 1; 1: 0 ^ ; : ; : 1; : ^N sum sum sum z z z m y x z y= = + = + = = = , ( ) (4 , : 1 2 : 0 0 ^ ; 1: 0 ^ ; : ; : 1 1; : ^1ef N y y sum z z sum z z z m y x z= + = = + + = + = = + = ) ) ∅ N . Присвоюємо: ( ) (: 2 : 0; : 1 2 : 0 0 ^ ; 1: 0 ^ ; : ; : 1 1; : ^1N sum y sum z z sum z z z m y x z= = = = + + = + = = + = =I . Базис , тому до розгляду додаються, вершини до яких є ребра з вершини : 1N <> 1a { }2:ToVisit ToVisit a= + . Вершина уже знаходиться в To . 2a Visit Розглянемо вершину , . 2a 2:N N= Розглянемо ребро : ( )( )1, 1: 0; : 1 , 2sum z= = ( ) ( )1, 1: 0, : 1 1: 0; : 1ef N sum z sum z= = = = = , ( ) ( ) ( )2 : 2 : 0; 1: 2; : 1; : 1: 0; : 1 : 1: 0; : 1N sum sum sum z y z sum z sum z= = = = = = = = = =I . Розглянемо ребро : ( )3, : 1,2z z= + ( )3 : 2 : 0; 1: 2 ; : 1; : ; : ^N sum sum sum x z y z x z z= = = + = = = , ( ) (3 , : 1 2 : 0; 1: 2 ^ ; : ; : 1; : ^ef N z z sum sum sum z z z y y y x y y= + = = = + = + = = ) ) ∅ N , ( ) (2 : 1: 0; : 1 2 : 0; 1: 2 ^ ; : ; : 1; : ^ :N sum z sum sum sum z z z y y y x y y= = = = = + = + = = =I . Базис , тому до розгляду додаються, вершини до яких є ребра з вершини : 2N <> 2a { }3:ToVisit ToVisit a= + . Вершина уже знаходиться в To . 3a Visit Розглянемо вершину , . 3a 3:N N= Розглянемо ребро ( )2, 1: 1 ^ ; : ^ ,3sum sum z y z z y= + = : ( ) (2 , 1: 1 ^ ; : ^ 1: 1 ; : ^ef N sum sum z y x z y sum sum x x z y= + = = = + = ) Присвоюємо: ( ) ( ) ( ): 2 : 0; 1: 2 ; : 1; : ; : ^ 1: 1 ; : ^ : ^N sum sum sum x z y z x z z sum sum x x z y x z y= = = + = = = = + = = =I Базис , тому до розгляду додаються, вершини до яких є ребра з вершини : . Вершина уже знаходиться в To , а ні. 3N <> N }, 3a { 2 4:ToVisit ToVisit a a= + 4a Visit 2a Розглянемо вершину , . 2a 2:N N= Так як переходимо до наступної вершини. 2 :N = ∅ 231 Формальні методи програмування Розглянемо вершину , . 4a 4:N N= Розглянемо ребро ( )2, 1: 1 ^ ; : ^ ,4sum sum z y x z y= + = : ( ) ( )3 , 2 : 2 1; : ; : ^ 2 : 2 1 ; : ; : ^ef N sum sum sum z m x m y sum sum sum x z m x z y= + = = = = + + = = Присвоюємо: ( ) ( ): 2 : 0 1; 1: 0 ^ ; : ; : 1; : ^ 2 : 2 1; : ; : ^N sum sum sum z z z m y x z y sum sum sum z m x z y= = + = + = = = = + = =I ( ): ; : ^z m x z y= = = = }, . Базис , тому додаємо до розгляду вершини до яких є виходи з вершини : . Вершина уже знаходиться в To , а буде додана. 4N N<> 4N { 1 5:ToVisit ToVisit a a= + 5a Visit 1a Розглянемо вершину , . 2a 1:N N= Так як переходимо до наступної вершини. 1 :N = ∅ Розглянемо вершину , . Розглянемо ребро 5a 5:N N= ( )4, : ,5y n= : ( ) (4 , : : , : ; : ^ef N y n z m y n x z y= = = = = ) . Присвоюємо: ( ) ( ) ( ): 2 : 0 0 ^ ; 1: 0 ^ ; : ; : ; : ^1 : ; : ; : ^ : ; :N sum z z sum z z z m y n x z z m y n x z y z m y n= = + + = + = = = = = = = = =I . Базис , але з вершини немає виходів, тому що ця вершина кінцева. 5N <> N 5a Множина To порожня, робота методу закінчилась. Visit Результатом виконання методу є наступна множина базисів інваріантів (табл. 2). Таблиця 2. Базиси інваріантів Вершина Базис інваріантів 0aN ∅ 1aN ∅ 2aN ∅ 3aN ^x z y= ^x z y= z m= 4aN y n= z m= *aN Індуктивне доведення інваріантів Як бачимо з прикладу вище отримати доведення вірності U-Y програми не вдається, оскільки з базису інваріантів неможливо вивести вираз, який обчислює програма. Розглянемо приклад програми, яка обчислює добуток матриць , де : :C A B= × ( ) ( ) ( 1 , , * n r c i j a i r b r j = = ∑ ), ( ): 1;for i n= ( ): 1;for j n= ( ): 1;for l n= ( ) ( ) ( ) ( ), : , , * ,c i j c i j a i l b l j= + Рис. 4. Приклад програми множення матриць МВА на даному прикладі не вдається отримати інших інваріантів, окрім умов виходу з циклів. Скористаємося аналітичним методом для доведення інваріантів. Методом математичної індукції доведемо, що в рядку 4, гнізді циклів, виконується інваріант . ( ) ( ) ( 1 , , * l r c i j a i r b r j = = ∑ ), Для твердження індукції виконується 1l = ( ) ( ) ( ), ,1 1c i j a i b j= ⋅ , . Для твердження індукції виконується 2l = ( ) ( ) ( ) ( ) ( ), ,1 1, , 2 2c i j a i b j a i b j= ⋅ + ⋅ , . Нехай твердження виконується на кроці l k= : . Розглянемо співвідношення на кроці : . ( ) ( ) ( 1 , , * k r c i j a i r b r j = = ∑ ), ,1l k= + ( ) ( ) ( ) ( ) ( ) ( ) ( ) 1 1 1 , , , , 1 1, , k k r r c i j a i r b r j a i k b k j a i r b r j + = = = ⋅ + + ⋅ + = ⋅∑ ∑ 232 Формальні методи програмування Таким чином, на всіх кроках в рядку 4 виконується . Отже, після закінчення виконання циклу за умовою його закінчення 1..l = n ),( ) ( ) ( 1 , , * l r c i j a i r b r j = = ∑ l n= і справджується , що і доводить правильність програми. ( ) ( ) ( 1 , , * n r c i j a i r b r j = = ∑ ), Одна з особливостей МВА – це можливість при генерації інваріантів ураховувати більш складні інваріанти, виведені експертом, наприклад, методом математичної індукції. У такому випадку ці інваріанти додаються до вхідного базису співвідношень . 0aN Висновки У даній роботі описується реалізація алгоритму МВА [1]. Представлений результат виконання генерації інваріантів програмою, яка реалізує метод верхньої апроксимації для U-Y програм над вільною алгеброю. Отримана множина базисів інваріантів може слугувати вхідними параметрами для «прувера», який перевіряє правильність програми. Оскільки в вершині виконується основна операція сумування 3a 1: 1sum sum x= + , то інваріант ^x z y= вказує на те, що сума рахується правильно. У вершині виконується операцію ділення на 4a x і справджуються умови ^x z y= і z m= , тобто ділення правильне щодо постановки задачі. Інваріанти в вершині надають змогу перевірити умови виходу з програми. 5a Змінюючи три операції: порівняння, перетину базисів і ефект , які використовуються в методі, відповідно до алгебри даних U-Y програми, можна отримати більш складні інваріанти. В наступних працях планується розширити алгебру до алгебри лінійних многочленів і дослідити паралелізацію ітераційних методів [7]. ef 1. Hoare T. The Verifying Compiler: A Grand Challenge for Computing Research // Journal of the ACM.– 2003.– N. 50(1). – P. 63–69. 2. Kovacs L., Voronkov A. Finding loop invariants for programs over arrays using a theorem prover. Proceedings of the 12th International Conference on Fundamental Approaches to Software Engineering of Lecture Notes in Computer Science, Springer.– 2009. – Vol. 5503.– P. 470. 3. Кривий С.Л. Проблеми розробки програмного забезпечення. Формалізація, модель, алгоритми, програма, верифікація.– К., 2010. 4. Maksymets O.M. Application of minimization algorithm for finite acyclic automata in finding condition’s basis for program invariant search // Proceedings of International Conference on Theoretical and Applied Aspects of Cybernetics. Informatics and Computer Science Section.– 2011.– P. 35–37. 5. Годлевский А.Б., Капитонова Ю.В., Кривой С.Л., Летичевский А.А. Итеративные методы анализа программ // Кибернетика.– 1989.– № 2.– С. 9–19. 6. Годлевский А.Б., Кривой С.Л. Трансформационный синтез еффективных алгоритмов с учетом дополнительной информации // Кибернетика.– 1989.– № 2.– С. 9–19. 7. Кривой С.Л., Ракша С.Г. Поиск инвариантных линейных зависимостей в программах // Кибернетика.– 1984.– № 6.– С. 23–28. 233 Вступ Визначення Початкове наближення Етап стабілізації розв’язку Індуктивне доведення інваріантів Висновки
id nasplib_isofts_kiev_ua-123456789-86607
institution Digital Library of Periodicals of National Academy of Sciences of Ukraine
issn 1727-4907
language Ukrainian
last_indexed 2025-12-01T04:31:52Z
publishDate 2012
publisher Інститут програмних систем НАН України
record_format dspace
spelling Максимець, О.М.
2015-09-23T16:21:23Z
2015-09-23T16:21:23Z
2012
Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних / О.М. Максимець // Проблеми програмування. — 2012. — № 2-3. — С. 228-233. — Бібліогр.: 7 назв. — укр.
1727-4907
https://nasplib.isofts.kiev.ua/handle/123456789/86607
51.681.3
Розглядається проблема пошуку програмних інваріантів у програмах над вільними алгебрами даних. Для отримання більш релевантних результатів при верифікації програмного забезпечення сучасним «пруверам» необхідні інваріанти програм. Представлено реалізацію ітераційного алгоритму генерації інваріантів на абсолютно вільних алгебрах. Показано, що алгоритм генерує релевантні інваріанти для відповідної вільної алгебри.
The problem of generating program invariants on free algebras is considered. Modern provers need program invariants as input to get more relevant results for software verification. Implementation of iterative algorithm for generating invariants on absolutely free algebras is presented. We show that the algorithm generates relevant invariants corresponding to free algebras.
uk
Інститут програмних систем НАН України
Проблеми програмування
Формальні методи програмування
Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
published earlier
spellingShingle Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
Максимець, О.М.
Формальні методи програмування
title Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
title_full Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
title_fullStr Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
title_full_unstemmed Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
title_short Пошук інваріантів U-Y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
title_sort пошук інваріантів u-y- програм інтераційним алгоритмом над абсолютно вільними алгебрами данних
topic Формальні методи програмування
topic_facet Формальні методи програмування
url https://nasplib.isofts.kiev.ua/handle/123456789/86607
work_keys_str_mv AT maksimecʹom pošukínvaríantívuyprogramínteracíinimalgoritmomnadabsolûtnovílʹnimialgebramidannih