Sztuczna inteligencja/SI Moduł 2/Składnia języka logiki: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Jarabas (dyskusja | edycje)
mNie podano opisu zmian
m Zastępowanie tekstu – „,</math>” na „</math>,”
Linia 17: Linia 17:




* '''Symbole stałych:'''  oznaczane za pomocą liter <math>a,b,c\dots \,</math>.
* '''Symbole stałych:'''  oznaczane za pomocą liter <math>a,b,c\dots \</math>,.
* '''Symbole zmiennych:'''  oznaczane za pomocą liter <math>x,y,z\dots \,</math>.
* '''Symbole zmiennych:'''  oznaczane za pomocą liter <math>x,y,z\dots \</math>,.
* '''Symbole funkcyjne:'''  oznaczane za pomocą liter <math>f,g,h\dots \,</math>. każdy symbol funkcyjny ma ustaloną liczbę argumentów.
* '''Symbole funkcyjne:'''  oznaczane za pomocą liter <math>f,g,h\dots \</math>,. każdy symbol funkcyjny ma ustaloną liczbę argumentów.
* '''Symbole predykatowe:'''  oznaczane za pomocą liter <math>P,Q,R,\dots \,</math>; każdy symbol predykatowy ma ustaloną liczbę argumentów.
* '''Symbole predykatowe:'''  oznaczane za pomocą liter <math>P,Q,R,\dots \</math>,; każdy symbol predykatowy ma ustaloną liczbę argumentów.
* '''Operatory logiczne:'''  <math>\neg \,</math> (negacja), <math>\land \,</math> (koniunkcja), <math>\lor \,</math> (alternatywa), <math>\rightarrow \,</math> (implikacja), <math>\leftrightarrow \,</math> (równoważność).
* '''Operatory logiczne:'''  <math>\neg \</math>, (negacja), <math>\land \</math>, (koniunkcja), <math>\lor \</math>, (alternatywa), <math>\rightarrow \</math>, (implikacja), <math>\leftrightarrow \</math>, (równoważność).
* '''Kwantyfikatory:'''  kwantyfikator ogólny <math>\forall \,</math>, kwantyfikator szczegółowy <math>\exists \,</math>.
* '''Kwantyfikatory:'''  kwantyfikator ogólny <math>\forall \</math>,, kwantyfikator szczegółowy <math>\exists \</math>,.
* '''Nawiasy:'''  <math>( \,</math>, <math>) \,</math>, w razie potrzeby także inne.
* '''Nawiasy:'''  <math>( \</math>,, <math>) \</math>,, w razie potrzeby także inne.


Będziemy czasem skrótowo mówić o symbolach stałych jako o stałych, o
Będziemy czasem skrótowo mówić o symbolach stałych jako o stałych, o
Linia 37: Linia 37:
stosowanych do argumentów. Poprawnej postaci argumenty dla symboli
stosowanych do argumentów. Poprawnej postaci argumenty dla symboli
predykatowych nazywane są termami. Każda stała i zmienna jest
predykatowych nazywane są termami. Każda stała i zmienna jest
termem. Ponadto, jeśli <math>f \,</math> jest dowolnym <math>m \,</math>-argumentowym symbolem
termem. Ponadto, jeśli <math>f \</math>, jest dowolnym <math>m \</math>,-argumentowym symbolem
funkcyjnym, a <math>t_1,t_2,\dots,t_m \,</math> są dowolnymi termami, to także
funkcyjnym, a <math>t_1,t_2,\dots,t_m \</math>, są dowolnymi termami, to także
<math>f(t_1,t_2,\dots,t_m) \,</math> jest termem. Jak widać, stosując dowolny symbol
<math>f(t_1,t_2,\dots,t_m) \</math>, jest termem. Jak widać, stosując dowolny symbol
funkcyjny do argumentów będących termami uzyskujemy term.
funkcyjny do argumentów będących termami uzyskujemy term.


=== Formuły atomowe ===
=== Formuły atomowe ===


