Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Coq Exercises
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Monitor
Service Desk
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Max Ole Elliger
Coq Exercises
Commits
cc5e50f1
Unverified
Commit
cc5e50f1
authored
1 year ago
by
Max Ole Elliger
Browse files
Options
Downloads
Patches
Plain Diff
commented add_assoc
parent
ebf9e2f6
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!39
New Chapter about Induction
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ind/Intro.v
+42
-1
42 additions, 1 deletion
ind/Intro.v
with
42 additions
and
1 deletion
ind/Intro.v
+
42
−
1
View file @
cc5e50f1
...
...
@@ -159,25 +159,66 @@ Fixpoint atom_occurs (f : formula) (a : string) : BOOL :=
gleiche
geblieben
.
*
)
(
**
*
(
Strukturelle
)
Induktion
*
)
(
*
TODO
*
)
(
**
Induktion
ist
nun
das
korrespondierende
Beweisprinzip
f
ü
r
rekursive
Funktionen
.
Mit
Rekursion
definiert
man
eine
Funktion
,
indem
man
f
ü
r
jeden
Konstruktor
eine
Definitionsvorschrift
angibt
.
Mit
Induktion
gibt
man
einen
Beweis
f
ü
r
jeden
Konstruktor
an
,
um
eine
Aussage
f
ü
r
alle
Elemente
der
induktiven
Struktur
zu
beweisen
.
Schauen
wir
uns
das
direkt
praktisch
an
:
*
)
Theorem
add_assoc
:
forall
(
n1
n2
n3
:
NAT
),
add
n1
(
add
n2
n3
)
=
add
(
add
n1
n2
)
n3
.
(
**
Wir
haben
jetzt
das
[
Theorem
]
niedergeschrieben
,
das
wir
beweisen
wollen
.
Wir
wollen
also
zeigen
,
dass
die
Addition
[
add
],
die
wir
oben
definiert
haben
,
assoziativ
ist
,
also
dass
[
n1
+
(
n2
+
n3
)]
=
(
n1
+
n2
)
+
n3
]
f
ü
r
alle
[
n1
],[
n2
]
und
[
n3
]
gilt
.
Mittels
[
Proof
]
leiten
wir
nun
den
Beweis
ein
.
*
)
Proof
.
(
**
Mit
[
intros
n1
]
leiten
wir
den
Beweis
mit
den
typischen
Worten
"Sei [n1]
eine natürliche Zahl [NAT]."
ein
.
*
)
intros
n1
.
(
**
Kommen
wir
nun
zum
spannenden
Teil
:
Induktion
ü
ber
(
die
nat
ü
rliche
Zahl
)
[
n1
].
Durch
das
Pattern
[[
|
n1
'
IH
]]
benennen
wir
die
"kleineren"
Argumente
:
-
Im
ersten
Fall
nehmen
wir
[
n1
=
zero
]
an
,
weshalb
wir
hier
keine
neuen
Variablen
haben
.
-
Im
zweiten
Fall
nehmen
wir
[
n1
=
succ
(
n1
'
)]
an
,
weshalb
wir
[
n1
'
]
benannt
haben
.
Au
ß
erdem
geben
wir
der
_
Induktionshypothese_
den
Namen
[
IH
].
*
)
induction
n1
as
[
|
n1
'
IH
].
-
(
**
Fall
1
,
oft
auch
_
Induktionsanfang_
genannt
.
(
Auch
wenn
ich
pers
ö
nlich
diese
Benennung
f
ü
r
nicht
notwendig
halte
.)
Weil
wir
hier
den
Fall
betrachten
,
dass
[
n1
=
zero
],
m
ü
ssen
wir
noch
zeigen
,
dass
f
ü
r
alle
[
n2
]
und
[
n3
]
gilt
,
dass
[
0
+
(
n2
+
n3
)
=
(
0
+
n2
)
+
n3
].
Dazu
f
ü
hren
wir
nun
zun
ä
chst
die
beiden
[
NAT
]
'
s
[
n2
]
und
[
n3
]
mittels
[
intros
n2
n3
]
ein
.
*
)
intros
n2
n3
.
(
**
Die
Taktik
[
simpl
]
vereinfacht
das
Beweisziel
.
Dies
ist
hier
m
ö
glich
,
weil
die
Funktion
[
add
]
ausgewerted
werden
kann
,
weil
die
Struktur
des
ersten
Arguments
([
zero
])
bekannt
ist
.
*
)
simpl
.
(
**
Da
nun
links
und
rechts
das
gleiche
steht
,
gilt
diese
Gleichung
.
Dies
zeigen
wir
mittels
[
reflexivity
].
*
)
reflexivity
.
-
(
**
Nun
zu
Fall
2
,
oft
auch
_
Induktionsschritt_
genannt
.
(
Auch
diese
Benennung
halte
ich
pers
ö
nlich
f
ü
r
nicht
notwendig
.)
Weil
wir
hier
den
Fall
betrachten
,
dass
[
n1
=
succ
(
n1
'
)],
m
ü
ssen
wir
(
unter
Annahme
der
[
IH
])
zeigen
,
dass
[(
n1
'
+
1
)
+
(
n2
+
n3
)
=
((
n1
'
+
1
)
+
n2
)
+
n3
]
f
ü
r
alle
[
n2
]
und
[
n3
]
gilt
.
Wir
verfahren
wie
im
ersten
Fall
:
*
)
intros
n2
n3
.
simpl
.
(
**
Durch
[
specialize
]
spezialisieren
wir
nun
die
IH
auf
unser
aktuelles
Beweisziel
.
Mit
[
rewrite
IH
]
k
ö
nnen
wir
diese
Gleichung
zum
Umschreiben
des
Beweisziels
verwenden
.
Kurze
Frage
zum
Nachdenken
:
Warum
ist
die
[
IH
]
allquantifiziert
ü
ber
[
n2
]
und
[
n3
]
?
W
ä
re
das
auch
bei
Pen
&
Paper
-
Beweisen
der
Fall
?
*
)
specialize
IH
with
(
n2
:=
n2
)
(
n3
:=
n3
).
rewrite
IH
.
reflexivity
.
Qed
.
(
*
TODO
*
)
Lemma
add_zero_r
:
forall
(
n
:
NAT
),
add
n
zero
=
n
.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment