Gyakorlati alapok

A De Morgan-azonosságok bizonyítása Java-konzolon

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

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:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

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:

 

www.informatika-programozas.hu - Igazságtábla

www.informatika-programozas.hu - Igazságtábla

 

Majd nézzük meg az összes lehetséges kimenetelt:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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

 

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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