Beweren en bewijzen/het verhaal/6. Theorie/casus Stoplicht

Uit Werkplaats
< Beweren en bewijzen‎ | het verhaal‎ | 6. Theorie
Versie door David Jansen (overleg | bijdragen) op 2 jun 2010 om 09:06 (Water in de wijn)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken
de opzet 2017-18    KalenderIcon.gif multimedia kwaliteit commentaren
site map


Beweren en bewijzen
Wijsheid omgaan met onzekerheid: met open blik op wankele ondergrond levenspad bewandelen
Vernuft aanpak van glibberige problemen precies redeneren op het hoogste niveau
vier zuilen → Artefacten Formalisering Taal Zekerheid
1. Rationaliteit Rationaliteitsvierkant 4 werelden Beweren is moeilijk Overtuigen
2. Modellen Focus Precisie Logica Stelling en bewijs
3. Model en realiteit Specificaties Domeinmodel Syntax en semantiek Waarheid
4. Correctheid Structuur Correctheidsstelling Typering Nagaan
5. Methoden Decompositie Systemat. vertalen Definities Natuurl. deductie
6. Theorie Domeintheorie Tijd Tijdslogica Wiskunde
7. Complexiteit Hiërarch. decompositie Vereenvoudigingen Modules Bewijsassistenten
8. Generalisering Standaardisatie Parametrisatie Talen Hulpstellingen
Beweren en bewijzen/het verhaal/6. Theorie/casus Stoplicht

Aan deze pagina wordt nog gewerkt. Bedankt voor uw begrip.

Een aantal handige, doch niet noodzakelijke, commando's uit Coq wordt daarbij besproken. Dit voorbeeld is om je te helpen, het samenspel van notatie, definities en intervallen te begrijpen. Werk het door. Maar het is niet de bedoeling dat je in het werkstuk deze stapsgewijze opbouw volgt. In het werkstuk telt dat het zo overzichtelijk mogelijk is.

Getypeerde logica zonder definities en intervallen

Het verkeerslicht bestaat uit 4 onderdelen: 3 lampen van verschillende kleuren en een Schakelkast. We geven ze hier zonder domeinmodel. De function mod staat voor modulo.

Wie heeft zin om het domeinmodel toe te voegen?
Jasper Berendsen.jpg
Jasper BerendsenBenB Remove this comment when resolved!


Er zijn drie lampen:

Definition LampGroen := ∀t:T, Signaal t groen ↔ Licht t groen.
Definition LampOranje := ∀t:T, Signaal t oranje ↔ Licht t oranje.
Definition LampRood := ∀t:T, Signaal t rood ↔ Licht t rood.

De Schakelkast is wat complexer. In een periode van 20 seconden wordt: 5 seconden een signaal voor groen gegeven, dan 5 seconden een signaal voor oranje, en tenslotte 10 seconden een signaal voor rood. Vervolgens begint er een nieuwe periode. mod staat voor de modulo functie. (mod t 20) is dus een getal in het interval [0,20). De specificatie is:

Definition Schakelkast := ∀t:T,
  (0≤(mod t 20)∧(mod t 20)<5 ↔ Signaal t groen) ∧
  (5≤(mod t 20)∧(mod t 20)<10 ↔ Signaal t oranje) ∧
  (10≤(mod t 20)∧(mod t 20)<20 ↔ Signaal t rood).

Als specificatie voor het geheel concentreren we ons op een eenvoudige, maar belangrijke eigenschap:

¬(∃t:T. Licht t rood ∧ Licht t groen)

Dit is een wat flauwe specificatie die met veel simpelere onderdelen waar gemaakt zou kunnen worden, maar het gaat hier om het voorbeeld.

De correctheidsstelling wordt dan zonder gebruik van definities vrij lang:

LampGroen, LampOranje, LampRood, Schakelkast |- ¬(∃t:T. Licht t rood ∧ Licht t groen)

Water in de wijn

Met mod wordt het bewijs moeilijk. We kunnen mod wegwerken door de specificatie van de Schakelkast af te zwakken, door enkel nog over het tijdsinterval [0,20) te spreken. We schrijven dus in de inleiding dat we alleen dit tijdsinterval formeel beschouwen omdat de geschiedenis zich daarna precies herhaalt. De nieuwe specificatie wordt dan (ga na!):

Definition Schakelkast := ∀t:[0,20),
  (t∈[0,5) ↔ Signaal t groen) ∧
  (t∈[5,10) ↔ Signaal t oranje) ∧
  (t∈[10,20) ↔ Signaal t rood).

Om het bewijs rond te kunnen krijgen zullen we de specificatie van het geheel ook af moeten zwakken. In het Werkstuk noemden we dit: "water bij de wijn". De specificatie van het geheel zwakt af tot:

¬(∃t:[0,20). Licht t rood ∧ Licht t groen

Merk op dat het eigenlijk wel mee valt met de afzwakking, met methoden uit de wiskunde als natuurlijke inductie zouden uit datgene wat we nu bewijzen het orginele bewijs best rond kunnen krijgen.

Definities en intervallen

Omdat iedere lamp vrijwel hetzelfde is gebruiken we een geparametriseerde specificatie. Hiertoe gebruiken we een eigen type Kleur dat de kleuren {groen, oranje, rood} heeft.

Definition Lamp (k:Kleur) := ∀t:T. Signaal t k ↔ Licht t k.

Dit omdat de specificaties van de lampen zich alleen onderscheiden in kleur. De correctheidsstelling wordt nu heel compact:

Schakelkast, (forall k:Kleur, Lamp(k)) |- ¬(&exists;t:[0,20). Licht t rood ∧ Licht t groen

In Coq-notatie

De delen hieronder vormen samen het gehele bewijs in Coq. Daar waar nieuwe dingen worden gebruikt staat een toelichting. Om de toelichting te begrijpen is het uitvoeren van het bewijs in Coq onontbeerlijk.

Require Import BenB.

Definition T := R.

Variable Kleur : Set.
Variable groen : Kleur. Variable oranje : Kleur. Variable rood : Kleur.

Kleur wordt als type/verzameling gedefinieerd en groen, oranje, rood als elementen daarvan.

Variable signaal : T -> Kleur -> Prop. Variable licht : T -> Kleur -> Prop.

Definition Lamp(k : Kleur) := forall t:T, (signaal t k -> licht t k ) /\ 
(licht t k -> signaal t k).
Definition Schakelkast := forall t:T,
(t in [0, 5) -> signaal t groen) /\ (signaal t groen -> t in [0, 5)) /\
(t in [5, 10) -> signaal t oranje) /\ (signaal t oranje -> t in [5, 10)) /\
(t in [10, 20) -> signaal t rood) /\ (signaal t rood -> t in [10, 20)).

Theorem correctheidsstelling : 
Schakelkast -> (forall k:Kleur, Lamp k) ->
~exists t:T, t in [0,20) /\ licht t rood /\ licht t groen.

We schrijven in de correctheidsstelling allemaal implicaties zoals uitgelegd op Beweren_en_bewijzen/de_opzet/gereedschap/Coq#Natuurlijke deductie voor propositielogica.

Bewijzen

Het bewijs is gegeven in Gentzen notatie. Hoe men tot dit bewijs komt in Coq wordt hieronder uitgelegd.

imp_i H_Schakelkast.
imp_i K_Lampen.
neg_i (exists t : T, t in  [0, 20) /\ licht t rood /\ licht t groen) H1.
exi_e (exists t : T, t in  [0, 20) /\ licht t rood /\ licht t groen) m H2.
assumption.
clear H1.

Men mag clear gebruiken om aannames weg te gooien, het hoeft niet.

neg_i (10<=m) H3.
clear H3.
imp_e (m<5).
imp_i H4.
neg_i True H5.

True is een propositie die altijd waar is.

lin_solve.

lin_solve is in staat het doel ~True te bewijzen doordat de aannames elkaar tegenspreken, er is geen enkele oplossing mogelijk.

lin_solve.

Het doel True kan men zonder aannames bewijzen en kan ook opgelost worden m.b.v. lin_solve.

con_e2 (0<=m).
unfold Schakelkast in H_Schakelkast.

Met unfold kan men aangeven welke definitie men wil ontvouwen en in welke aanname dat moet gebeuren. unfold is geen noodzakelijk commando (het wordt in dit bewijs ter illustratie maar 1 keer gebruikt), maar kan zaken wat overzichtelijker maken.

imp_e (signaal m groen).
con_e1 (
(m in  [5, 10) -> signaal m oranje) /\ (signaal m oranje -> m in  [5, 10)) /\
(m in  [10, 20) -> signaal m rood) /\ (signaal m rood -> m in  [10, 20))
).
con_e2 (m in [0,5) -> signaal m groen). 
all_e (
forall t:T,
(t in [0, 5) -> signaal t groen) /\ (signaal t groen -> t in [0, 5)) /\
(t in [5, 10) -> signaal t oranje) /\ (signaal t oranje -> t in [5, 10)) /\
(t in [10, 20) -> signaal t rood) /\ (signaal t rood -> t in [10, 20))
) m.
assumption.
imp_e (licht m groen).
con_e2 (signaal m groen -> licht m groen).
all_e (forall t:T, (signaal t groen -> licht t groen) /\ (licht t groen -> signaal t groen)) m.
all_e (forall k:Kleur, forall t:T, (signaal t k -> licht t k) /\ (licht t k -> signaal t k)) groen.
assumption.
con_e2 (licht m rood).
con_e2 (m in [0,20)).
assumption.
clear H3.
con_e1 (m<20).
imp_e (signaal m rood).
con_e2 (m in [10,20) -> signaal m rood).
con_e2 (signaal m oranje -> m in [5,10)).
con_e2 (m in [5,10) -> signaal m oranje).
con_e2 (signaal m groen -> m in [0,5)).
con_e2 (m in [0,5) -> signaal m groen).
all_e (
forall t:T,
(t in [0, 5) -> signaal t groen) /\ (signaal t groen -> t in [0, 5)) /\
(t in [5, 10) -> signaal t oranje) /\ (signaal t oranje -> t in [5, 10)) /\
(t in [10, 20) -> signaal t rood) /\ (signaal t rood -> t in [10, 20))
) m.
assumption.
imp_e (licht m rood).
con_e2 (signaal m rood -> licht m rood).
all_e (forall t:T, (signaal t rood -> licht t rood) /\ (licht t rood -> signaal t rood)) m.
all_e (forall k:Kleur, forall t:T, (signaal t k -> licht t k) /\ (licht t k -> signaal t k)) rood.
assumption.
con_e1 (licht m groen).
con_e2 (m in [0,20)).
assumption.
assumption.

Qed.