Zastosowanie logiki...?

0

Niebawem zacznę studia, a wraz z tym zdarzeniem zacznie się matma do której nie jestem przekonany. Szczególnie nudna wydaje mi się logika. Chciałbym się od was dowiedzieć, czy znacie jakieś praktyczne (niekoniecznie programistyczne) zastosowania tego działu matematyki.

Kilka faktów sam skojarzyłem z tą logikę i poniżej wymieniam kilka przykładów. Gdyby ktoś mógł dopisać coś do tej listy, byłby fajnie.

1. wyrażenia logiczne w if'ach
Przykład marny, ale kilku programistów się na to powołuje, że niby prawa de morgana potrafią uprościć zapis wyrażeń logicznych. Mając doświadczenie w wysokopoziomowym programowaniu, tego typu kwestia jakoś nigdy mi się nie przydała, bo w typowych programach zwykle mam banalne warunki w konstrukcjach sterujących.

2. programowanie w logice, systemy ekspertowe itp
Przez godzinę używałem Prologa i czytałem tutorial na jego temat. Sprawa na pierwszy rzut oka ma się następująco. Jest dwa etapy. Pierwszy polega na opisywaniu relacji między obiektami. System po otrzymuje tych relacji, chyba je uzupełnia o dodatkowe reguły na podstawie wnioskowania. Potem zachodzi drugi etap w którym programista ma możliwość odpytywania bazy danych. Jest to trochę podobne do SQL, ale zrobiło to na mnie lepsze wrażenie.

Dzięki takiemu programowaniu można tworzyć systemy ekspertowe, które na podstawie podanej wiedzy mogą udzielić odpowiedzi na zadawane pytania, np. z zakresu medycyny.

**3. projektowanie bramek logicznych **
Kiedyś znajomy student powiedział mi, że wykładowca zadał im ćwiczenie utworzenia pozostałych operatorów logicznych na podstawie chyba dwóch wskazanych. Nie pamiętam jakie to były, ale wniosek był taki, że dzięki logice można zaprojektować taki układ bramek logicznych taniej. Nie wiem ile w tym prawy, ile fałszu, ale przykład podaje, bo trochę mnie zastanawia.

**4. szachy? **
Trochę mnie to zastanawia, ale kiedyś na okładce rozdziału logiki w podręczniku od liceum był obrazek szachów. Tak mnie zastanawia, czy taka wiedza można wykorzystać w grach? Np. karcianych, czy wspomnianych szachach?

Czekam na wasze opinie.

0

Nudne to będzie klepanie analizy i algebry przez 90% czasu. Matematyka dyskretna akurat była dla mnie najciekawszą z dziedzin matematyki. Należy pamiętać, że nie uczysz się tam tylko algebry boola i tak naprawdę stosowanie prawa de morgana w upraszczaniu wyrażeń w instrukcjach warunkowych jedynie się przyczyni do zmniejszenia czytelności kodu. Jest to bardziej niezbędna podstawa do rzeczy, które będą później, tj. np. algorytmika. Bez matematyki dyskretnej nie ma co podchodzić do automatów, gramatyk, języków formalnych, a tym już zdecydowanie bliżej do informatyki samej w sobie.

0

W praktyce cały SQL to zabawa z prawami De Morgana i szukanie najlepszego sposobu na zapisanie warunków.
Szukanie błędów w procesach biznesowych. Często gęsto dostaniesz jakiś proces, który będzie zawierał pewne subtelne błędy. Twoim zadaniem będzie przekonanie biznesu, że te błędy istnieją oraz ich wskazanie.
Testowanie aplikacji. Tego nie unikniesz, bo unit testy są standardem. Logika pomaga na ogarnięcie nietypowych przypadków.

1

Rozszerzenie 3: Projektowanie przerzutników, dzięki którym można zrobić maszyny stanowe (automaty), dzięki którym działa komputer.
1: W wyrażeniach logicznych np. tutaj się przydaje:
zamiast (takie zapisy mnie rozwalaja zawsze):
if ((a==true && b==true) || (a==false && b==false))
można zapisać to jako:
if (a==b)

lub trudniejszy przypadek prawie tego samego:
if ((a==true && b==false) || (a==false && b==true))
na:
if (a^b)

Dzięki logice wiesz jak używać masek bitowych.

Często ludzie mówią, że umieją programować, a później jak np. oglądam ich kod to widzę:

int a;
// tutaj gdzies wczytanie a
string b;
switch (a)
{
case 0:
  {
    b = "Liczba 0";
    break;
  }
case 1:
  {
    b = "Liczba 1";
    break;
  }
...
case 40:
  {
    b = "Liczba 40";
    break;
  }
}

