|
ŚFiNiA ŚFiNiA - Światopoglądowe, Filozoficzne, Naukowe i Artystyczne forum - bez cenzury, regulamin promuje racjonalną i rzeczową dyskusję i ułatwia ucinanie demagogii. Forum założone przez Wuja Zbója.
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Nie 16:55, 12 Paź 2014 Temat postu: |
|
|
fiklit napisał: | Fragment zaznaczony na niebiesko nie mówi nic o problemie "linii D" w implikacji KRZ.
Co do IF a operator równoważności - w dalszym ciągu nie podałeś jednej jednoznacznej i poprawnej definicji operatora. Ja kojarzę coś w stylu "operator to cztery linie tabeli". Dla mnie "if" nie bardzo wygląda na linie tabeli. Zacznij pisać normalnie a nie swoim bełkotliwym slangiem. |
Czy twierdzenie Pitagorasa wypowiedziane w naturalnej logice człowieka to bełkotliwy slang?
Twierdzenie Pitagorasa:
Trójkąt jest prostokątny wtedy i tylko wtedy gdy zachodzi suma kwadratów
TP<=>SK = (TP=>SK)*(~TP=>~SK)
Jeśli zgadzasz się iż prawa strona w twierdzeniu Pitagorasa to definicja równoważności, to pozostaje wyjaśnić czym są zapisy z prawej strony.
Warunek wystarczający TP=>SK w logice dodatniej (bo SK).
A.
Jeśli trójkąt jest prostokątny to na pewno => zachodzi suma kwadratów
TP=>SK =1
Bycie trójkątem prostokątnym jest warunkiem wystarczającym => aby zachodziła suma kwadratów
Prawdziwość warunku wystarczającego A wymusza fałszywość kontrprzykładu B.
B.
Jeśli trójkąt jest prostokątny to może ~~> nie zachodzić suma kwadratów
TP~~>~SK =0
Zachodzi też odwrotnie, czyli prawdziwość kontrprzykładu B wymusza fałszywość warunku wystarczającego A
… a jeśli trójkąt nie jest prostokątny?
Załóżmy że jeszcze nie wiemy iż twierdzenie Pitagorasa to równoważność.
W poprawnej matematyce możemy założyć COKOLWIEK!
Zakładamy zatem, że to jest implikacja prosta i badamy czy spełniony jest warunek konieczny ~> w definicji implikacji prostej.
C1.
Jeśli trójkąt nie jest prostokątny to może ~> nie zachodzić suma kwadratów
~TP~>~SK =1
Definicja warunku koniecznego ~> jest tu spełniona bo prawo Kubusia:
C1: ~TP~>~SK = A:TP=>SK
Prawa strona jest prawdą, zatem z lewej strony musi zachodzić warunek konieczny ~>
… i teraz UWAGA!
Jeśli twierdzenie Pitagorasa rzeczywiście jest implikacją to musi być prawdziwy kontrprzykład dla zdania C1 wypowiedzianego w formie C.
C.
Jeśli trójkąt nie jest prostokątny to na pewno => nie zachodzi suma kwadratów
~TP=>~SK =?
Kontrprzykład D dla twierdzenia C to zdanie ze spójnikiem może ~~> i zanegowanym następnikiem:
D.
Jeśli trójkąt nie jest prostokątny to może ~~> zachodzić suma kwadratów
~TP~~>SK = ~TP*SK =0
bo zbiory ~TP i SK są rozłączne
Fałszywość kontrprzykładu D wymusza prawdziwość warunku wystarczającego C.
~TP=>~SK =1
Matematycznie oba zdania C1 i C są prawdziwe.
Jednak to nie jest implikacja, bo w implikacji musi być prawdziwe zdanie D.
To jest ten problem z linią D!
Oczywistym jest że fałszywość kontrprzykładu D wymusza prawdziwość warunku wystarczającego C.
Wniosek:
Twierdzenie Pitagorasa to ewidentna równoważność o definicji:
TP<=>SK = (TP=>SK)*(~TP=>~SK)
Twierdzenie Pitagorasa byłoby implikacją wtedy i tylko wtedy gdybyśmy udowodnili prawdziwość zdania D ... co jest fizycznie niemożliwe!
Wracając do tematu …
Rozważmy instrukcję warunkową:
if W then A else B
Dla każdego programisty jest oczywistością że:
A.
Jeśli zajdzie warunek W (W=1) to na pewno => nastąpi skok do adresu A
W=>A =1
C1.
Jeśli zajdzie warunek ~W (~W=1) to na pewno => nastąpi skok do adresu B
~W=>B =1
Dla każdego programisty jest oczywistością że musi być:
B = ~A
Bowiem gdyby adresy A i B były identyczne to instrukcja warunkowa przestaje być instrukcją warunkową.
Ulega redukcji do instrukcji skoku bezwarunkowego:
GOTO A=B
Stąd nasze zdanie C1 przybiera postać:
C.
Jeśli zajdzie warunek ~W (~W=1) to na pewno => nastąpi skok do adresu ~A
~W=>~A =1
Definicja równoważności w równaniu algebry Boole’a:
p<=>q = (p=>q)*(~p=>~q)
Doskonale widać, ze prawa strona to nasza instrukcja warunkowa:
W<=>A = (W=>A)*(~W=>~A)
Prawo algebry Boole’a:
p<=>q = ~p<=>~q
Stąd mamy:
~W<=>~A = (~W=>~A)*(W=>A)
Stąd mamy dwa zdania które sam napisałeś:
fiklit napisał: | W przypadku wykonania instrukcji "if W then A else B", przejście do bloku A następuje WTW gdy W, a do bloku B WTW gdy ~W. |
Chwila prawdy dla logiki matematycznej Ziemian
Sprawdzian dla początkujących programistów, po wykładzie na temat działania instrukcji warunkowej „if W then A else B”
Zadanie:
Dana jest instrukcja warunkowa:
if W then A else B
Określ prawdziwość/fałszywość poniższych zdań:
1.
Nastąpi przejście do bloku A wtedy i tylko wtedy gdy zajdzie warunek W
A<=>W =?
co matematycznie oznacza:
A=1 <=> W=1
prawdziwe/fałszywe
2.
Nastąpi przejście do bloku B wtedy i tylko wtedy gdy zajdzie warunek ~W
B<=>~W =?
co matematycznie oznacza:
B=1 <=> ~W=1
prawdziwe/fałszywe
3.
Jeśli spełniony zostanie warunek W to na pewno => wykonany zostanie blok A
W=>A =?
co matematycznie oznacza:
W=1 => A=1
prawdziwe/ fałszywe
4.
Jeśli spełniony zostanie warunek ~W to na pewno => wykonany zostanie blok B
~W=>B =?
co matematycznie oznacza:
~W=1 => B=1
prawdziwe/fałszywe
5.
Czy adres bloku A może być tożsamy z adresem B?
TAK/NIE
Uzasadnij odpowiedź.
Czy wolno nauczycielowi zadać pytania jak wyżej sprawdzające znajomość działania instrukcji warunkowej „if W then A else B”?
Jeśli nie wolno bo to jest slang, to jak powinny być sformułowane pytania sprawdzające?
Zauważmy, że wszystkie te zdania to naturalna logika człowieka, algebra Kubusia.
Twierdzenie:
Nie istnieje człowiek, który by miał problemy z określeniem prawdziwości/fałszywości powyższych zdań.
Ostatnio zmieniony przez rafal3006 dnia Nie 17:18, 12 Paź 2014, w całości zmieniany 4 razy
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Nie 19:31, 12 Paź 2014 Temat postu: |
|
|
Cytat: | D.
Jeśli trójkąt nie jest prostokątny to może ~~> zachodzić suma kwadratów
~TP~~>SK = ~TP*SK =0
bo zbiory ~TP i SK są rozłączne
Fałszywość kontrprzykładu D wymusza prawdziwość warunku wystarczającego C.
~TP=>~SK =1
Matematycznie oba zdania C1 i C są prawdziwe.
Jednak to nie jest implikacja, bo w implikacji musi być prawdziwe zdanie D.
To jest ten problem z linią D!
Oczywistym jest że fałszywość kontrprzykładu D wymusza prawdziwość warunku wystarczającego C.
|
Piszesz o implikacji w AK, co dalej nie wyjaśnia związku "linii D" z implikacją KRZ. Jest jakiś?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Pon 21:44, 13 Paź 2014 Temat postu: |
|
|
Fiklicie, odpowiem za chwilę ...
Wychodzą mi fantastyczne rzeczy, pod warunkiem że zdołam ludzkość przekonać iż instrukcja warunkowa "if W then A else B" w dowolnym języku programowania to nic innego jak operator równoważności!
Z tego powodu zamieszczam fragment ciekawej dyskusji z zefciem z wiara.pl.
[link widoczny dla zalogowanych]
zefciu napisał: |
Co ciekawe - w Pythonie mamy następujące definicje operatorów "or" i "and":
a or b zdefiniowany jest jako if a then a else b
a and b zdefiniowany jest jako if a then b else a |
zefciu napisał: | rafal3006 napisał: |
Operatory OR i AND nie są instrukcjami warunkowymi! | A gdzie ja misiu kochany pisałem, że są jakimikolwiek instrukcjami. Napisałem, że można je sprowadzić do wyrażeń warunkowych. I wskazałem, jak to uczyniono w Pythonie. Jeśli uważasz, że jest tam błąd, to go wskaż.
|
Oczywiście że sprzętowo, dysponując wyłącznie bramką implikacji prostej albo odwrotnej możesz zbudować dowolny inny operator.
Tylko że to jest sprzęt a nie programowanie. Budowę w języku programowania operatorów OR i AND z użyciem bramki implikacji prostej wymyślił jakiś debil.
Masz proste zdanie:
A.
Jutro pójdę do kina lub do teatru
Y=K+T
zrozumiałe dla każdego.
A twój debilny do potęgi nieskończonej pyton zamienia je na:
zefciu napisał: |
Co ciekawe - w Pythonie mamy następujące definicje operatorów "or" i "and":
a or b zdefiniowany jest jako if a then a else b
a and b zdefiniowany jest jako if a then b else a
|
B.
Jeśli jutro pójdę do kina to na pewno => pójdę do kina inaczej pójdę do teatru
C: K=>K = ~K+K =1
inaczej:
D: ~K=>T = K+T
Trzeba być debilem aby banalne zdanie A zamienić na debilizm B.
Poza tym popatrz:
Zdanie C to oczywisty bełkot - pomijamy
Natomiast lewa strona zdania D brzmi:
DA:
Jeśli jutro nie pójdę do kina to na pewno => pójdę do teatru
~K=>T = [~K*T] =1 - gwarancja matematyczna!
Nie pójście do kina jest warunkiem wystarczającym => aby iść do teatru
Kontrprzykład dla zdania DA brzmi:
DB:
Jeśli jutro nie pójdę do kina to mogę ~~> nie iść do teatru
~K~~>~T = [~K*~T] =0 - zakaz złamania gwarancji matematycznej DA
Oczywiście po stronie K może zajść cokolwiek, bo obietnica DA to z definicji implikacja prosta.
DC: K~>~T = [K*~T] =1
DD: K~~>T =[K* T]=1
Gdzie:
[….] - odpowiednik operacji na zbiorach z Nowej Teorii Zbiorów
Tabela symboliczna:
Kod: |
DA: ~K=> T =[~K* T] =1
DB: ~K~~>~T=[~K*~T] =0
DC: K~>~T =[ K*~T] =1
DD: K~~>T =[ K* T] =1
|
Zero jedynkowo, całość to jest definicja operatora OR ale wyłącznie dla punktu odniesienia:
Y = K+T
Prawo Prosiaczka:
(K=1)=(~K=0)
(T=1)=(~T=0)
Kodujemy tabelę symboliczną:
Kod: |
Tabela 1
| K T Y=K+T
DA: ~K=> T =[~K* T] =1 | 0+ 1 =1
DB: ~K~~>~T=[~K*~T] =0 | 0+ 0 =0
DC: K~> ~T=[ K*~T] =1 | 1+ 0 =1
DD: K~~>~T=[ K* T] =1 | 1+ 1 =1
|
Doskonale widać, że argumenty w operatorze OR są przemienne i tak musi być, inaczej wali się algebra Boole’a!
Nie ma tu absolutnie żadnej gwarancji matematycznej, fundamentu implikacji.
Natomiast w zdaniu DA mamy ustawiony punkt odniesienia na:
~K=>T
Prawa Prosiaczka:
(~K=1)=(K=0)
(T=1) = (~T=0)
Kodujemy tabelę symboliczną:
Kod: |
Tabela 2
| ~K T ~K=>T
DA: ~K=> T =[~K* T] =1 | 1=>1 =1
DB: ~K~~>~T=[~K*~T] =0 | 1=>0 =0
DC: K~>~T =[ K*~T] =1 | 0=>0 =1
DD: K~~>T =[ K* T] =1 | 0=>1 =1
|
Tu jak widzisz Zefciu argumenty nie są przemienne bo to jest FUNDAMENT implikacji, tak musi być inaczej wali się algebra Boole’a!
Tu jak widzisz Zefciu masz gwarancję matematyczną w linii DA = warunek wystarczający =>
Tabela 1 to fundamentalnie co innego niż tabela 2.
Tabela 1 to operator OR gdzie o żadnej gwarancji nie może być mowy:
Y=K+T
Natomiast tabela 2 to FUNDAMENTALNIE inny operator implikacji prostej, gdzie po stronie ~K masz gwarancję matematyczną:
~K=>T
Czy już widzisz fundamentalną różnicę miedzy operatorem OR (Y=p+q) a operatorem implikacji prostej p=>q?
Na razie tyle, skupmy się na jednej sroce.
zefciu napisał: |
rafal3006 napisał: | Instrukcja warunkowa:
if W (warunek) then A else B
To instrukcja rozejścia warunkowego w programie, napisał ci to Fiklit wyżej.
Nastąpi wykonanie bloku A=1 wtedy i tylko wtedy gdy W=1
Nastąpi wykonanie bloku B=1 wtedy i tylko wtedy gdy ~W=1
... a zobacz jak wygląda twoja bzdura:
if W then W else B
Czyli według fiklita i wszystkich normalnych programistów:
Nastąpi wykonanie bloku W=1 wtedy i tylko wtedy gdy spełniony zostanie warunek W=1
Nastąpi wykonanie bloku B=1 wtedy i tylko wtedy gdy spełniony zostanie warunek ~W=1
Drugie zdanie jest ok
Natomiast pierwsze to debilizm, bo jak można mylić warunek w instrukcji skoku warunkowego (np. wskaźnik przeniesienia CY) z blokiem instrukcji do wykonania?
To jest potworny debilizm!
Czy to takie trudne do ogarnięcia? |
Przecież tłukłem do tego zakutego łba już dwa razy, że to nie jest blok instrukcji, tylko wyrażenie |
Proponuję uspokoić dyskusję.
Instrukcja warunkowa jak sama nazwa wskazuje jest INSTRUKCJĄ!
Jest instrukcją zrozumiałą dla każdego programisty i oznacza co następuje:
if W then A else B
W tłumaczeniu na polski:
Jeśli zajdzie warunek W (np. X<Y) to musisz wykonać blok instrukcji A
Jeśli zajdzie warunek ~W (tu. X>=Y) to musisz wykonać blok instrukcji B
KONIEC!
To jest super jasne i precyzyjne zrozumiałe dla każdego.
Weźmy teraz wyrażenie zefcia:
if W then W else B
Poproszę Zefica o przetłumaczenie tego badziewia na polski.
Co to znaczy pierwsze W i co to znaczy drugie W bo z zapisu zrozumiałego dla każdego programisty wychodzi dokładnie to:
Jeśli zajdzie warunek W (np. X<Y) to musisz wykonać W ?!
Jeśli zajdzie warunek ~W (tu. X>=Y) to musisz wykonać blok instrukcji B
Czy widzisz jaka kompromitacja twórców pytona?
zefciu napisał: |
rafal3006 napisał: | Ta definicja to nic innego jak instrukcja warunkowa:
If (warunek p) then q else ~q | Nie instrukcja, tylko wyrażenie. Ale wyjątkowo masz rację. Tak można w pewnych językach zapisać równoważność.
|
Nie w "pewnych" tylko w absolutnie wszystkich od asemblera po dowolny język programowania.
Jeśli twierdzisz że jest inaczej to podaj kontrprzykład.
Instrukcja warunkowa „if W then A else B” występuje w kodzie programu i dotyczy kodu programu (jest programem), tak więc to jest instrukcja, żadne wyrażenie. Powoduje ona rozgałęzienie w programie zależne od warunku W i jest FUNDAMENTEM wszelkich języków programowania.
Zefciu, ty umiesz czytać ze zrozumieniem?
Napisałem:
If (warunek p) then q else ~q
… a ty bredzisz że to nie jest instrukcja?
Po pierwsze i najważniejsze: naucz się odróżniać instrukcję warunkową od czegokolwiek innego.
Jeśli napisałem że to jest instrukcja warunkowa zrozumiała dla każdego programisty- matoła to nie chrzań mi że to nie jest instrukcja bo zejdziesz poziom niżej
zefciu napisał: |
Ale wyjątkowo masz rację. Tak można w pewnych językach zapisać równoważność.
|
Co to znaczy wyjątkowo?
Zapis:
if p then q else ~q
Zawsze musi być odczytany jednoznacznie jako:
Jeśli zajdzie p to wykonaj blok instrukcji q
p=>q
Jeśli zajdzie ~p to wykonaj blok instrukcji ~q
~p=>~q
… a to jest oczywista równoważność:
p<=>q = (p=>q)*(~p=>~q)
cnd
zefciu napisał: |
Co ciekawe - w Pythonie mamy następujące definicje operatorów "or" i "and":
a or b zdefiniowany jest jako if a then a else b
a and b zdefiniowany jest jako if a then b else a |
zefciu napisał: | rafal3006 napisał: | W języku programowania budowę operatorów OR i AND z użyciem bramki implikacji prostej wymyślił jakiś debil. | Sam jesteś debil. Taka definicja tych operatorów jest uzasadniona i umożliwia uproszczenie notacji w przypadku wartości domyślnych. |
Operatory OR i AND mają tyle wspólnego z instrukcją warunkową, będąca ewidentną równoważnością co pies z kurą.
Zapis:
if p then q else ~q
to ewidentna instrukcja warunkowa:
Jeśli zajdzie p to wykonaj blok instrukcji q
p=>q =1
Jeśli zajdzie ~p wykonaj inny blok instrukcji, czyli blok różny od q (~q)
~p=>~q =1
Całość to oczywista równoważność:
p<=>q = (p=>q)*(~p=>~q)
Zapis w którym p jest tym samym co q:
if p then p else q
Jest ewidentnym idiotyzmem a nie instrukcją warunkową.
Z tego powodu ten zapis można rozumieć jak się chce np. u twórców pytona oznacza:
Y=p+q
Równie dobrze twórcy pytona mogli sobie zdefiniować operator OR tak:
bleble p kuku q
Jeśli przyjmą że to jest definicja operatora OR:
Y=p+q
to mogą se taki zapis używać a kompilator poprawnie to rozpozna jako:
Y=p+q
Ostatnio zmieniony przez rafal3006 dnia Pon 22:07, 13 Paź 2014, w całości zmieniany 4 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 1:23, 14 Paź 2014 Temat postu: |
|
|
[link widoczny dla zalogowanych]
Wykłady z algebry Kubusia
… z podziękowaniem dla Zefcia.
Temat:
Instrukcja warunkowa
Implikacje urojone
zefciu napisał: |
Cytat: | Rozważmy instrukcję warunkową:
if W then A else B
Dla każdego programisty jest oczywistością że:
A.
Jeśli zajdzie warunek W (W=1) to na pewno => nastąpi skok do adresu A
W=>A =1
C1.
Jeśli zajdzie warunek ~W (~W=1) to na pewno => nastąpi skok do adresu B
~W=>B =1
Dla każdego programisty jest oczywistością że musi być:
B = ~A |
Twoje nadużycie symbolu "=" jest przerażające. Weźmy zdanie "jeśli mam mięso w lodówce, to zróbmy sobie kotlety. W przeciwnym wypadku chodźmy na kebaba.
Według Ciebie wyrażenie "nie mam mięsa w lodówce" to jest to samo, co polecenie "chodźmy na kebaba". Mieszasz wyrażenia i polecenia i Ci wychodzą brednie. |
Warunek = mam mięso w lodówce
Jeśli mam mięso w lodówce to zróbmy sobie kotlety inaczej chodźmy na kebaba
if mięso w lodówce then zróbmy kotlety else chodźmy na kebaba
Tożsame instrukcje cząstkowe to:
if mieso (M) w ldówce then zróbmy kotlety
if brak mięsa w lodówce (~M) then chodźmy na kebaba
Oczywiście to „pójdziemy na kebaba” można tu zastąpić czymkolwiek np.
- pójdziemy do kina
- zaśpiewamy piosenkę
- podskoczymy trzy razy
etc
… dla matematyki to bez znaczenia.
Pierwsze zdanie jest ewidentną obietnicą która na mocy definicji jest implikacją prostą.
A.
Jeśli mam mięso w lodówce to zróbmy sobie kotlety
M=>KT =1
p=>q =1
Mięso w lodówce jest warunkiem wystarczającym => abyśmy zrobili kotlety
Prawdziwość warunku wystarczającego A wymusza fałszywość kontrprzykładu B.
B.
Jeśli mam mięso w lodówce to możemy nie zrobić kotletów
M~~>~KT =0 - zakaz łamania obietnicy A
p~~>~q=0
… a jeśli nie mam mięsa?
Na mocy definicji to jest implikacja prosta, stąd:
M=>KT = ~M~>~KT
C.
Jeśli nie mam mięsa w lodówce to możemy ~> nie zrobić kotletów
~M~>~K =1
~p~>~q =1
Brak mięsa w lodówce jest warunkiem koniecznym ~> abyśmy nie zrobili kotletów
Dlaczego?
Mama do Jasia:
Cholera nie ma mięsa, Jasiu skocz do Bidronki i kup mięso.
Jasiu po 15 min wraca z mięsem.
stąd:
D.
Jeśli nie mam mięsa w lodówce to możemy ~~> zrobić sobie kotlety
~M~~>K =1
~p~~>q =1
Oczywiście całość to implikacja prosta z ewidentnym „rzucaniem monetą” po stronie ~M.
…ale!
Dołożymy do tego kolejną obietnicę wynikającą z instrukcji warunkowej:
E.
Jeśli nie będzie mięsa w lodówce to chodźmy na kebaba
~M=>(KB=~KT) =1
~p=>~q =1
Brak mięsa w lodówce jest warunkiem wystarczającym => abyśmy poszli na kebaba, czyli rezygnujemy z kotletów (KB=~KT).
Kontrprzykład dla zdania E to zdanie F.
F.
Jeśli nie będzie mięsa w lodówce to możemy ~~> nie iść na kebaba
~M~~>(~KB=KT) =0 - złamanie gwarancji matematycznej E
~p~~>q =0
… na mocy definicji zdanie E to obietnica (=implikacja prosta), mamy zatem:
~M=>(KB=~KT) = M~>(~KB=KT)
G.
Jeśli będzie mięso w lodówce to możemy ~> nie jeść kebaba
M~>(~KB=KT) =1
p~>q =1
Mięso w lodówce jest warunkiem koniecznym ~>, abyśmy nie jedli kebaba
lub
H.
Jeśli będzie mięso w lodówce to możemy ~~> jeść kebaba
M~~>(KB=~KT) =1
p~~>~q =1
Zauważmy że zdanie H jest tu sprzeczne z obietnicą A, jednak iloczyn logiczny w instrukcji warunkowej wytnie nam to zdanie co zobaczymy za chwilę.
Przyjmujemy sztywny punktu odniesienia zgodnie ze zdaniem A.
A: M=>K =1
p = mięso
q = kotlety
Jednoczesne złożenie obietnic A i E to iloczyn logiczny funkcji:
(p=>q)*(~p=>~q)
co jest oczywistą równoważnością:
p<=>q = (p=>q)*(~p=>~q)
Jak poprawnie złożyć w postaci iloczynu logicznego zdania A i E?
Kod: |
Tabela 1
A: p=>q =1 |
B: p~~>~q=0 |
C:~p~>~q =1 |E:~p=>~q =1
D:~p~~>q =1 |F:~p~~>q =0
1 2 3 4 5 6
|
Jest oczywistym, że druga obietnica (po stronie ~p) dotyczy tego co musimy zrobić w punkcie C, czyli musi być zapisana dokładnie jak wyżej.
Zdania G i H musimy umieścić w obszarze AB456, czyli tylko i wyłącznie tak.
Kod: |
Tabela 2
A: p=>q =1 |G: p~> q =1
B: p~~>~q=0 |H: p~~>~q=1
C:~p~>~q =1 |E:~p=>~q =1
D:~p~~>q =1 |F:~p~~>q =0
1 2 3 4 5 6
|
Funkcja jaką otrzymamy po wymnożeniu logicznym:
(p=>q)*(~p=>~q)
to oczywiście równoważność o definicji symbolicznej w obszarze ABCD789 niżej.
Kod: |
Tabela 3
A: p=>q =1 |G: p~> q =1 |A: p=>q =1 |RA:p<=>q=(p=>q)*(~p=>~q)
B: p~~>~q=0 |H: p~~>~q=1 |B: p~~>~q=0
C:~p~>~q =1 |E:~p=>~q =1 |E:~p=>~q =1 |RC:~p<=>~q=(~p=>~q)*(p=>q)
D:~p~~>q =1 |F:~p~~>q =0 |F:~p~~>q =0
1 2 3 4 5 6 7 8 9
|
Kodowanie równoważności symbolicznej z obszaru BCD789.
Dla kodowania zgodnego ze zdaniem RA otrzymujemy zero-jedynkową definicję równoważności w logice dodatniej (bo q):
RA: p<=>q
Prawa Prosiaczka:
(p=1)=(~p=0)
(q=1)=( ~q=1)
Dla kodowania zgodnego ze zdaniem RC otrzymujemy zero-jedynkową definicję równoważności w logice dodatniej (bo q):
C: ~p<=>~q
Prawa Prosiaczka:
(~p=1)=(p=0)
(~q=1)=(q=1)
Kod: |
Tabela 4
Definicja symboliczna |Definicja |Definicja
|zero-jedynkowa |zero-jedynkowa
|dla RA:p<=>q |dla RC:~p<=>~q
RA: p<=>q | p q p<=>q | ~p ~q ~p<=>~q
A: p=> q =[ p* q] =1 | 1<=> 1 =1 | 0<=> 0 =1
B: p~~>~q=[ p*~q] =0 | 1<=> 0 =0 | 0<=> 1 =0
RC: ~p<=>~q | |
C:~p=>~q =[~p*~q] =1 | 0<=> 0 =1 | 1<=> 1 =1
D:~p~~>q =[~p* q] =0 | 0<=> 1 =0 | 1<=> 0 =0
1 2 a b 3 4 5 6 7 8 9 |
Tożsamość kolumn wynikowych 6 i 9 jest dowodem formalny prawa algebry Boole’a:
R1: p<=>q = ~p<=>~q
W przełożeniu na naszą instrukcję warunkową:
if mięso w lodówce then zróbmy kotlety else chodźmy na kebaba
Mamy!
Zrobimy kotlety wtedy i tylko wtedy gdy jest mięso w lodówce
KT<=>M = (KT=>M)*(~KT=>~M)
Pójdziemy na kebaba (KB=~KT) wtedy i tylko wtedy gdy nie ma mięsa w lodówce
~KT<=>~M = (~KT=>~M)*(KT=>M)
Doskonale widać, że w tej instrukcji warunkowej o wszystkim decyduje człowiek.
Jednak zawsze zachodzi poniższa tożsamość jeśli instrukcja warunkowa jest spełniona w 100%:
Instrukcja warunkowa = operator równoważności
Zauważmy że w świecie niezależnym od człowieka czyli w matematyce i przyrodzie nie ma tak lekko.
Tu wszystko jest niezależne od chciejstwa człowieka.
if pada then są chmury else nie ma chmur
Instrukcje cząstkowe są tu następujące:
if pada then są chmury
P=>CH =1
if nie pada to nie ma chmur
~P=>~CH =0
Drugie zdanie jest fałszywe, dlatego nie uzyskamy tu równoważności.
P<=>CH = (P=>CH)*(~P=>~CH) = 1*0 =0
W równoważności niezależnej od człowieka mamy:
if trójkąt prostokątny then suma kwadratów else nie suma kwadratów
Instrukcje cząstkowe są tu następujące:
if trójkąt prostokątny then suma kwadratów
TP=>SK =1
if nie trójkąt prostokątny then nie suma kwadratów
~TP=>~SK =1
Stąd mamy bezpośrednio definicję symboliczną równoważności:
Kod: |
A: TP=> SK =1
B: TP~~>~SK=0
C:~TP=> ~SK=1
D:~TP~~> SK=0
|
Oczywiście można się tu bawić w implikacje urojone niedostępne w naszym wszechświecie w sposób analogiczny do obietnic gdzie wszystko zależy od człowieka co analizowaliśmy wyżej.
Równoważność z uwzględnieniem implikacji urojonych będzie tu następująca.
A.
Jeśli trójkąt jest prostokątny to na pewno => zachodzi suma kwadratów
TP=>SK = [TP*SK=TP] =1
p=>q =1
Definicja warunku wystarczającego => spełniona bo zbiór TP zawiera się w zbiorze SK
Warunek wystarczający A wymusza fałszywość kontrprzykładu B
B.
Jeśli trójkąt jest prostokątny to może ~~> nie zachodzić suma kwadratów
TP~~>~SK = [TP*~SK] =0
p~~>~q =0
bo zbiory TP i ~SK są rozłączne
… a jeśli trójkąt nie jest prostokątny?
W implikacji urojonej również obowiązuje prawo Kubusia:
TP=>SK = ~TP~>~SK
C.
Jeśli trójkąt nie jest prostokątny to może ~> nie zachodzić suma kwadratów
~TP~>~SK = [~TP*~SK = ~SK] =1
~p~>~q =1
Definicja warunku koniecznego ~> spełniona bo zbiór ~TP zawiera w sobie zbiór ~SK
Oczywistość z powodu tożsamości zbiorów TP=SK która wymusza tożsamość zbiorów ~TP=~SK
Na mocy definicji implikacji w zdaniu D mamy jedynkę.
D.
Jeśli trójkąt nie jest prostokątny to może ~~> zachodzić suma kwadratów
~TP~~>SK = ~TP*SK =1
~p~~>q =1
Oczywiście ta jedynka jest jedynką urojoną niedostępną w naszym wszechświecie, stad całość nazywamy implikacją urojoną
Dla każdego normalnego matematyka jest oczywistością iż w naszym wszechświecie w zdaniu D wyżej musi być ZERO!
Stąd mamy następujący warunek wystarczający prawdziwy.
E.
Jeśli trójkąt nie jest prostokątny to na na pewno nie zachodzi suma kwadratów
~TP=>~SK = [~TP*~SK=~TP] =1
~p=>~q =1
Warunek wystarczający => spełniony bo zbiór ~TP zawiera się w zbiorze ~SK
Prawdziwość zdania E wymusza fałszywość kontrprzykładu F.
F.
Jeśli trójkąt nie jest prostokątny to może ~~> zachodzić suma kwadratów
~TP~~>SK = [~TP*SK] =0
~p~~>q =0
bo zbiory ~TP i SK są rozłączne
… a jeśli trójkąt jest prostokątny?
Tu również możemy się bawić w implikacje urojone gdzie zachodzi prawo Kubusia:
~TP=>~SK = TP=>SK
G.
Jeśli trójkąt jest prostokątny to może ~> zachodzić suma kwadratów
TP~>SK = [TP*SK=SK] =1
p~>q =1
Definicja warunku koniecznego spełniona bo zbiór TP zawiera w sobie zbiór SK
Oczywistość z powodu tożsamości zbiorów P=SK
Na mocy definicji implikacji w zdaniu H mamy tu jedynkę.
H.
Jeśli trójkąt jest prostokątny to może ~~> nie zachodzić suma kwadratów
TP~~>~SK = [TP*~SK] =1
p~~>~q =1
Oczywiście ta jedynka jest jedynką urojoną niedostępną w naszym wszechświecie, stad całość nazywamy implikacją urojoną
Dla każdego normalnego matematyka jest oczywistością iż w naszym wszechświecie w zdaniu H wyżej musi być ZERO!
Przypomnijmy naszą instrukcję warunkową:
if trójkąt prostokątny then suma kwadratów else nie suma kwadratów
Instrukcje cząstkowe są tu następujące:
if trójkąt prostokątny then suma kwadratów
TP=>SK =1
if nie trójkąt prostokątny then nie suma kwadratów
~TP=>~SK =1
Jak poprawnie złożyć w postaci iloczynu logicznego zdania A i E?
Kod: |
Tabela 5
A: p=>q =1 |
B: p~~>~q=0 |
C:~p~>~q =1 |E:~p=>~q =1
D:~p~~>q =1 |F:~p~~>q =0
1 2 3 4 5 6
|
Jest oczywistym, że warunek wystarczający E: ~p=>~q dotyczy tego co musi zachodzić w naszym wszechświecie w punkcie C, czyli musi być zapisany dokładnie jak wyżej.
Zdania G i H musimy umieścić w obszarze AB456, czyli tylko i wyłącznie tak.
Kod: |
Tabela 6
A: p=>q =1 |G: p~> q =1
B: p~~>~q=0 |H: p~~>~q=1
C:~p~>~q =1 |E:~p=>~q =1
D:~p~~>q =1 |F:~p~~>q =0
1 2 3 4 5 6
|
Funkcja jaką otrzymamy po wymnożeniu logicznym:
(p=>q)*(~p=>~q)
to oczywiście równoważność o definicji symbolicznej w obszarze ABCD789 niżej.
Kod: |
Tabela 7
A: p=>q =1 |G: p~> q =1 |A: p=>q =1 |RA:p<=>q=(p=>q)*(~p=>~q)
B: p~~>~q=0 |H: p~~>~q=1 |B: p~~>~q=0
C:~p~>~q =1 |E:~p=>~q =1 |E:~p=>~q =1 |RC:~p<=>~q=(~p=>~q)*(p=>q)
D:~p~~>q =1 |F:~p~~>q =0 |F:~p~~>q =0
1 2 3 4 5 6 7 8 9
|
Kodowanie równoważności symbolicznej z obszaru BCD789.
Dla kodowania zgodnego ze zdaniem RA otrzymujemy zero-jedynkową definicję równoważności w logice dodatniej (bo q):
RA: p<=>q
Prawa Prosiaczka:
(p=1)=(~p=0)
(q=1)=( ~q=1)
Dla kodowania zgodnego ze zdaniem RC otrzymujemy zero-jedynkową definicję równoważności w logice dodatniej (bo q):
C: ~p<=>~q
Prawa Prosiaczka:
(~p=1)=(p=0)
(~q=1)=(q=1)
Kod: |
Tabela 8
Definicja symboliczna |Definicja |Definicja
|zero-jedynkowa |zero-jedynkowa
|dla RA:p<=>q |dla RC:~p<=>~q
RA: p<=>q | p q p<=>q | ~p ~q ~p<=>~q
A: p=> q =[ p* q] =1 | 1<=> 1 =1 | 0<=> 0 =1
B: p~~>~q=[ p*~q] =0 | 1<=> 0 =0 | 0<=> 1 =0
RC: ~p<=>~q | |
C:~p=>~q =[~p*~q] =1 | 0<=> 0 =1 | 1<=> 1 =1
D:~p~~>q =[~p* q] =0 | 0<=> 1 =0 | 1<=> 0 =0
1 2 a b 3 4 5 6 7 8 9 |
Tożsamość kolumn wynikowych 6 i 9 jest dowodem formalny prawa algebry Boole’a:
R1: p<=>q = ~p<=>~q
W przełożeniu na naszą instrukcję warunkową:
if trójkąt prostokątny then suma kwadratów else nie suma kwadratów
Mamy!
Trójkąt jest prostokątny wtedy i tylko wtedy gdy zachodzi suma kwadratów
TP<=>SK = (TP=>SK)*(~TP=>~SK) =1*1 =1
Trójkąt nie jest prostokątny wtedy i tylko wtedy gdy nie zachodzi suma kwadratów
~TP<=>~SK = (~TP=>~SK)*(TP=>SK)
Podsumowanie:
1.
Instrukcja warunkowa:
if p then q else ~q
to zawsze równoważność o definicji:
p<=>q = (p=>q)*(~p=>~q)
~p<=>~q = (~p=>~q)*(p=>q)
która może być prawdziwa niezależnie od tego czy mamy do czynienia ze światem żywym (np. człowiek) czy też ze światem martwym np. matematyka.
Przykłady wyżej.
2.
Definicja:
Implikacja urojona to implikacja wchodząca w skład równoważności
3.
W implikacji rzeczywistej nigdy nie zachodzi przemienność argumentów.
W implikacji urojonej będącej częścią równoważności zawsze zachodzi przemienność argumentów.
Ostatnio zmieniony przez rafal3006 dnia Wto 8:11, 14 Paź 2014, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 8:06, 14 Paź 2014 Temat postu: |
|
|
[link widoczny dla zalogowanych]
zefciu napisał: |
rafal3006 napisał: |
if W then W else Z
Poproszę Zefica o przetłumaczenie tego badziewia na polski. | Wyrażenie, które przyjmuje wartość W, gdy W jest prawdziwe, a w przeciwnym wypadku - wartość Z.
Naprawdę nie wiedziałeś o istnieniu wyrażeń warunkowych (w C - operator ?? Od razu widać, że w życiu nie napisałeś linijki działającego kodu. |
Co to znaczy że W jest prawdziwe?
Weźmy ten twój przykład:
Jeśli jest mięso w lodówce to robimy kotlety inaczej idziemy na kebab
Każdy to zdanie zakoduje w postaci instrukcji warunkowej tak:
if mięso w lodówce then robimy kotlety else idziemy na kebab
Natomiast twój popitolony pyton tłumaczy to zdanie tak:
if mięso w lodówce then mięso w lodówce else kebab
to co wyżej jest matematycznie bez sensu.
Tłumaczymy na polski:
Jeśli mamy mięso w lodówce to mamy mięso w lodówce inaczej idziemy na kebab
Gdzie ty tu widzisz operator OR?
To jest bełkot a nie operator OR.
Tłumaczenie na polski:
Otwieramy lodówkę i stwierdzamy mięso w lodówce.
... i co dalej po tym epokowym odkryciu?
Otwieramy lodówkę i stwierdzamy brak mięsa zatem idziemy na kebab
... a gdzie się podziały te twoje kotlety?
Zauważ, że całość redukuje ci się do zdania:
Jeśli nie mamy mięsa w lodówce to idziemy na kebab
~M=>KB
Co jest zdaniem fundamentalnie innym które wypowiedziałeś:
if mięso w lodówce then robimy kotlety else idziemy na kebab
To jest idiotyzm a nie matematyka:
[link widoczny dla zalogowanych]
Matematycy to gatunek Francuzów: mówisz coś do nich, a oni przekładają to na swój język i proszę: robi się z tego coś zupełnie innego.
Autor: Johann Wolfgang von Goethe
Sens ma przykład który sam zapisałeś:
if mieso w lodówce then robimy kotlety else idziemy na kebab
zefciu napisał: |
rafal3006 napisał: |
Czy widzisz jaka kompromitacja twórców pytona? | Jakie to dziwne, że OpenStack działa, a "Kompuś" nie działa |
Działa bo notacja jest jednoznaczna.
To jest instrukcja warunkowa:
if p then q else ~q
To nie jest instrukcja warunkowa:
if p then p else q
To jest idiotyzm a nie instrukcja warunkowa
Dokładnie z tego powodu ten zapis możemy sobie zdefiniować jak się komu podoba np.
Y=p+q
Kolejny idiotyzm a nie instrukcja warunkowa to:
if p then q else p
Pod ten zapis również możemy podstawić co się komu podoba.
Y=p*q
Oczywiście jak w kompilatorze zamienisz to miejscami to także ten twój OpenStack będzie działał bo będzie miał jednoznacznie zdefiniowane funkcje:
Y=p+q
Y=p*q
Równie dobrze twórcy pytona operatory OR i AND mogliby zdefiniować tak:
bleble p kuku q
Y=p+q
kuku q bleble p
Y=p*q
Każdy kompilator tak zdefiniowane OR i AND przetłumaczy poprawnie i też będzie działał.
Ostatnio zmieniony przez rafal3006 dnia Wto 8:40, 14 Paź 2014, w całości zmieniany 5 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 9:09, 14 Paź 2014 Temat postu: |
|
|
Rafał: kolejna rzecz której nie rozumiesz ale krytykujesz.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 11:32, 14 Paź 2014 Temat postu: |
|
|
Fiklicie od 35 lat programuje non-stop w asemblerze. W początkach komputerów na studiach napisałem deasembler CPM-a (poprzedni DOS-a) który z kodu maszynowego odtworzył kod źródłowy.
... tak wiec zarzuty że czegoś nie rozumiem nie są trafione.
[link widoczny dla zalogowanych]
zefciu napisał: |
Cytat: | Natomiast twój popitolony pyton tłumaczy to zdanie tak:
if mięso w lodówce to mięso w lodówce inaczej kebeb
|
Nie. Nie tak tłumaczy.
A.
Weźmy takie zdanie "weź dziennie tyle tabletek, ile lekarz zalecił, lub 3".
Czyli:
B.
Jeśli lekarz zalecił ileś tabletek, to weź ileś tabletek
Jeśli lekarz nie zalecił Ci konkretnej liczby, to weź 3 tabletki dziennie
|
Jeśli nie tak tłumaczy to jak ten twój zakichany pyton przetłumaczy twoje zdanie z poprzedniego postu:
if mieso w lodówce then robimy kotlety else idziemy na kebab
Czekam na rozpisanie tego zdania na zdania cząstkowe!
„Weźmy takie zdanie "weź dziennie tyle tabletek, ile lekarz zalecił, lub 3".”
.. ale gdzie tu jest operator OR bo nie widzę?
… co tu robi to „lub”?
Twoje zdanie:
"weź dziennie tyle tabletek ile lekarz zalecił lub weź 3 tabletki".
Definicja spójnika „lub”:
p+q = p*q + p*~q + ~p*q
Założmy że:
p1 = lekarz zalecił 1 tabletkę
q3 = 3 tabeletki
p1+P3 = p1*P3 lub ~p1*P3 lub p1*~p3
co matematycznie oznacza:
(p1+p3) =1 <=> (p1*P3)=1 lub (~p1*P3)=1 lub (p1*~p3)=1
Oczywiście:
(p1*p3) =0
… ale kogo dalej pacjent ma słuchać?
Jakiegoś domorosłego znachora czy lekarza?
… a jak te trzy tabletki spowodują śmierć to kto za to będzie odpowiadał?
Jak widzisz Zefciu spójnik „lub” który użyłeś jest tu idiotyzmem.
Zauważ że sam rozwinąłeś ten twój idiotyzm ze spójnikiem „lub” poprawnie:
B.
Jeśli lekarz zalecił ileś tabletek, to weź ileś tabletek
Jeśli lekarz nie zalecił Ci konkretnej liczby, to weź 3 tabletki dziennie
Twoje zdanie precyzyjnie wygląda tak:
Weź dziennie tyle tabletek ile zalecił lekarz, inaczej weź Y
if LZ then X else Y
Rozwijamy na zdania cząstkowe:
if LZ then X
if ~LZ then Y
W tłumaczeniu na polski:
Warunek wystarczający = zalecenie lekarza
A.
Jeśli lekarz zalecił X tabletek dziennie to weź X
LZ=>X
zalecenie lekarza jest warunkiem wystarczającym aby wziąć X tabletek
Warunek wystarczający A wymusza fałszywość kontrprzykładu B.
B.
Jeśli lekarz zalecił X tabletek to możesz wziąć ~X tabletek?
LZ~~>~X =0
… a jeśli lekarz nie zalecił?
Warunek wystarczający = zalecenie z ulotki leku
C.
Jeśli lekarz nic nie zalecił to weź Y tabletek
~LZ=> Y
Brak zalecenia lekarza jest warunkiem wystarczającym => aby wziąć Y tabletek (dawkowanie typowe z ulotki)
Prawdziwość warunku wystarczającego C wymusza fałszywość kontrprzykładu D
D.
Jeśli lekarz nic nie zalecił to mogę ~~> dawkować inaczej niż w ulotce
~LZ~~>~Y =0
W tym przypadku mamy do czynienia z dwoma warunkami wystarczającymi które mogą istnieć samodzielnie.
Nie jest to równoważność bo może zajść:
X=Y
potencjalne zalecenie lekarza X tabletek może pokryć się z ulotką Y tabletek
Nie zmienia to faktu że zdanie:
if LZ then X else Y
jest INSTRUKCJĄ postępowania, czyli odpowiednikiem program komputerowego
Totalnie bez sensu jest zdanie:
if 1 then 1 else 3
Bo jaka jest prawdziwość/fałszywość warunku W instrukcji warunkowej :
if W then X else Y
czyli pytam jaka jest prawdziwość fałszywość cyfry 1 występującej po if?
zefciu napisał: |
rafal3006 napisał: | Jeśli nie tak tłumaczy to jak ten twój zakichany pyton przetłumaczy twoje zdanie z poprzedniego postu:
if mieso w lodówce then robimy kotlety else idziemy na kebab | Nijak. Po prostu wykona jedno albo drugie polecenie. Bo to nie jest wyrażenie. To że Ty nie odróżniasz wyrażenia od polecenia, to nie moja i nie Guido wina. |
… ale kiedy wykona jedno, a kiedy drugie?
Dlaczego uważasz że dowolnej instrukcji warunkowej:
if W then A else B
nie wolno rozpisać na instrukcje cząstkowe, równoważne?
if W then A
if ~W then B
Warunki W i ~W są tu absolutnie kluczowe
zefciu napisał: |
Cytat: | co tu robi to „lub”? | Stoi i się irytuje Twoją wiedzoodpornością. |
… czyli kwestionujesz definicję spójnika „lub”(+)?
p+q = p*q + p*~q + ~p*q
?!
zefciu napisał: |
Cytat: | Nie zmienia to faktu że zdanie:
if LZ then X else Y
jest INSTRUKCJĄ postępowania, czyli odpowiednikiem program komputerowego | Zależy. W haskellu jest to wyrażenie. W C - blok instrukcji. |
Nie zależy absolutnie od niczego, w wyrażeniu:
if W then A else B
“Warunek W musi być zmienną np. wskaźnik CY z operacji odejmowania”
Jeśli warunek W jest stałą (np. cyfra 1 w twoim przykładzie wyżej) to nie ma żadnej instrukcji warunkowej bo nie ma rozejścia warunkowego - pozostaje matematyczny idiotyzm.
zefciu napisał: |
To gdzie można pobrać Kompusia? |
Algorytm masz w pierwszym poście tematu „Kompuś …”.
Nie zamierzam przekładać tego algorytmu na program z dwóch powodów:
1.
Jak ludzkość nie zrozumie i nie zaakceptuje algebry Kubusia to wszystko jest bez znaczenia, niech się dalej babrze w gównie typu:
Jeśli Kubuś jest Kurą to Zefciu zna się na logice
2.
Jeśli ludzie zrozumieją i zaakceptują to mutacji Kompusia powstanie tysiące
P.S.
Zefciu,
Zdanie podobne do twoich tabletek.
Twierdzenie Pitagorsa:
if TP then SK else ~SK
... no i co z tego ze zbiory TP=SK są tożsame?
Czy możesz zapisać tak?
if TP then TP else ~SK
Rozwijamy:
if TP then TP
if ~TP then ~SK
?!
Ostatnio zmieniony przez rafal3006 dnia Wto 12:15, 14 Paź 2014, w całości zmieniany 3 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 12:19, 14 Paź 2014 Temat postu: |
|
|
....
Ostatnio zmieniony przez rafal3006 dnia Wto 12:23, 14 Paź 2014, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 12:20, 14 Paź 2014 Temat postu: |
|
|
zefciu napisał: |
Cytat: | … czyli kwestionujesz definicję spójnika „lub”(+)?
p+q = p*q + p*~q + ~p*q | Ta "definicja" prowadzi do nieskończonej rekurencji. Nie jest to więc definicja, a po prostu przekształcenie. |
To poproszę o dowód.
To jest definicja doskonale znana każdemu 5-cio latkowi!
Więc co ty bredzisz Zefciu?
zefciu napisał: |
Cytat: | Nie zależy absolutnie od niczego | Różne języki mają różną semantykę. Od razu widać, że nie napisałeś w życiu linijki działającego kodu. |
Mają ale we wszystkich występuje INSTRUKCJA warunkowa:
if W then A else B
absolutnie jednoznaczna dla każdego programisty z rozwinięciem:
if W then A
if ~W then B
Na razie nie podałeś kontrprzykładu iż instrukcja warunkowa może być czymkolwiek innym niż instrukcją warunkową.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 12:52, 14 Paź 2014 Temat postu: |
|
|
Rafał to widać, że jeśli coś programowałeś, to nie był to żaden język wyższego poziomu.
Cytat: | Mają ale we wszystkich występuje INSTRUKCJA warunkowa:
if W then A else B
absolutnie jednoznaczna dla każdego programisty z rozwinięciem:
if W then A
if ~W then B |
1. Kontrprzykład, który chciałeś: w Hskellu nie ma INSTRUKCJI warunkowej.
2. Twoje rozwinięcie jest błędne. Np. w prostym języku jakim jest C:
if (i++ == 4) costam1 else costam2;
wcale nie przekłada sie na
if (i++ == 4) costam1;
if (!(i++ == 4)) costam2;
Cytat: | p+q = p*q + p*~q + ~p*q
To poproszę o dowód. |
Do zdefiniowania "+" używasz "+". "idem per idem" - coś Ci to mówi?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 16:25, 14 Paź 2014 Temat postu: |
|
|
...
Ostatnio zmieniony przez rafal3006 dnia Wto 16:29, 14 Paź 2014, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 16:26, 14 Paź 2014 Temat postu: |
|
|
[link widoczny dla zalogowanych]
zefciu napisał: |
rafal3006 napisał: | Oj, zefciu zefciu, to równanie to po prostu zapis tabeli zero-jedynkowej operatora OR w równaniu algebry Boole'a | Wiem. Ale zapis wykonany w taki sposób, że zrozumie go tylko ten, co już wie, co oznacza ten operator. Tymczasem celem definicji jest wyjaśnienie pojęcia komuś, kto tego pojęcia nie zna. |
Najgorszym możliwym wyjaśnieniem to wyjmowanie debilnych tabelek zero-jedynkowych … z których ziemskim matematykom wychodzą takie brednie jak:
„z fałszu wynika wszystko”
Czy myślisz że Boole’a odkryłby to co odkrył gdyby nie jego naturalna logika człowieka?
… a dlaczego nie można wytłumaczyć tego w I klasie szkoły podstawowej tak?
Jutro pójdę do kina i do teatru
Y=K*T
co to znaczy drogie dzieci?
Jaś:
To znaczy że dotrzymam słowa (Y=1) wtedy i tylko wtedy gdy jutro pójdę do kina (K=1) i do teatru (T=1)
… kiedy skłamiesz Jasiu?
Jaś:
Skłamię we wszystkich pozostałych przypadkach (możliwych przeczeniach), czyli:
Skłamię (~Y=1) wtedy i tylko wtedy gdy:
~K*~T =1*1 =1 - nie pójdę do kina i nie pójdę do teatru
lub
~K*T = 1*1 =1 - nie pójdę do kina i pójdę do teatru
lub
K*~T = 1*1 =1 - pójdę do kina i nie pójdę do teatru
Stąd mamy:
~Y = ~K*~T + ~K*T + K*~T
Funkcje logiczne Y i ~Y zapisane jedna pod drugą to SYMBOLICZNA definicja operatora AND:
Kod: |
Dotrzymam słowa (Y)
A: K* T = Y
;Skłamię (~Y)
B:~K*~T =~Y
C:~K* T =~Y
D: K*~T =~Y
|
Dla kodowania zgodnego ze zdaniem A otrzymujemy zero-jedynkową tabelę operatora AND.
A: K*T =Y
Prawo Prosiaczka:
(K=1) = (~K=1)
(T=1)=(T=0)
(Y=1) =(~Y=0)
Stąd otrzymujemy tabelę zero-jedynkową operatora AND:
Kod: |
Definicja symboliczna |Definicja zero-jedynkowa
operatora AND |operatora AND
|Dla punktu odniesienia Y=K*T
Dotrzymam słowa (Y) | K T Y=K*T
A: K* T = Y | 1* 1 =1
;Skłamię (~Y)
B:~K*~T =~Y | 0* 0 =0
C:~K* T =~Y | 0* 1 =0
D: K*~T =~Y | 1* 0 =0
|
Oczywistym jest że naturalna logika człowieka to definicje symboliczne wszystkich operatorów logicznych o których Ziemianie nie mają najmniejszego pojęcia.
Największym skandalem logiki Ziemian jest fakt, że nie zna ona absolutnie genialnych praw Prosiaczka, dzięki którym możemy sobie wędrować z definicji symbolicznej do definicji zero-jedynowej i odwrotnie.
Ciekawe kiedy Ziemianie się opamiętają i zaczną myśleć matematycznie, także w matematyce, absolutnie naturalną logiką człowieka - bo to jest JEDYNA poprawna logika matematyczna.
Wszelkie logiki formalne znane ziemianom z definicji są sprzeczne z naturalną logika człowieka - ich miejsce jest w piekle, na wiecznych piekielnych mękach.
Co widzisz Zefciu w takim podejściu do logiki matematycznej?
Czyli zawsze, przy tłumaczeniu logiki matematycznej wędrujemy od definicji symbolicznych operatorów logicznych w 100% zgodnych z naturalną logiką człowieka do tabel zero-jedynkowych.
Pytanie:
Po kiego grzyba generować tabele zero-jedynkowe skoro w definicjach symbolicznych gdzie wszystkie zmienne mamy sprowadzone do jedynek nie ma żadnej tabeli zero-jedynkowej?
Oczywistym jest że można uprawiać logika matematyczną na poziomie definicji symbolicznych (równań algebry Boole’a) wykopując wszelkie tabele zero-jedynkowe w kosmos.
Dokładnie zgodnie z ta ideą powstanie wkrótce „Algebra Kubusia dla Liceum”, bo po kiego grzyba katować dzieciaków sprzętową algebrą Boole’a, czyli tabelami zero-jedynkowymi - to jest absolutnie zbędne!
zefciu napisał: |
Cytat: | To podaj kontr przykład gdzie zapis:
if W then A else B
jest wyrażeniem a nie instrukcją warunkową - na razie nie podałeś. | Łżesz, podałem - haskell. |
Jak napisał Fiklit w haskellu nie ma instrukcji warunkowych, czy naprawdę wierzysz że można napisać choćby najmniejszy program komputerowy bez instrukcji warunkowych?
Weźmy taki prymityw:
Badasz programem zmienną o nazwie ALARM.
Działanie:
Alarm =1 - dzwoń po policję
Alarm =0 - nic nie rób
W asemblerze Z80 ten program wygląda tak:
Alarm:
IN A,(PA) - odczytaj port A
RRCA ;Ustaw CY=b0
JP NC,Alarm ;Jeśli CY=0 to ignoruj
CALL Dzwoń :Jeśli CY=1 - alarm się włączył
JP Alarm
Jak napiszesz ten program bez instrukcji warunkowej to kasuję AK.
Z faktu że w jakimś tam języku wysokiego poziomu nie ma instrukcji warunkowych nie oznacza że nie wstawia ich kompilator programu haskella.
Poza tym napisanie kompilatora haskell jest ABSOLUTNIE możliwe bez użycia instrukcji warunkowych.
Dowód:
Zabieram z dowolnego mikroprocesora wszystkie instrukcje warunkowe, zostawiając wyłącznie instrukcje podstawienia (bo tyle zostanie) a ty mi napisz choćby program Alarm wyżej.
Ja nie wiem jak można takich banałów nie rozumieć?
zefciu napisał: |
Cytat: | ... a kto twierdził wyżej że zapis:
if p then p else q
jest operatorem OR? | Ja twierdziłem, że ten zapis rozumiany jako wyrażenie warunkowe jest tożsamy operatorowi OR. |
… no to daję ci przykład przedszkolaka wyżej.
Jutro pójdziemy do kina lub do teatru
Y=K+T
… a ty mi zapisz tym swoim zakichanym pytonem, przy użyciu zdefiniowanych w nim operatorów OR i AND kiedy jutro dotrzymam słowa a kiedy skłamię.
Przypominam definicje z pytona które podałeś:
zefciu napisał: |
Co ciekawe - w Pythonie mamy następujące definicje operatorów "or" i "and":
a or b zdefiniowany jest jako if a then a else b
a and b zdefiniowany jest jako if a then b else a |
Pośmiejmy się zefciu razem:
AK:
A.
Dotrzymam słowa (Y=1) wtedy i tylko wtedy gdy jutro pójdę do kina (K=1) lub do teatru (T=1)
Y = K+T
… a kiedy skłamię?
Przejście do logiki ujemnej:
~Y=~K*~T
B.
Skłamię (~Y=1) wtedy i tylko wtedy gdy jutro nie pójdę do kina (~K=1) lub nie pójdę do teatru (~T=1)
~Y=~K*~T
Poproszę o przetłumaczenie zdań wyżej zrozumiałych dla każdego 5-cio latka na twój zakichany język pytona?
… i odpowiedź na pytanie który Ziemianin zrozumie co napisałeś?
Ostatnio zmieniony przez rafal3006 dnia Wto 16:54, 14 Paź 2014, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 16:49, 14 Paź 2014 Temat postu: |
|
|
fiklit napisał: | Rafał to widać, że jeśli coś programowałeś, to nie był to żaden język wyższego poziomu.
Cytat: | Mają ale we wszystkich występuje INSTRUKCJA warunkowa:
if W then A else B
absolutnie jednoznaczna dla każdego programisty z rozwinięciem:
if W then A
if ~W then B |
1. Kontrprzykład, który chciałeś: w Hskellu nie ma INSTRUKCJI warunkowej.
2. Twoje rozwinięcie jest błędne. Np. w prostym języku jakim jest C:
if (i++ == 4) costam1 else costam2;
wcale nie przekłada sie na
if (i++ == 4) costam1;
if (!(i++ == 4)) costam2;
Cytat: | p+q = p*q + p*~q + ~p*q
To poproszę o dowód. |
Do zdefiniowania "+" używasz "+". "idem per idem" - coś Ci to mówi? |
Zgadza się programuję wyłącznie w języku asemblera stąd wiem co mikroprocesor może a czego nie może. Ja nie wiem jak można pieprzyć że instrukcje warunkowe są zbędne w języku programowania - haskell.
Język asemblera to ferrari wśród języków gdzie dostępne są wszelkie właściwości sprzętu i programowania, gdzie nie ma absolutnie żadnych ograniczeń, stawianych przez języki wysokiego poziomu.
Język wysokiego poziomu pozwala robić ci wyłącznie to co autorowi języka wydaje się że powinieneś był robić
Haskell i definicja operatora OR wyjaśniłem w poście dla Zefcia wyżej.
Co do programu w C.
Twierdzenie:
Dowolny program napisany w dowolnym języku wysokiego poziomu można napisać w asemblerze, odwrotnie nie zachodzi.
Twierdzenie:
Każdy program napisany w języku wysokiego poziomu tłumaczony jest przez translator na kod maszynowy, czyli de facto na język asemblera.
Jak kompilator przetłumaczy twój program na kod maszynowy?
W języku asemblera Z80 będzie to tak:
Start:
A=A+1
CP A,4 ;porównaj zmienną A z liczbą 4
;To co niżej można zapisać w postaci instrukcji warunkowej
JP Z, cośtam1 ;Skocz gdy A=4
cośtam2 ;A #4
JP start
Cośtam1:
Blok instrukcji
JP Start ;Skocz do start
;to co niżej zapisane w postaci instrukcji warunkowej
if A=4 then cośtam1 else cośtam2
goto START
Oczywisty zapis tożsamy:
if A=4 then cośtam1
if A#4 then cośtam2
Goto Start
… i się dało!
Podsumowując:
Dowolne sztuczki programowe można zapisać w asemblerze wyłącznie przy pomocy instrukcji warunkowych o definicji:
If W then A else B
Tłumaczonej na instrukcje cząstkowe:
if W then A
if ~W then B
Ostatnio zmieniony przez rafal3006 dnia Wto 17:04, 14 Paź 2014, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 17:30, 14 Paź 2014 Temat postu: |
|
|
Dlaczego nie wolno do programu komputerowego wstawiać bramek logicznych?
Weźmy instrukcję warunkową:
if p then q else ~q
zapis tożsamy:
if p then q
p=>q
if ~p then ~q
~p=>~q
Całość to oczywista równoważność:
p<=>q = (p=>q)*(~p=>~q)
Prawo eliminacji równoważności rodem z debilnej do potęgi nieskończonej logiki matematycznej Ziemian.
p<=>q = p*q + ~p*~q
W instrukcji warunkowej wyżej p to warunek rozejścia = cyfra binarna!
Natomiast q i ~q to adresy bloków instrukcji do których należy skoczyć.
Złote gacie dla tego (za Macjanem) który wykona operacje logiczne:
p*q
albo ~p*~q
Czy już widać jak debilna jest logika „matematyczna” Ziemian?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 18:08, 14 Paź 2014 Temat postu: |
|
|
1. Haskell nie ma instrukcji if. Kompilator haskella jest napisany w haskellu.
Jak to możliwe?
2.
w wyniku wykonania
"if (i++ == 4) costam1 else costam2; "
zmienna i zostanie zwiększona o 1.
w wyniku wkonania:
if (i++ == 4) costam1;
if (!(i++ == 4)) costam2;
i zostanie zwiększona o 2.
To jest duża różnica.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 19:00, 14 Paź 2014 Temat postu: |
|
|
fiklit napisał: |
1. Haskell nie ma instrukcji if. Kompilator haskella jest napisany w haskellu.
Jak to możliwe? |
Nie jest to możliwe!
Dowód:
Wywalam z mikroprocesora wszelkie możliwe instrukcje warunkowe i zostawiając wyłącznie instrukcje podstawienia. Pewne jest że nie napiszesz żadnego sensownego programu.
Ja to wiem na poziomie asemblera - haskell mnie nie interesuje.
Jeśli twierdzisz że to możliwe to pokaż mi jeden mikroprocesor w którym nie ma ani jednej instrukcji warunkowej - nie ma takiego i nigdy nie będzie.
fiklit napisał: |
2.
w wyniku wykonania
"if (i++ == 4) costam1 else costam2; "
zmienna i zostanie zwiększona o 1.
w wyniku wkonania:
if (i++ == 4) costam1;
if (!(i++ == 4)) costam2;
i zostanie zwiększona o 2.
To jest duża różnica. |
Problem w tym że nie czujesz jak twoja instrukcja jest wykonywania w kodzie maszynowym, w języku asemblera.
Nie masz racji w poniższym przypadku po wykonaniu instrukcji warunkowej:
"if (i++ == 4) costam1 else costam2; "
Zostanie zwiększona o 1 a nie o 2.
Dowód:
Jak kompilator przetłumaczy twój program na kod maszynowy?
W języku asemblera Z80 będzie to tak:
Start:
i=i+1
CP i,4 ;porównaj zmienną i z liczbą 4
;porównanie CP to operacja odejmowania z ustawieniem wskaźnika zera Z bez zmiany zmiennej i
;To co niżej można zapisać w postaci instrukcji warunkowej
JP Z, cośtam1 ;Skocz gdy wskaźnik zera Z=1, co oznacza i=4
;tu program wejdzie gdy i#4
cośtam2 ;i #4
Blok instrukcji
JP start ;Skocz do start
;tu program przejdzie gdy i=4
Cośtam1:
Blok instrukcji
JP Start ;Skocz do start
;Wytłuszczone zapisane w postaci instrukcji warunkowej
if i=4 then cośtam1 else cośtam2
goto START
Oczywisty zapis tożsamy:
if i=4 then cośtam1
if i#4 then cośtam2
Goto Start
… i się dało!
Kluczowe jest tu twierdzenie:
Dowolnie złożoną instrukcję warunkową w języku wysokiego poziomu można zapisać w asemblerze wyłącznie przy pomocy instrukcji warunkowych typu:
if W then A else B
Gdzie instrukcje cząstkowe tożsame to:
if W then A
if ~W then B
Przykład wyżej.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 19:17, 14 Paź 2014 Temat postu: |
|
|
jest różnica między ++i a i++;
Co do Twojego assemblera
- nie sądzę aby "i=i+1" było poprawne
- tak naprawdę tworzysz jakąś pętlę (jp/goto start - na końcu) - to ma się nijak do mojego przykladu.
napisałem
"if (i++ == 4) costam1 else costam2; " zwiększy o 1;
"if (i++ == 4) costam1; if (!(i++ == 4)) costam2; " zwiększy o 2;
a ty mi piszesz
Cytat: | Nie masz racji w poniższym przypadku po wykonaniu instrukcji warunkowej:
"if (i++ == 4) costam1 else costam2; "
Zostanie zwiększona o 1 a nie o 2. |
O co ci chodzi?
Co do haskella - widzisz - nie nie wiesz - ale się wypowiadasz. Jest to możliwe i tak jest. Nie ma najmniejszego znaczenia do czego zostanie taki program skompilowany. W jezyku Haskell nie ma instrukcji warunkowej. Tyle. Jeśli uważasz, że jest to znajdź ją.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 20:11, 14 Paź 2014 Temat postu: |
|
|
fiklit napisał: |
jest różnica między ++i a i++;
Co do Twojego assemblera
- nie sądzę aby "i=i+1" było poprawne
- tak naprawdę tworzysz jakąś pętlę (jp/goto start - na końcu) - to ma się nijak do mojego przykladu.
napisałem
"if (i++ == 4) costam1 else costam2; " zwiększy o 1;
"if (i++ == 4) costam1; if (!(i++ == 4)) costam2; " zwiększy o 2;
a ty mi piszesz
|
Nie znam C, więc ten kierunek nie ma sensu.
… ale zapisz ten twój przykład w dowolnym asemblerze, może być w i8086 (też znam), pewne jest że się da i pewne jest że musisz tu użyć instrukcji warunkowej typu:
if p then q else ~q
której tożsame rozwinięcie jest takie:
if p then q
if ~p then ~q
Na poziomie asemblera żadna inna instrukcja poza powyższą nie wchodzi w rachubę!
fiklit napisał: |
Co do haskella - widzisz - nie nie wiesz - ale się wypowiadasz. Jest to możliwe i tak jest. Nie ma najmniejszego znaczenia do czego zostanie taki program skompilowany. W jezyku Haskell nie ma instrukcji warunkowej. Tyle. Jeśli uważasz, że jest to znajdź ją. |
Czy to jest jakiś abstrakcyjny kompilator czy rzeczywiście istniejący.
Bo jeśli rzeczywiście istniejący i wszelkie instrukcje warunkowe są zbędne, to pokaż mi jeden jedyny mikroprocesor który nie zawiera żadnej instrukcji warunkowej - nie ma takiego i nigdy nie będzie, to absolutnie pewne, wiec mówienie ze instrukcje warunkowe są zbędne moim zdaniem jest bez sensu.
Gdyby twierdzenie o zbędności instrukcji warunkowych było prawdziwe to na 100% procesory bez takowych by istniały, a na 100% nie istnieją.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 20:20, 14 Paź 2014 Temat postu: |
|
|
http://www.sfinia.fora.pl/forum-kubusia,12/kompus-program-ktory-mysli-jak-czlowiek-fiklit-c-v,7220-125.html#217076
rafal3006 napisał: | Dlaczego nie wolno do programu komputerowego wstawiać bramek logicznych?
Weźmy instrukcję warunkową:
if p then q else ~q
zapis tożsamy:
if p then q
p=>q
if ~p then ~q
~p=>~q
Całość to oczywista równoważność:
p<=>q = (p=>q)*(~p=>~q)
Prawo eliminacji równoważności rodem z debilnej do potęgi nieskończonej logiki matematycznej Ziemian.
p<=>q = p*q + ~p*~q
W instrukcji warunkowej wyżej p to warunek rozejścia = cyfra binarna!
Natomiast q i ~q to adresy bloków instrukcji do których należy skoczyć.
Złote gacie dla tego (za Macjanem) który wykona operacje logiczne:
p*q
albo ~p*~q
Czy już widać jak debilna jest logika „matematyczna” Ziemian? |
Tu przyznaje się do błędu.
Oczywiście ma sens to równanie:
p<=>q = p*q + ~p*~q
Oczywiście p to warunek rozejścia = cyfra binarna
q i ~q to adresy bloków instrukcji do których skacze procesor
Weźmy:
p=1, czyli ~p=0
Dla tego warunku nasze równanie przyjmuje postać:
p<=>q = p*q + ~p*~q = 1*q + 0*~q = q - program skacze do adresu q
Weźmy drugi i ostatni możliwy przypadek:
~p=1, czyli p=0
Dla tego warunku nasze równanie przyjmuje postać:
p<=>q = p*q + ~p*~q = 0*q + 1*~q = ~q - program skacze do adresu ~q
Porównajmy to z klasyką równoważności, twierdzeniem Pitagorasa:
TP<=>SK = TP*SK + ~TP*~SK
załóżmy że wylosowaliśmy:
TP=1 czyli ~TP=0
Nasze równanie przyjmuje postać:
TP<=>SK = TP*SK + ~TP*~SK = 1*SK + 0*~SK = SK - prawdziwe dzięki TP
załóżmy że wylosowaliśmy:
~TP=1 czyli TP=0
TP<=>SK = TP*SK + ~TP*~SK = 0*SK + 1*~SK = ~SK - prawdziwe dzięki ~TP
Wniosek:
Jeśli wylosujemy TP to:
TP*SK =1
~TP*~SK =0
Jeśli wylosujemy ~TP to:
TP*SK=0
~TP*~SK =1
czyli:
Nie jest możliwe, aby oba człony w równaniu:
TP<=>SK = TP*SK + ~TP*~SK
były prawdziwe jednocześnie.
Jeśli TP*SK jest prawdziwe to ~TP*~SK jest fałszywe i odwrotnie.
W przełożeniu na klasyczną definicję równoważności mamy:
TP<=>SK = (TP=>SK)*(~TP=>~SK) = 1*1 =1
tu również nie jest możliwe, aby oba człony były prawdziwe jednocześnie.
Co zatem oznaczają te jedynki:
1*1 =1
Te jedynki oznaczają zdania zawsze prawdziwe:
A: TP=>SK =1
To jest zdanie zawsze prawdziwe, ale wyłącznie dla trójkątów prostokątnych!
Oznacza to że logika matematyczna Ziemian popełnia błąd czysto matematyczny rozpatrując w równaniu A także trójkąty nie prostokątne.
Oczywistym jest że dla trójkątów nie prostokątnych zdanie:
TP=>SK
jest zdaniem fałszywym, zatem przestaje być zawsze prawdziwe!
Analogicznie mamy w przypadku drugiego członu w definicji równoważności:
C: ~TP=>~SK =1
To jest zdanie zawsze prawdziwe, ale wyłącznie dla trójkątów nie prostokątnych!
Oznacza to że logika matematyczna Ziemian popełnia błąd czysto matematyczny rozpatrując w równaniu C także trójkąty prostokątne.
Oczywistym jest że dla trójkątów prostokątnych zdanie:
~TP=>~SK
jest zdaniem fałszywym, zatem przestaje być zawsze prawdziwe!
Wniosek:
Logika Ziemian jest do bani
cnd
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 21:03, 14 Paź 2014 Temat postu: |
|
|
Widzisz masz małe obycie w językach programowania, i zupełnie sobie nie wyobrażasz, że mogą opierać się na zupełnie innych założeniach. Poczytaj sobie o językach nieimperatywnych. Poczytaj sobie o różnicy między instrukcją a wyrażeniem. Poczytaj sobie o efektach ubocznych.
Nie przeczę, że wykonanie programu w haskellu skutkuje ostatnie wykonaniem kodu maszynowego. Do tego programy mogą być kompilowane do kodu natywnego i wtedy faktycznie można się pokusić o stwierdzenie że jakaś instrukcja skoku warunkowego w assemblerze odpowiada jakiejś konstrukcji z programu wysokiego poziomu. Ale wiele języków jest interpretowanych, lub kompilowanych do kodu pośredniego - wtedy nie znajdziesz już jednoznacznego powiązania między wykonywaną instrukcją maszynową a konkretną konstrukcją wysokiego poziomu.
Haskell rzeczywiście istnieje i nie ma instrukcji warunkowej (jeszcze raz: poczytaj i zrozum różnicę między instrukcją warunkową a wyrażeniem warunkowym).
if W then S1 else S2
na assembler przekłada się raczej tak
;obliczenie W, wynik w ACC
JZ else
;kod wykonujący S1
JMP endif
else:
;kod wykonujący S2
endif:
Natomiast "if W then S1"
;oblicznie W
JZ endif
;kod wykonujący S1
endif:
W przypadku "if (i++ == 4) costam1 else costam2;"
obliczanie warunku (w tym postinkrementacja zmiennej i) wykonywane jest raz.
Natomiast w przypadku, który twoim błędnym zdaniem jest równoważny
"if (i++ == 4) costam1; if (!(i++ == 4)) costam2;"
Obliczenie warunku następuje dwa razy. I "i" jest postinkrementowane dwa razy.
Dla wyjaśnienia postinkremetacja "i++" powoduje zwrócenie dotychczasowej wartości zmiennej i oraz zwiększnie zmiennej o 1.
i=4;
x=i++;
//w tym miejscu i==5, x==4;
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 21:08, 14 Paź 2014 Temat postu: |
|
|
Mógłbyś nie nazywać swojej matematyki - matematyką klasyczną - prowadzi to sporych nieporozumień.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 21:31, 14 Paź 2014 Temat postu: |
|
|
Jak wyżej wspomniałem napisałem w czasach studenckich deasembler tworzący kod źródłowy z kodu maszynowego CPM-a (poprzednika DOS-a) - oczywiście był to kod źródłowy w języku asemblera.
Co z tego że projektanci haskella ukryli przed programistą nawet wszystkie skoki warunkowe.
Jestem pewien że kod maszynowy programu napisanego w haskell zawiera bo musi zawierać całą masę skoków warunkowych o definicji:
If p then q else ~q
Jak zrealizujesz choćby głupie mnożenie dwóch liczb bez instrukcji warunkowych?
To jest po prostu fizycznie niemożliwe.
Sam fakt że piszesz:
2.45*1345.45 =?
generuje procedurę z całą masą instrukcji warunkowych, bez znaczenia jest że są one niewidoczne dla programisty w haskellu.
Algebra Boole'a i algebra Kubusia o których mówimy, to wyłącznie język asemblera.
... a tu absolutnie wszystkie instrukcje warunkowe da się sprowadzić do postaci:
if p then q else ~q
z tożsamym rozwinięciem:
if p then q
p=>q
if ~p then ~q
~p=>~q
p<=>q = (p=>q)*(~p=>~q)
... nawet jeśli w asemblerze stosujemy różne sztuczki.
Chodzi mi tylko i wyłącznie o to byś zaakceptował iż instrukcje warunkowe dokładnie jak wyżej istnieją, nic więcej. Nie musisz mieć świadomości że dowolny program napisany w dowolnym języku wysokiego poziomu da się sprowadzić do takich własnie instrukcji warunkowych - ja mam taką świadomość.
Do czego mi to jest potrzebne?
Do programowej interpretacji podstawowych operatorów logicznych:
- równoważność (masz wyżej)
- implikacja prosta
- implikacja odwrotna
- operator chaosu
Nie jest prawdą że tych operatorów nie da się zrealizować programowo.
Da się!
Ostatnio zmieniony przez rafal3006 dnia Wto 21:51, 14 Paź 2014, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Taz
Dołączył: 29 Mar 2012
Posty: 471
Przeczytał: 0 tematów
Skąd: Warszawa Płeć: Mężczyzna
|
Wysłany: Wto 21:52, 14 Paź 2014 Temat postu: |
|
|
rafal3006 napisał: | Czy to jest jakiś abstrakcyjny kompilator czy rzeczywiście istniejący. |
Jasne, że rzeczywiście istniejący. Nawet Ci pisałem jakiś przykład w Haskellu, o tutaj: http://www.sfinia.fora.pl/forum-kubusia,12/pytania-dla-kubusia-fiklit-civ,7143-575.html#212140
I dam Ci podpowiedź, jak pogodzić to, co pisze Fiklit z Twoją wiedzą - zapoznaj się z pojęciami "instrukcji" i wyrażenia" (a następnie przeproś i przestań się upierać, że jesteś wszechwiedzący - ta część jest opcjonalna, ale byłaby mile widziana).
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
fiklit
Dołączył: 24 Wrz 2012
Posty: 4197
Przeczytał: 0 tematów
Płeć: Mężczyzna
|
Wysłany: Wto 21:53, 14 Paź 2014 Temat postu: |
|
|
Rafał, ja napisałem kilka kompilatorów, jeden assembler, jeden deassebler. Uwierz mi, że ass i deass to pestka przy kompilatorze.
Widzę, że o programowaniu tez się z tobą nie da porozmawiać, bełkoczesz:
np. "całą masę skoków warunkowych o definicji: If p then q else ~q ", co to znaczy?
Skok warunkowy to np jz jnz itp. if p then ... else ... to juz inna bajka, raczej instrukcja lub wyrażenie warunkowe.
Cytat: |
Sam fakt że piszesz:
2.45*1345.45 =?
generuje procedurę z całą masą instrukcji warunkowych, bez znaczenia jest że są one niewidoczne dla programisty w haskellu. |
Bzdura kompletna. No może się tak zdarzyć w kompilatorze pisanym przez 2 tygodnie na 2. roku informatyki. Normalnie taki kod zostanie zastąpiony po prostu przez 3296.3525.
"Chodzi mi tylko i wyłącznie o to byś zaakceptował iż instrukcje warunkowe istnieją, nic więce".
Akceptuję to. Oczywiście, że istnieją. Ale nie we wszystkich językach programowania. Nie są niezbędne. Do tego w zauważ, że w assembleże nie masz if warunek then cośtam else costam.
Masz jedynie skoki dla ograniczonego zestawu warunków, np. zero w akumulatorze. Nie masz "else". musisz to sobie sam poskładac. obliczyć W itp. Więc nie truj że masz if then else. Nie masz. Możesz sobie zbudować. Tak jak możesz sobie zbudowac obiekty w C. ale ich nie masz.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rafal3006
Opiekun Forum Kubusia
Dołączył: 30 Kwi 2006
Posty: 35368
Przeczytał: 20 tematów
Skąd: z innego Wszechświata Płeć: Mężczyzna
|
Wysłany: Wto 21:59, 14 Paź 2014 Temat postu: |
|
|
fiklit napisał: | Mógłbyś nie nazywać swojej matematyki - matematyką klasyczną - prowadzi to sporych nieporozumień. |
... i tak wszystkie definicje tych samych pojęć mamy fundamentalnie różne i dotyczy to wszystkiego z nową teoria zbiorów na czele.
Przykładowo:
Czy muszę kwantyfikator duży którego definicję mamy "identyczną" nazywac inaczej?
/\x p(x)=>q(x)
z "małym" wyjątkiem:
AK - iterujemy wyłącznie po p(x)
Matematyka klasyczna:
iterujemy po p(x) i ~p(x)
Tu nie ma sensu inna nazwa mimo że definicje mamy inne.
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|