Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
cpdt
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
research
cpdt
Commits
3ee333ce
Commit
3ee333ce
authored
Nov 18, 2009
by
Adam Chlipala
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update DataStruct with a new reason to use reflexive types; start Universes
parent
ac5b30ee
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
299 additions
and
4 deletions
+299
-4
Makefile
Makefile
+2
-2
DataStruct.v
src/DataStruct.v
+2
-2
Intro.v
src/Intro.v
+2
-0
Universes.v
src/Universes.v
+292
-0
toc.html
src/toc.html
+1
-0
No files found.
Makefile
View file @
3ee333ce
MODULES_NODOC
:=
Axioms Tactics MoreSpecif DepList
MODULES_PROSE
:=
Intro
MODULES_CODE
:=
StackMachine InductiveTypes Predicates Coinductive Subset
\
MoreDep DataStruct Equality Generic
Match Reflection Firstorder Hoas
\
Interps Extensional Intensional Impure
MoreDep DataStruct Equality Generic
Universes Match Reflection
\
Firstorder Hoas
Interps Extensional Intensional Impure
MODULES_DOC
:=
$(MODULES_PROSE)
$(MODULES_CODE)
MODULES
:=
$(MODULES_NODOC)
$(MODULES_DOC)
VS
:=
$
(
MODULES:%
=
src/%.v
)
...
...
src/DataStruct.v
View file @
3ee333ce
...
...
@@ -830,11 +830,11 @@ Qed.
Inductive
types
are
often
the
most
pleasant
to
work
with
,
after
someone
has
spent
the
time
implementing
some
basic
library
functions
for
them
,
using
fancy
[
match
]
annotations
.
Many
aspects
of
Coq
'
s
logic
and
tactic
support
are
specialized
to
deal
with
inductive
types
,
and
you
may
miss
out
if
you
use
alternate
encodings
.
Recursive
types
usually
involve
much
less
initial
effort
,
but
they
can
be
less
convenient
to
use
with
proof
automation
.
For
instance
,
the
[
simpl
]
tactic
(
which
is
among
the
ingredients
in
[
crush
])
will
sometimes
be
overzealous
in
simplifying
uses
of
functions
over
recursive
types
.
Consider
a
call
[
get
l
f
]
,
where
variable
[
l
]
has
type
[
filist
A
(
S
n
)]
.
Th
is
expression
would
be
simplified
to
an
explicit
pair
,
even
though
we
know
nothing
about
the
structure
of
[
l
]
beyond
its
type
.
In
a
proof
involving
many
recursive
types
,
this
kind
of
unhelpful
"simplification"
can
lead
to
rapid
bloat
in
the
sizes
of
subgoals
.
Recursive
types
usually
involve
much
less
initial
effort
,
but
they
can
be
less
convenient
to
use
with
proof
automation
.
For
instance
,
the
[
simpl
]
tactic
(
which
is
among
the
ingredients
in
[
crush
])
will
sometimes
be
overzealous
in
simplifying
uses
of
functions
over
recursive
types
.
Consider
a
call
[
get
l
f
]
,
where
variable
[
l
]
has
type
[
filist
A
(
S
n
)]
.
Th
e
type
of
[
l
]
would
be
simplified
to
an
explicit
pair
type
.
In
a
proof
involving
many
recursive
types
,
this
kind
of
unhelpful
"simplification"
can
lead
to
rapid
bloat
in
the
sizes
of
subgoals
.
Another
disadvantage
of
recursive
types
is
that
they
only
apply
to
type
families
whose
indices
determine
their
"skeletons."
This
is
not
true
for
all
data
structures
;
a
good
counterexample
comes
from
the
richly
-
typed
programming
language
syntax
types
we
have
used
several
times
so
far
.
The
fact
that
a
piece
of
syntax
has
type
[
Nat
]
tells
us
nothing
about
the
tree
structure
of
that
syntax
.
Reflexive
encodings
of
data
types
are
seen
relatively
rarely
.
As
our
examples
demonstrated
,
manipulating
index
values
manually
can
lead
to
hard
-
to
-
read
code
.
A
normal
inductive
type
is
generally
easier
to
work
with
,
once
someone
has
gone
through
the
trouble
of
implementing
an
induction
principle
manually
with
the
techniques
we
studied
in
Chapter
3.
For
small
developments
,
avoiding
that
kind
of
coding
can
justify
the
use
of
reflexive
data
structures
.
*
)
Reflexive
encodings
of
data
types
are
seen
relatively
rarely
.
As
our
examples
demonstrated
,
manipulating
index
values
manually
can
lead
to
hard
-
to
-
read
code
.
A
normal
inductive
type
is
generally
easier
to
work
with
,
once
someone
has
gone
through
the
trouble
of
implementing
an
induction
principle
manually
with
the
techniques
we
studied
in
Chapter
3.
For
small
developments
,
avoiding
that
kind
of
coding
can
justify
the
use
of
reflexive
data
structures
.
There
are
also
some
useful
instances
of
co
-
inductive
definitions
with
nested
data
structures
(
e
.
g
.,
lists
of
values
in
the
co
-
inductive
type
)
that
can
only
be
deconstructed
effectively
with
reflexive
encoding
of
the
nested
structures
.
*
)
(
**
*
Exercises
*
)
...
...
src/Intro.v
View file @
3ee333ce
...
...
@@ -201,6 +201,8 @@ Reasoning About Equality Proofs & \texttt{Equality.v} \\
\
hline
Generic
Programming
&
\
texttt
{
Generic
.
v
}
\
\
\
hline
Universes
and
Axioms
&
\
texttt
{
Universes
.
v
}
\
\
\
hline
Proof
Search
in
Ltac
&
\
texttt
{
Match
.
v
}
\
\
\
hline
Proof
by
Reflection
&
\
texttt
{
Reflection
.
v
}
\
\
...
...
src/Universes.v
0 → 100644
View file @
3ee333ce
This diff is collapsed.
Click to expand it.
src/toc.html
View file @
3ee333ce
...
...
@@ -14,6 +14,7 @@
<li><a
href=
"DataStruct.html"
>
Dependent Data Structures
</a>
<li><a
href=
"Equality.html"
>
Reasoning About Equality Proofs
</a>
<li><a
href=
"Generic.html"
>
Generic Programming
</a>
<li><a
href=
"Universes.html"
>
Universes and Axioms
</a>
<li><a
href=
"Match.html"
>
Proof Search in Ltac
</a>
<li><a
href=
"Reflection.html"
>
Proof by Reflection
</a>
<li><a
href=
"Firstorder.html"
>
First-Order Abstract Syntax
</a>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment