Werkplaats / De werkplaats
In jouw eigen tempo
← AI in de wereld
MODULE 06 · LES 12

Combineer beoordeelde risico’s en behoud open vragen

Verwerk bekende en onbekende oefenfeiten zonder de twee hoog-risicoroutes, verboden gebruik en transparantie samen te voegen.

75 min3 checkpoints
DIT GA JE ONTDEKKEN
  • Je combineert bekende en onbekende feiten met driewaardige logica.
  • Je houdt afzonderlijke risicovragen en alle ontbrekende feiten zichtbaar.

Een school gebruikt AI om spelfouten aan te wijzen. Een andere toepassing bepaalt welke leerlingen worden toegelaten. Beide verwerken tekst, maar hun bedoeling en gevolgen verschillen: welke vragen moet je stellen voordat zo’n systeem wordt gebruikt?

Denk aan een dossier met afzonderlijke tabbladen: gebruiksdoel, betrokken mensen, risico en verantwoordelijkheden. Een ontbrekend antwoord is een open vraag, geen groen vinkje. Ook een gunstige uitkomst uit de vorige veiligheidsles vult dat dossier niet automatisch in.

Deze les gebruikt de EU AI Act zoals gecontroleerd op 30 oktober 2026, inclusief de wijziging van juli 2026. De officiële bronnen staan onderaan. Onze code verwerkt vooraf beoordeelde oefenfeiten; een deskundige moet het werkelijke gebruik, de reikwijdte en uitzonderingen vaststellen.

1. Een onbekend feit blijft onbekend

Een feit krijgt hier True voor bevestigd, False voor ontkend en None voor onbekend. None betekent geen kans van vijftig procent. Je weet eenvoudig nog niet welk van de twee antwoorden klopt.

Bij een EN-vraag moeten alle voorwaarden waar zijn. Wanneer één voorwaarde zeker onwaar is, kan de combinatie niet meer waar worden. Zijn alle bekende voorwaarden waar en blijft er een open vraag over, dan blijft de uitkomst onbekend.

In de volgende formule betekent F onwaar, T waar en het vraagteken onbekend. Het teken ∧ lees je als EN. Vul het vraagteken denkbeeldig eerst met waar en daarna met onwaar: blijft het antwoord gelijk?

F∧?=FT∧?=?
print(all_evidence([True, None]))
print(all_evidence([False, None]))
# None
# False
01
CHECKPOINTCombineer voorwaarden zonder onbekend weg te poetsen

2. Soms is één bekende route voldoende

Bij een OF-vraag is één bevestigde voorwaarde voldoende. Een onbekend tweede antwoord verandert die bevestiging niet. Zijn alleen onware antwoorden bekend en ontbreekt er nog informatie, dan kun je de combinatie nog niet ontkennen.

Het teken ∨ betekent OF. Deze logica heet hier driewaardige logica: naast waar en onwaar behouden we onbekend. Je bewaart zo het verschil tussen een afwezige route en een nog niet onderzochte route.

T∨?=TF∨?=?
print(any_evidence([False, None]))
print(any_evidence([True, None]))
# None
# True
02
CHECKPOINTHerken een bevestigde alternatieve route

3. Hoog risico, verboden gebruik en transparantie

Artikel 6 beschrijft twee routes naar hoog risico. De productroute heeft voorwaarden rond gereguleerde producten, veiligheidsfuncties en conformiteitsbeoordeling; de andere route betreft specifieke toepassingen uit bijlage III, zoals bepaalde beslissingen over onderwijs of arbeid. Alleen het woord “onderwijs” herkennen is dus onvoldoende.

Voor de bijlage-III-route bestaat een beperkte uitzondering. De voorwaarden rond significante schade en invloed op besluitvorming horen daarbij; “er kijkt een mens mee” is geen volledige beoordeling. Profilering van natuurlijke personen binnen die route doorbreekt de uitzondering.

In onze zes invoerfeiten betekent product_route de volledig beoordeelde productroute, inclusief de nadere voorwaarden. Annex_iii geeft de beoordeelde bijlage-III-toepassing aan; exception_6_3 bevat de beoordeling van de eerste twee alinea’s van lid 3. Profiling blijft apart, zodat de laatste alinea zichtbaar kan worden toegepast.

VERKEN HET ZELFEen open vraag is geen nee

Verander zes vooraf beoordeelde feiten. De routes naar hoog risico blijven naast de vragen over verboden gebruik en transparantie staan.

P omvat de volledige beoordeelde productroute. E beoordeelt de eerste twee alinea’s van artikel 6(3); de afzonderlijke profileringsdoorbreking volgt daarna. Onbekend is geen kans van 50%.