Jeśli <math>P \,</math> oznacza dowolny <math>m \,</math>-argumentowy symbol predykatowy, a
Jeśli <math>P \</math>, oznacza dowolny <math>m \</math>,-argumentowy symbol predykatowy, a
<math>t_1,t_2,\dots,t_m \,</math> sa dowolnymi termami, to <math>P(t_1,t_2,\dots,t_m) \,</math>
<math>t_1,t_2,\dots,t_m \</math>, sa dowolnymi termami, to <math>P(t_1,t_2,\dots,t_m) \</math>,
jest formułą atomową. Formułą atomową jest więc dowolne zastosowanie
jest formułą atomową. Formułą atomową jest więc dowolne zastosowanie
symbolu predykatowego do argumentów będących termami.
symbolu predykatowego do argumentów będących termami.
Linia 56: Linia 56:




* Jeśli <math>\alpha \,</math> jest formula, to <math>(\alpha) \,</math> jest formułą.
* Jeśli <math>\alpha \</math>, jest formula, to <math>(\alpha) \</math>, jest formułą.
* Jeśli <math>\alpha \,</math> jest formula, to <math>\neg\alpha \,</math> jest formułą.
* Jeśli <math>\alpha \</math>, jest formula, to <math>\neg\alpha \</math>, jest formułą.
* Jeśli <math>\alpha \,</math> i <math>\beta \,</math> są formułami, to:
* Jeśli <math>\alpha \</math>, i <math>\beta \</math>, są formułami, to:
** <math>\alpha\land\beta \,</math> jest formułą,
** <math>\alpha\land\beta \</math>, jest formułą,
** <math>\alpha\lor\beta \,</math> jest formułą,
** <math>\alpha\lor\beta \</math>, jest formułą,
** <math>\alpha\rightarrow\beta \,</math> jest formułą,
** <math>\alpha\rightarrow\beta \</math>, jest formułą,
** <math>\alpha\leftrightarrow\beta \,</math> jest formułą.
** <math>\alpha\leftrightarrow\beta \</math>, jest formułą.


* Jeśli <math>\alpha \,</math> jest formula i <math>x \,</math> jest symbolem zmiennej, to
* Jeśli <math>\alpha \</math>, jest formula i <math>x \</math>, jest symbolem zmiennej, to
** <math>(\forall x)\alpha \,</math> jest formułą,
** <math>(\forall x)\alpha \</math>, jest formułą,
** <math>(\exists x)\alpha \,</math> jest formułą.
** <math>(\exists x)\alpha \</math>, jest formułą.

Wersja z 09:31, 5 wrz 2023

Składnia języka logiki

Obecnie przystąpimy do zdefiniowania składni języka logiki predykatów, w którym będą zapisywane formuły przetwarzane w procesie wnioskowania, Składnia określa reguły budowania poprawnych formuł, czyli takich, które mogą być przetwarzane przez system wnioskujący. Definiując składnię nie będziemy się zajmować znaczeniem poszczególnych symboli i konstrukcji języka, choć oczywiście znaczenie części z nich będzie dla nas oczywiste ze względu na powszechne doświadczenie z używaniem notacji logicznej np. do zapisu twierdzeń matematycznych.

Alfabet

