Gyakorlati alapok
A De Morgan-azonosságok bizonyítása Java-konzolon
Augustus De Morgan (1806-1871) angol matematikus nevéhez fűződik az alábbi logikai állítás, amely alapvető tétel a matematikai logikában és a halmazelméletben:
nem(a és b) = (nem a) vagy (nem b)
nem(a vagy b) = (nem a) és (nem b)
Gyorsan írjuk át Java-szintaxisba:
!(a && b) == !a || !b
!(a || b) == !a && !b
Később látni fogjuk, hogy a Java-szintaxist tovább kell finomítanunk, másként rossz eredményeket fogunk kapni, lényegében tovább kell zárójeleznünk. A korrekt verzió a következő:
!(a && b) == (!a || !b)
!(a || b) == (!a && !b)
Ellentétben az elméleti (matematikai) bizonyítással (amelynek levezetésére egyébként nem volnék képes), a De Morgan-azonosságokat elég Java-konzolon lefuttatnunk, amely mozzanattal automatikusan feltételezzük: a Java nyelv olyan módon van megalkotva, hogy korrekt bemeneti adatok esetén korrekt kimeneti adatokat kapjunk.
(Ez alapjában véve evidens, de matematikai bizonyítás helyettesítésekor ehhez és hasonló gondolatok mindig felmerülnek.)
Ezután semmi más dolgunk nincs, mint az állítást bemeneti paraméterként belehelyezni egy System.out.println() függvénybe, amelyet ilyen módon vígan túlterhelhetünk (Ahol az elnevezésnek köze nincs a tartalomhoz: a metódus-túlterhelés című fejezet). Ám a várt eredményeket először igazságtáblában is megfogalmazhatjuk:
Majd nézzük meg az összes lehetséges kimenetelt:
public class Main {
public static void main(String[] args) {
boolean a = true;
boolean b = true;
System.out.println(!(a && b) == (!a || !b));
System.out.println(!(a || b) == (!a && !b));
}
}
Végeredmény:
true
true
public class Main {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(!(a && b) == (!a || !b));
System.out.println(!(a || b) == (!a && !b));
}
}
Végeredmény:
true
true
public class Main {
public static void main(String[] args) {
boolean a = false;
boolean b = true;
System.out.println(!(a && b) == (!a || !b));
System.out.println(!(a || b) == (!a && !b));
}
}
Végeredmény:
true
true
public class Main {
public static void main(String[] args) {
boolean a = false;
boolean b = false;
System.out.println(!(a && b) == (!a || !b));
System.out.println(!(a || b) == (!a && !b));
}
}
Végeredmény:
true
true