Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Jonas Kastberg
iris
Commits
4e597ea3
Commit
4e597ea3
authored
Dec 13, 2018
by
Robbert Krebbers
Browse files
Rename constructors of intro pattern stack_items (used in the parser).
This is to avoid confusion with those of selection patterns.
parent
b1270b7d
Changes
1
Hide whitespace changes
Inline
Side-by-side
theories/proofmode/intro_patterns.v
View file @
4e597ea3
...
...
@@ -24,25 +24,25 @@ Inductive intro_pat :=
Module
intro_pat
.
Inductive
stack_item
:
=
|
SPat
:
intro_pat
→
stack_item
|
SList
:
stack_item
|
SConjList
:
stack_item
|
SBar
:
stack_item
|
SAmp
:
stack_item
|
SAlwaysElim
:
stack_item
|
SModalElim
:
stack_item
.
|
S
t
Pat
:
intro_pat
→
stack_item
|
S
t
List
:
stack_item
|
S
t
ConjList
:
stack_item
|
S
t
Bar
:
stack_item
|
S
t
Amp
:
stack_item
|
S
t
AlwaysElim
:
stack_item
|
S
t
ModalElim
:
stack_item
.
Notation
stack
:
=
(
list
stack_item
).
Fixpoint
close_list
(
k
:
stack
)
(
ps
:
list
intro_pat
)
(
pss
:
list
(
list
intro_pat
))
:
option
stack
:
=
match
k
with
|
SList
::
k
=>
Some
(
SPat
(
IList
(
ps
::
pss
))
::
k
)
|
SPat
pat
::
k
=>
close_list
k
(
pat
::
ps
)
pss
|
SAlwaysElim
::
k
=>
|
S
t
List
::
k
=>
Some
(
S
t
Pat
(
IList
(
ps
::
pss
))
::
k
)
|
S
t
Pat
pat
::
k
=>
close_list
k
(
pat
::
ps
)
pss
|
S
t
AlwaysElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close_list
k
(
IAlwaysElim
p
::
ps
)
pss
|
SModalElim
::
k
=>
|
S
t
ModalElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close_list
k
(
IModalElim
p
::
ps
)
pss
|
SBar
::
k
=>
close_list
k
[]
(
ps
::
pss
)
|
S
t
Bar
::
k
=>
close_list
k
[]
(
ps
::
pss
)
|
_
=>
None
end
.
...
...
@@ -57,55 +57,55 @@ Fixpoint big_conj (ps : list intro_pat) : intro_pat :=
Fixpoint
close_conj_list
(
k
:
stack
)
(
cur
:
option
intro_pat
)
(
ps
:
list
intro_pat
)
:
option
stack
:
=
match
k
with
|
SConjList
::
k
=>
|
S
t
ConjList
::
k
=>
ps
←
match
cur
with
|
None
=>
guard
(
ps
=
[])
;
Some
[]
|
Some
p
=>
Some
(
p
::
ps
)
end
;
Some
(
SPat
(
big_conj
ps
)
::
k
)
|
SPat
pat
::
k
=>
guard
(
cur
=
None
)
;
close_conj_list
k
(
Some
pat
)
ps
|
SAlwaysElim
::
k
=>
p
←
cur
;
close_conj_list
k
(
Some
(
IAlwaysElim
p
))
ps
|
SModalElim
::
k
=>
p
←
cur
;
close_conj_list
k
(
Some
(
IModalElim
p
))
ps
|
SAmp
::
k
=>
p
←
cur
;
close_conj_list
k
None
(
p
::
ps
)
Some
(
S
t
Pat
(
big_conj
ps
)
::
k
)
|
S
t
Pat
pat
::
k
=>
guard
(
cur
=
None
)
;
close_conj_list
k
(
Some
pat
)
ps
|
S
t
AlwaysElim
::
k
=>
p
←
cur
;
close_conj_list
k
(
Some
(
IAlwaysElim
p
))
ps
|
S
t
ModalElim
::
k
=>
p
←
cur
;
close_conj_list
k
(
Some
(
IModalElim
p
))
ps
|
S
t
Amp
::
k
=>
p
←
cur
;
close_conj_list
k
None
(
p
::
ps
)
|
_
=>
None
end
.
Fixpoint
parse_go
(
ts
:
list
token
)
(
k
:
stack
)
:
option
stack
:
=
match
ts
with
|
[]
=>
Some
k
|
TName
"_"
::
ts
=>
parse_go
ts
(
SPat
IDrop
::
k
)
|
TName
s
::
ts
=>
parse_go
ts
(
SPat
(
IIdent
s
)
::
k
)
|
TAnom
::
ts
=>
parse_go
ts
(
SPat
IAnom
::
k
)
|
TFrame
::
ts
=>
parse_go
ts
(
SPat
IFrame
::
k
)
|
TBracketL
::
ts
=>
parse_go
ts
(
SList
::
k
)
|
TBar
::
ts
=>
parse_go
ts
(
SBar
::
k
)
|
TName
"_"
::
ts
=>
parse_go
ts
(
S
t
Pat
IDrop
::
k
)
|
TName
s
::
ts
=>
parse_go
ts
(
S
t
Pat
(
IIdent
s
)
::
k
)
|
TAnom
::
ts
=>
parse_go
ts
(
S
t
Pat
IAnom
::
k
)
|
TFrame
::
ts
=>
parse_go
ts
(
S
t
Pat
IFrame
::
k
)
|
TBracketL
::
ts
=>
parse_go
ts
(
S
t
List
::
k
)
|
TBar
::
ts
=>
parse_go
ts
(
S
t
Bar
::
k
)
|
TBracketR
::
ts
=>
close_list
k
[]
[]
≫
=
parse_go
ts
|
TParenL
::
ts
=>
parse_go
ts
(
SConjList
::
k
)
|
TAmp
::
ts
=>
parse_go
ts
(
SAmp
::
k
)
|
TParenL
::
ts
=>
parse_go
ts
(
S
t
ConjList
::
k
)
|
TAmp
::
ts
=>
parse_go
ts
(
S
t
Amp
::
k
)
|
TParenR
::
ts
=>
close_conj_list
k
None
[]
≫
=
parse_go
ts
|
TPure
::
ts
=>
parse_go
ts
(
SPat
IPureElim
::
k
)
|
TAlways
::
ts
=>
parse_go
ts
(
SAlwaysElim
::
k
)
|
TModal
::
ts
=>
parse_go
ts
(
SModalElim
::
k
)
|
TArrow
d
::
ts
=>
parse_go
ts
(
SPat
(
IRewrite
d
)
::
k
)
|
TPureIntro
::
ts
=>
parse_go
ts
(
SPat
IPureIntro
::
k
)
|
TAlwaysIntro
::
ts
=>
parse_go
ts
(
SPat
IAlwaysIntro
::
k
)
|
TModalIntro
::
ts
=>
parse_go
ts
(
SPat
IModalIntro
::
k
)
|
TSimpl
::
ts
=>
parse_go
ts
(
SPat
ISimpl
::
k
)
|
TDone
::
ts
=>
parse_go
ts
(
SPat
IDone
::
k
)
|
TAll
::
ts
=>
parse_go
ts
(
SPat
IAll
::
k
)
|
TForall
::
ts
=>
parse_go
ts
(
SPat
IForall
::
k
)
|
TPure
::
ts
=>
parse_go
ts
(
S
t
Pat
IPureElim
::
k
)
|
TAlways
::
ts
=>
parse_go
ts
(
S
t
AlwaysElim
::
k
)
|
TModal
::
ts
=>
parse_go
ts
(
S
t
ModalElim
::
k
)
|
TArrow
d
::
ts
=>
parse_go
ts
(
S
t
Pat
(
IRewrite
d
)
::
k
)
|
TPureIntro
::
ts
=>
parse_go
ts
(
S
t
Pat
IPureIntro
::
k
)
|
TAlwaysIntro
::
ts
=>
parse_go
ts
(
S
t
Pat
IAlwaysIntro
::
k
)
|
TModalIntro
::
ts
=>
parse_go
ts
(
S
t
Pat
IModalIntro
::
k
)
|
TSimpl
::
ts
=>
parse_go
ts
(
S
t
Pat
ISimpl
::
k
)
|
TDone
::
ts
=>
parse_go
ts
(
S
t
Pat
IDone
::
k
)
|
TAll
::
ts
=>
parse_go
ts
(
S
t
Pat
IAll
::
k
)
|
TForall
::
ts
=>
parse_go
ts
(
S
t
Pat
IForall
::
k
)
|
TBraceL
::
ts
=>
parse_clear
ts
k
|
_
=>
None
end
with
parse_clear
(
ts
:
list
token
)
(
k
:
stack
)
:
option
stack
:
=
match
ts
with
|
TFrame
::
TName
s
::
ts
=>
parse_clear
ts
(
SPat
(
IClearFrame
(
SelIdent
s
))
::
k
)
|
TFrame
::
TPure
::
ts
=>
parse_clear
ts
(
SPat
(
IClearFrame
SelPure
)
::
k
)
|
TFrame
::
TAlways
::
ts
=>
parse_clear
ts
(
SPat
(
IClearFrame
SelPersistent
)
::
k
)
|
TFrame
::
TSep
::
ts
=>
parse_clear
ts
(
SPat
(
IClearFrame
SelSpatial
)
::
k
)
|
TName
s
::
ts
=>
parse_clear
ts
(
SPat
(
IClear
(
SelIdent
s
))
::
k
)
|
TPure
::
ts
=>
parse_clear
ts
(
SPat
(
IClear
SelPure
)
::
k
)
|
TAlways
::
ts
=>
parse_clear
ts
(
SPat
(
IClear
SelPersistent
)
::
k
)
|
TSep
::
ts
=>
parse_clear
ts
(
SPat
(
IClear
SelSpatial
)
::
k
)
|
TFrame
::
TName
s
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClearFrame
(
SelIdent
s
))
::
k
)
|
TFrame
::
TPure
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClearFrame
SelPure
)
::
k
)
|
TFrame
::
TAlways
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClearFrame
SelPersistent
)
::
k
)
|
TFrame
::
TSep
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClearFrame
SelSpatial
)
::
k
)
|
TName
s
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClear
(
SelIdent
s
))
::
k
)
|
TPure
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClear
SelPure
)
::
k
)
|
TAlways
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClear
SelPersistent
)
::
k
)
|
TSep
::
ts
=>
parse_clear
ts
(
S
t
Pat
(
IClear
SelSpatial
)
::
k
)
|
TBraceR
::
ts
=>
parse_go
ts
k
|
_
=>
None
end
.
...
...
@@ -113,9 +113,9 @@ with parse_clear (ts : list token) (k : stack) : option stack :=
Fixpoint
close
(
k
:
stack
)
(
ps
:
list
intro_pat
)
:
option
(
list
intro_pat
)
:
=
match
k
with
|
[]
=>
Some
ps
|
SPat
pat
::
k
=>
close
k
(
pat
::
ps
)
|
SAlwaysElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close
k
(
IAlwaysElim
p
::
ps
)
|
SModalElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close
k
(
IModalElim
p
::
ps
)
|
S
t
Pat
pat
::
k
=>
close
k
(
pat
::
ps
)
|
S
t
AlwaysElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close
k
(
IAlwaysElim
p
::
ps
)
|
S
t
ModalElim
::
k
=>
''
(
p
,
ps
)
←
maybe2
(
::
)
ps
;
close
k
(
IModalElim
p
::
ps
)
|
_
=>
None
end
.
...
...
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