Productroute

Het vooraf beoordeelde productfeit P.

Nee

Bijlage-III-route

Toepassing A, met de uitzonderingsvoorwaarden en aparte profileringsdoorbreking.

Onbekend

Eén bevestigde route is voldoende voor het hoog-risicosignaal.

Hoog risico

Onbekend

Combinatie van de twee routes.

Verboden gebruik

Nee

Een aparte vraag; hoog risico heft een verbod niet op.

Transparantie

Ja

Kan naast hoog risico gelden.

Hoog risico: Onbekend. Verboden gebruik: Nee. Transparantie: Ja.

Nog te beoordelen 1 feit

  • Uitzonderingsvoorwaarden (E)

Een open feit blijft hier zichtbaar, ook wanneer een andere route het signaal al beslist.

Bronstand 30 oktober 2026. Dit zijn vooraf beoordeelde, beperkte oefengegevens. De visualisatie stelt geen juridische feiten vast en geeft geen toestemming om een systeem te gebruiken.

Noem die eerste vier feiten P, A, E en R. Het hoog-risicosignaal H combineert beide routes; ¬E betekent dat de beoordeelde uitzonderingsvoorwaarden niet gelden. Is E onbekend, dan blijft ook ¬E onbekend.

H=P∨(A∧(R∨¬E))
facts = {
    'product_route': False,
    'annex_iii': True,
    'exception_6_3': None,
    'profiling': False,
    'prohibited': False,
    'transparency': True,
}
report = risk_signals(facts)
print(report['high_risk'])
print(report['unresolved'])
# None
# ['exception_6_3']
03
CHECKPOINTBehoud beide routes en alle open vragen

Verander nu de twee genoemde feiten. Het profileringsfeit maakt de opgegeven bijlage-III-route waar; tegelijk blijft het afzonderlijke transparantiefeit waar. Artikel 50 laat de hoog-risicoregels naast zijn transparantieregels bestaan.

facts['exception_6_3'] = True
facts['profiling'] = True
report = risk_signals(facts)
print(report['high_risk'])
print(report['transparency'])
# True
# True

Een hoog-risicosignaal maakt verboden gebruik niet toegestaan. Daarom bewaart risk_signals ook prohibited en transparency als afzonderlijke feiten, en alle onbekende invoervelden in unresolved. De code geeft geen toestemming om een systeem te gebruiken.

Wat je nu kunt

  • Je begint bij bedoeld gebruik, gevolgen en beoordeelde feiten.
  • Je combineert bekende en onbekende informatie zonder None als False te behandelen.
  • Je houdt de twee hoog-risicoroutes, verboden gebruik en transparantie zichtbaar uit elkaar.

Hierna verbind je een expliciete rol en peildatum aan geselecteerde verplichtingen en het bewijs dat daarvoor ontbreekt.

Bronnen

Gecontroleerd op 30 oktober 2026: artikel 6 over hoog risico en artikel 50 over transparantie, op de officiële AI Act Service Desk van de Europese Commissie.

DE VOLGENDE STAPVerbind een rol en peildatum aan geselecteerde eisen en bewijs
JOUW EXPERIMENT

Probeer het zelf

Python
main.py

Python start zodra jij code uitvoert.

UITVOER

Je uitvoer verschijnt hier.
Alles rekent in je eigen browser.

Jouw checkpoints0 / 3
01
Combineer voorwaarden zonder onbekend weg te poetsen

Schrijf all_evidence(values). Gebruik _gov_values. Values is exact een Python-list/tuple van 1–32 items, elk exact bool of None; integers, floats en NumPy-bools zijn ongeldig. Uitvoer is exact Python-bool of None. Geef False zodra een item False is, True als alle items True zijn, anders None. None is onbekend, geen kans of onwaar. Behoud alle invoerwaarden, vormen, volgorde, readonlyflags en Python-/NumPy-RNG. Gebruik nieuwe resultaatdicts/lijsten zonder mutabele alias naar invoer of elkaar. Ongeldige invoer geeft ValueError; helpers zijn gegeven. Elke functie moet zelfstandig werken terwijl de andere twee TODO zijn.

Een hint

Een bekende onware voorwaarde beslist EN; anders ontbreekt mogelijk nog informatie.

02
Herken een bevestigde alternatieve route

