Vero-Funkcia Logiko por Hakistoj - Parto Unu llms.txt
Bob kaj Alice estas du hakistoj laborantaj sur enŝovita sistemo kun severa komputila limigo - estas miso en ilia malkostaj mikrokontrolilo igante OR-operaciojn signife pli malrapidaj ol ajnan alian operacion sur la ĉiparo.
Kiam ili profiladis sian micropython-kodon, ili trovis ke OR-operacioj estis ĝis 5-oble pli malrapidaj ol ajna alia operacio.
def authorize_access(request):
# Uzanto estas rifuzita se ili estas sur nigrlistio AŬ
# ilia konto estas eksvalidiĝinta
if (user_is_blacklisted(request.user_id) or
account_is_expired(request.account)
return "Access denied"
return "Access granted"
Ni prenu momenton por kompreni la problemon. La authorize_access
funkcio estas uzata por kontroli ĉu uzanto estas rajtigita aliri risurcον. La or
operacio estas uzata por kombini la kondiĉojn. Kiel ni povus reskribita ĉi tiun funkcion por eviti la OR-operacion?
Por komenci, ni rigardu la OR-operacion mem. OR estas iu ajn kazo kie aŭ A aŭ B estas vera (eble evidente). La nura fojo kiam OR estas FALSA estas kiam ambaŭ enigoj estas mem falsaj.
Ni povas esprimi ĉi tion en io nomata ver-tabelo.
Ver-tabelo estas logika tabelo uzata por determini la ver-valorojn de logikaj esprimoj bazitaj sur iliaj enigoj. Ĝi sisteme listigas ĉiujn eblajn kombinaĵojn de enig-valoroj kaj la respondan eligon por ĉiu kombinaĵo, permesante al ni vidigi kiel logikaj operacioj funkcias.
Plenigu ĉi tiun por montri kiuj kazoj OR estus veraj:
(Vi povas klaki sur la tabelo por ŝalti la nekonatajn valorojn)
P | or | Q |
---|---|---|
t | ? | t |
t | ? | f |
f | ? | t |
f | ? | f |
Ni prenu la tempon ankaŭ por diskuti iujn aliajn bazajn operatorojn kiujn Bob kaj Alice havas disponeblaj al ili - AND kaj NOT.
AND postulas AMBAŬ enigojn esti veraj por ke ĝi redonu veron.
P | and | Q |
---|---|---|
t | ? | t |
t | ? | f |
f | ? | t |
f | ? | f |
NOT simple “renversas” la ver-valoron de la enigo asignita al ĝi.
P | not P |
---|---|
t | ? |
f | ? |
Bob estas studento de ver-funkcia logiko, kio signifas ke li komprenas ke multaj logikaj deklardiroj estas ekvivalentaj. Estas multaj, multaj manieroj reskribita la authorize_access
funkcion sen devi uzi la OR-operacion entute.
En ver-funkcia logiko (TFL), logikaj operatoroj kiel AND, OR, kaj NOT povas esti espritaj laŭ unu la alia uzante logikajn ekvivalentecojn. Ĉi tiuj ekvivalentecoj estas deklaroj kiuj havas la saman ver-valoron en ĉiuj eblaj interpretoj.
Ekzemple, unu el la plej utilaj ekvivalentecoj estas la Leĝo de De Morgan, kiu diras:
- ¬(p ∨ q) ≡ (¬p ∧ ¬q)
- ¬(p ∧ q) ≡ (¬p ∨ ¬q)
La Leĝo de De Morgan, artikulita en ordinara Esperanto, asertas ke ne estas la kazo ke aŭ P aŭ Q estas ekvivalenta al la aserto ke ambaŭ P kaj Q ne estas veraj.
Ni esploru tion per ver-tabelo! Ĉi tio estos iom pli komplikita ol la antaŭaj, ĉar ni administras pli da operatoroj samtempe.
Por solvi ĉi tiun tabelon, ni laboros tra ĉiu kolumno paŝe:
- Komencu kun la bazaj ver-valoroj por P kaj Q (kolumnoj 1 kaj 2)
- Kalkulu ¬P per renversado de la ver-valoro de P (kolumno 3)
- Kalkulu ¬Q per renversado de la ver-valoro de Q (kolumno 4)
- Trovu P∨Q (OR) (kolumno 5)
- Memoru, (OR) estas vera se aŭ P aŭ Q estas Vera.
- Kalkulu ¬(P∨Q) per renversado de la valoroj en kolumno 5 (kolumno 6)
- Ĉar ni trovas NOT P aŭ Q
- Kalkulu ¬P∧¬Q (AND) - vera nur kiam ambaŭ ¬P kaj ¬Q estas veraj (kolumno 7)
- Memoru, (AND) estas vera nur se P aŭ Q estas AMBAŬ veraj.
P | Q | ¬P | ¬Q | P∨Q | ¬(P∨Q) | ¬P∧¬Q |
---|---|---|---|---|---|---|
t | t | ? | ? | ? | ? | ? |
t | f | ? | ? | ? | ? | ? |
f | t | ? | ? | ? | ? | ? |
f | f | ? | ? | ? | ? | ? |
Rimarku kiel kolumnoj 6 kaj 7 havas identajn valorojn? Ĉi tio signifas ke ili estas ekvivalentaj, montrante la Leĝon de De Morgan: ¬(P∨Q) ≡ ¬P∧¬Q
Uzante ĉi tiujn ekvivalentecojn, Bob kaj Alice reskribis sian funkcion:
def authorize_access(request):
# Logike ekvivalenta sed uzante nur NOT kaj AND operaciojn
if not (not user_is_blacklisted(request.user_id) and
not account_is_expired(request.account):
return "Access denied"
return "Access granted"
La reskribjita funkcio estas logike identa, kaj ni pruvis ĝin! Aldone ĝi rulaĵos signife pli rapide sur ilia aparataroj. Bob kaj Alice savis la tagon, kun via helpo.
Preter Aparataraj Limigoj: Aliaj Praktikaj Aplikoj
SQL-demandoj ofte implikas tre kompleksajn logikajn kondiĉojn. Kompreni ekvivalentecon povas kelkfoje fari demandojn pli optimumigitajn en kazoj kie certaj logikaj strukturoj prenas pli longajn demand-tempojn ol aliaj. Ekzemple:
SELECT * FROM transactions
WHERE NOT (customer_id = 101 AND transaction_date > '2023-01-01')
estas ekvivalenta al:
SELECT * FROM transactions
WHERE customer_id != 101 OR transaction_date <= '2023-01-01'
Kriptografio
Kriptografio ankaŭ estas kazo kie fortaj fundamentoj en logiko povas fari aŭ rompi realigon. En homomorfisma ĉifrado (kiu permesas komputadon sur ĉifrita datumaro), certaj operacioj estas pli efikaj ol aliaj pro la subkuŝantaj kriptografiaj strukturoj.
TFHE (Rapida Plene Homomorfisma Ĉifrado super la Toro) estas vaste uzata homomorfisma ĉifrad-biblioteko kie NAND-pordegoj estas signife pli rapidaj ol aliaj operacioj. En Microsoft-a SEAL-bibliotekan realigon de FHE, NAND-operacioj povas esti pli efikaj ol rektaj OR-operacioj.
Konsideru privatec-konservan voĉdon-rajtigo-sistemon kie voĉdant-datumoj estas ĉifritaj:
Originala Logiko:
def is_eligible_voter(encrypted_data):
# Voĉdanto estas rajtigita se ili estas civitano AŬ
# (ili estas konstanta loĝanto KAJ vivis ĉi tie 5+ jarojn)
eligibility = homomorphic_or(
encrypted_data.is_citizen(),
homomorphic_and(
encrypted_data.is_permanent_resident(),
encrypted_data.lived_here_5_plus_years()
)
)
return eligibility
Ĉi tio enhavas ambaŭ AND kaj OR operaciojn. Uzante la leĝojn de De Morgan kaj la NAND-universalecon, ni povas reskribita ĝin por uzi nur NAND-operaciojn, kiujn TFHE prilaboras pli efike:
Optimumigita por TFHE:
def is_eligible_voter(encrypted_data):
# Paŝo 1: Konverti la OR uzante De Morgan: A OR B = NOT(NOT A AND NOT B)
# Paŝo 2: Esprimi NOT laŭ NAND: NOT X = NAND(X, X)
# Paŝo 3: Esprimi AND laŭ NAND: A AND B = NOT(NAND(A, B)) = NAND(NAND(A, B), NAND(A, B))
citizen = encrypted_data.is_citizen()
resident = encrypted_data.is_permanent_resident()
years = encrypted_data.lived_here_5_plus_years()
# NOT citizen uzante NAND
not_citizen = homomorphic_nand(citizen, citizen)
# resident AND years uzante NAND
resident_and_years = homomorphic_nand(
homomorphic_nand(resident, years),
homomorphic_nand(resident, years)
)
# NOT (resident AND years) uzante NAND
not_resident_and_years = homomorphic_nand(resident_and_years, resident_and_years)
# NOT citizen AND NOT (resident AND years) uzante NAND
not_both = homomorphic_nand(
homomorphic_nand(not_citizen, not_resident_and_years),
homomorphic_nand(not_citizen, not_resident_and_years)
)
# Fina NOT por akiri: citizen OR (resident AND years)
eligibility = homomorphic_nand(not_both, not_both)
return eligibility
En produktad-TFHE-realigoj, ĉi tiu transformo reduktis komputad-tempon de minutoj al sekundoj por kompleksaj rajtigo-kontroloj sur ĉifritaj voĉdant-datumoj, igante privatec-konservajn elekto-sistemojn praktikaj por realmond-uzo.
Vi povas lerni pli pri TFHE ĉi tie.
Lerni Pli
La kapablo transformi logikajn esprimojn dum konservado de ilia signifo estas fundamenta lerteco kiu rajtigas programistojn superi limigojn en praktike ajna komputad-kunteksto. Ĝi ankaŭ estas nur iomete interesa.
La ekzemploj en ĉi tiu esplorado nur tuŝas la surfacon de kio estas ebla kiam vi profunde komprenas la principojn de ver-funkcia logiko.
Por tiuj interesitaj pri konstruado de pli forta fundamento en logiko, la Malferma Logiko Projekto provizas elstarajn senpagajn edukajn resursojn pri propozicia kaj predikato logiko, formalaj prud-sistemoj, kaj aliaj temoj kiel modala logiko kaj ar-teorio - ĉiuj celitaj al ne-matematika publiko.
Comments