Alfabet, czyli zbiór symboli języka logiki predykatów, obejmuje poniższe kategorie symboli. Dla każdej z nich podano oznaczenia, jakie będą dalej stosowane.


  • Symbole stałych: oznaczane za pomocą liter Parser nie mógł rozpoznać (błąd składni): {\displaystyle a,b,c\dots \} ,.
  • Symbole zmiennych: oznaczane za pomocą liter Parser nie mógł rozpoznać (błąd składni): {\displaystyle x,y,z\dots \} ,.
  • Symbole funkcyjne: oznaczane za pomocą liter Parser nie mógł rozpoznać (błąd składni): {\displaystyle f,g,h\dots \} ,. każdy symbol funkcyjny ma ustaloną liczbę argumentów.
  • Symbole predykatowe: oznaczane za pomocą liter Parser nie mógł rozpoznać (błąd składni): {\displaystyle P,Q,R,\dots \} ,; każdy symbol predykatowy ma ustaloną liczbę argumentów.
  • Operatory logiczne: Parser nie mógł rozpoznać (błąd składni): {\displaystyle \neg \} , (negacja), Parser nie mógł rozpoznać (błąd składni): {\displaystyle \land \} , (koniunkcja), Parser nie mógł rozpoznać (błąd składni): {\displaystyle \lor \} , (alternatywa), Parser nie mógł rozpoznać (błąd składni): {\displaystyle \rightarrow \} , (implikacja), Parser nie mógł rozpoznać (błąd składni): {\displaystyle \leftrightarrow \} , (równoważność).
  • Kwantyfikatory: kwantyfikator ogólny Parser nie mógł rozpoznać (błąd składni): {\displaystyle \forall \} ,, kwantyfikator szczegółowy Parser nie mógł rozpoznać (błąd składni): {\displaystyle \exists \} ,.
  • Nawiasy: Parser nie mógł rozpoznać (błąd składni): {\displaystyle ( \} ,, Parser nie mógł rozpoznać (błąd składni): {\displaystyle ) \} ,, w razie potrzeby także inne.

Będziemy czasem skrótowo mówić o symbolach stałych jako o stałych, o symbolach zmiennych jako o zmiennych, o symbolach funkcyjnych jako o funkcjach, o symbolach predykatowych jako o predykatach, trzeba jednak pamiętać, że - jak długo nie określimy ich znaczenia - są to wyłącznie symbole, czyli pewne napisy, z których konstruowane są bardziej złożone napisy (formuły) według opisanych dalej reguł.

Termy

Jak zobaczymy, formuły konstruowane są z symboli predykatowych stosowanych do argumentów. Poprawnej postaci argumenty dla symboli predykatowych nazywane są termami. Każda stała i zmienna jest termem. Ponadto, jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle f \} , jest dowolnym Parser nie mógł rozpoznać (błąd składni): {\displaystyle m \} ,-argumentowym symbolem funkcyjnym, a Parser nie mógł rozpoznać (błąd składni): {\displaystyle t_1,t_2,\dots,t_m \} , są dowolnymi termami, to także Parser nie mógł rozpoznać (błąd składni): {\displaystyle f(t_1,t_2,\dots,t_m) \} , jest termem. Jak widać, stosując dowolny symbol funkcyjny do argumentów będących termami uzyskujemy term.

Formuły atomowe

Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle P \} , oznacza dowolny Parser nie mógł rozpoznać (błąd składni): {\displaystyle m \} ,-argumentowy symbol predykatowy, a Parser nie mógł rozpoznać (błąd składni): {\displaystyle t_1,t_2,\dots,t_m \} , sa dowolnymi termami, to Parser nie mógł rozpoznać (błąd składni): {\displaystyle P(t_1,t_2,\dots,t_m) \} , jest formułą atomową. Formułą atomową jest więc dowolne zastosowanie symbolu predykatowego do argumentów będących termami.

Formuły złożone

Formuły złożone są konstruowane z formuł atomowych przez zastosowanie operatorów logicznych, kwantyfikatorów i nawiasów, zgodnie z określonymi poniżej zasadami.


  • Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha \} , jest formula, to Parser nie mógł rozpoznać (błąd składni): {\displaystyle (\alpha) \} , jest formułą.
  • Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha \} , jest formula, to Parser nie mógł rozpoznać (błąd składni): {\displaystyle \neg\alpha \} , jest formułą.
  • Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha \} , i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \beta \} , są formułami, to:
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha\land\beta \} , jest formułą,
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha\lor\beta \} , jest formułą,
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha\rightarrow\beta \} , jest formułą,
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha\leftrightarrow\beta \} , jest formułą.
  • Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \alpha \} , jest formula i Parser nie mógł rozpoznać (błąd składni): {\displaystyle x \} , jest symbolem zmiennej, to
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle (\forall x)\alpha \} , jest formułą,
    • Parser nie mógł rozpoznać (błąd składni): {\displaystyle (\exists x)\alpha \} , jest formułą.