Schrijf any_evidence(values). Gebruik _gov_values. Values is exact een Python-list/tuple van 1–32 items, elk exact bool of None; integers, floats en NumPy-bools zijn ongeldig. Uitvoer is exact Python-bool of None. Geef True zodra een item True is, False als alle items False zijn, anders None. Behoud alle invoerwaarden, vormen, volgorde, readonlyflags en Python-/NumPy-RNG. Gebruik nieuwe resultaatdicts/lijsten zonder mutabele alias naar invoer of elkaar. Ongeldige invoer geeft ValueError; helpers zijn gegeven. Elke functie moet zelfstandig werken terwijl de andere twee TODO zijn.

Een hint

Een bekende ware route beslist OF; anders ontbreekt mogelijk nog informatie.

03
Behoud beide routes en alle open vragen

Schrijf risk_signals(facts). Gebruik _gov_facts. Facts is exact een dict met precies product_route, annex_iii, exception_6_3, profiling, prohibited en transparency, elk exact bool of None. Product_route is de volledige vooraf extern beoordeelde artikel-6(1)-route inclusief leden 1a–c. Exception_6_3 zijn alle vooraf extern beoordeelde voorwaarden uit de EERSTE TWEE alinea’s van artikel 6(3), VÓÓR de profileringsdoorbreking in de laatste alinea. Combineer met de besproken driewaardige logica: annexroute = annex_iii EN (profiling OF NIET exception_6_3); high_risk = product_route OF annexroute; NIET None blijft None. Geef exact een dict met routes (nieuw dict product/annex_iii met de twee routes), high_risk, prohibited, transparency (de laatste twee onveranderd overnemen), en unresolved (nieuwe alfabetisch gesorteerde lijst van ALLE onbekende invoerveldnamen, ook wanneer hun route al beslist is). Alle signalen exact bool/None. Behoud alle invoerwaarden, vormen, volgorde, readonlyflags en Python-/NumPy-RNG. Gebruik nieuwe resultaatdicts/lijsten zonder mutabele alias naar invoer of elkaar. Ongeldige invoer geeft ValueError; helpers zijn gegeven. Elke functie moet zelfstandig werken terwijl de andere twee TODO zijn. Dit verwerkt gedeclareerde oefenfeiten; geen vrije-tekstclassificatie, toestemming of bewijs van juridische waarheid.

Een hint

Houd de productroute apart; pas profilering op de bijlage-III-route toe en bewaar ontbrekende feiten.

Vastgelopen? Bekijk de voorbeeldoplossing


# Jouw functies

def all_evidence(values):
    """False dominates; all true gives True; otherwise uncertainty remains."""
    checked = _gov_values(values)
    if any((value is False for value in checked)):
        return False
    return None if any((value is None for value in checked)) else True

def any_evidence(values):
    """True dominates; all false gives False; otherwise uncertainty remains."""
    checked = _gov_values(values)
    if any((value is True for value in checked)):
        return True
    return None if any((value is None for value in checked)) else False

def risk_signals(facts):
    """Combine declared routes, retaining prohibition/transparency and unknown fields.

    product_route already includes the FULL externally assessed Article 6(1)
    route, including the qualifications in 6(1a-c). exception_6_3 comprises
    ALL externally assessed conditions in the FIRST TWO subparagraphs of
    Article 6(3), BEFORE the separate profiling override in its last paragraph.
    It does not merely mean 'a human looks at the result'.
    No free text is interpreted. Facts do not establish scope or legal truth.
    """
    checked = _gov_facts(facts)

    def conjunction(a, b):
        if a is False or b is False:
            return False
        return True if a is True and b is True else None

    def disjunction(a, b):
        if a is True or b is True:
            return True
        return False if a is False and b is False else None
    exception = checked['exception_6_3']
    no_exception = None if exception is None else not exception
    annex_route = conjunction(checked['annex_iii'], disjunction(checked['profiling'], no_exception))
    return {'routes': {'product': checked['product_route'], 'annex_iii': annex_route}, 'high_risk': disjunction(checked['product_route'], annex_route), 'prohibited': checked['prohibited'], 'transparency': checked['transparency'], 'unresolved': sorted((key for key, value in checked.items() if value is None))}

# Gegeven helpers

def _gov_values(values):
    if type(values) not in (list, tuple) or not 1 <= len(values) <= 32:
        raise ValueError('Geef 1 tot 32 booleans of None')
    if any((value is not None and type(value) is not bool for value in values)):
        raise ValueError('Alleen echte booleans en None')
    return list(values)

def _gov_facts(facts):
    keys = {'product_route', 'annex_iii', 'exception_6_3', 'profiling', 'prohibited', 'transparency'}
    if type(facts) is not dict or set(facts) != keys:
        raise ValueError('Geef precies de zes beoordeelde oefenfeiten')
    _gov_values(list(facts.values()))
    return dict(facts)

Voer de code uit en verklaar voor jezelf waarom elke stap werkt.