gdzie tu logika? - logika jest potrzebna, żeby nauczyć się myśleć. Jak nie ogarniesz logiki to nie nauczysz się programować, co najwyżej wykujesz (patrz przykład wyżej).

0

Szczęścia, zdrowia, pomyślności z ORMami przy np. systemach raportowania. Za duży narzut w stosunku do czystego SQLa i dodatkowo nie można stosować rozwiązań właściwych dla danego DBMS. Do przeglądania pojedynczych tabelek czy prostych zapytań są OK, ale coś bardziej skomplikowanego zdecydowanie lepiej jest napisać natywnie w SQLu.

Kiedyś zdarzyło mi się rozmawiać ze specem od architektury aplikacji biznesowych. Otrzymałem wówczas poniższą odpowiedź na ten temat 'SQL vs ORM'.

języki z rodziny SQL zostały stworzone do operowania na relacyjnych danych. Porządna logika biznesowa (zrozumiała/testowalna/rozszerzalna/wymienialna...) potrzebuje czegoś więcej niż jedynie możliwości zmiany danych - potrzebuje modelu. Model da się pięknie wyrazić za pomocą struktur obiektowych - stąd cała ewolucja z programowania strukturalnego do obiektowego. Moim zdaniem implementowanie logiki w SQL to cofanie się o całą epokę. Kwestii wydajności tutaj nie poruszam - i jedno i drugie podejście można napisać wydajnie i niewydajnie, wszystko zależy od umiejętności programisty.

Dziś zgadzam się z tym zdaniem i wypierdy na temat wydajności mnie nie przekonują.

0

Zastanawia mnie też jak ma się do siebie logika rozmyta do zwykłej logiki. Na wiki piszę, że tutaj nie ma tylko wartości 0 i 1 tylko rozważa się przedział wartości <0, 1>, pisze też, że to pozawala na uogólnienie - trochę mi to przypomina sieci neuronowe (kiedyś próbowałem się tego nauczyć, ale było trochę za trudne).

Myślałem, że do sieci neuronowych wystarczy tylko opanować analizę matematyczną, czy to oznacza, że znajomość logiki rozmytej mogła by mi tu ułatwić zadanie?
Jeszcze jedno podpytanie do tej kwestii, czy logika rozmyta jest jakoś strasznie trudna? Czy można ją łatwo pojąć, gdy się opanuje materiał zwykłej logiki?

1

Jeśli chodzi o jeszcze jakieś zastosowania logiki to w przypadku Teori Złożoności Obliczeniowej moze się przydać (np. przy redukcjach do problemów SAT)

1

Nudna/ irytująca logika to jest na prawie. Mam znajomych prawników i czytałem niektóre ustępy (lepiej byłoby je nazwać sracze), które były tak popier*olone, że głowa boli. Tak więc kolejne, cholernie praktyczne zastosowanie logiki to rozumienie prawa i regulaminów.

Poza tym logika, o ile dobrze myślę, jest niezbędna przy rachunku prawdopodobieństwa. Np aby oszacować sobie ryzyko, albo opłacalność, trzeba najpierw ustalić co z czego wynika.

Logika to pewnie u ciebie będzie jeden semestr, w sumie pewnie wyjdzie max kilkadziesiąt godzin. To nie wydaje mi się zbyt dużo.

Kiedyś znajomy student powiedział mi, że wykładowca zadał im ćwiczenie utworzenia pozostałych operatorów logicznych na podstawie chyba dwóch wskazanych.

Da się wszystkie wyprowadzić z jednego, np NAND.

NOT x = x NAND x
x AND y = NOT (x NAND y)
x OR y = NOT(NOT x AND NOT y)

Podobnie można zrobić z NOR. Bardzo dużo układów scalonych składa się właśnie praktycznie tylko z bramek NAND czy NOR, dla przykładu pamięci SSD. Jak widać strasznie dużo bramek się tutaj tworzy i pasuje znać jakieś prawa logiki, aby ilość bramek zmniejszyć. Programy do optymalizacji układów scalonych mają pewnie czasem ceny kosmiczne.

1

Logika temporalna - czyli logika z uwzględnieniem czasu. Przydatne do dowodzenia poprawności algorytmów współbieżnych i rozproszonych.

0

Nie wiem do końca co rozumiesz przez praktyczne, przykłady które mi się nasuwają

Semantyka języków programowania, Języki i Automaty, Lambda Rachunek

Skoro jeszcze nie studiowałeś, nie wiesz dokładnie jak wykląda logika, przykład z UW

http://www.mimuw.edu.pl/~urzy/Pmat/

1 użytkowników online, w tym zalogowanych: 0, gości: 1