Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Iris
Iris
Commits
60d82286
Commit
60d82286
authored
Jan 05, 2017
by
Ralf Jung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more restrictive Proof Using hints in heap_lang, proofmode, tests
parent
6db2ae8e
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
43 additions
and
38 deletions
+43
-38
theories/heap_lang/adequacy.v
theories/heap_lang/adequacy.v
+1
-1
theories/heap_lang/lang.v
theories/heap_lang/lang.v
+1
-1
theories/heap_lang/lib/assert.v
theories/heap_lang/lib/assert.v
+1
-1
theories/heap_lang/lib/barrier/barrier.v
theories/heap_lang/lib/barrier/barrier.v
+1
-1
theories/heap_lang/lib/barrier/proof.v
theories/heap_lang/lib/barrier/proof.v
+1
-1
theories/heap_lang/lib/barrier/protocol.v
theories/heap_lang/lib/barrier/protocol.v
+1
-1
theories/heap_lang/lib/barrier/specification.v
theories/heap_lang/lib/barrier/specification.v
+3
-2
theories/heap_lang/lib/counter.v
theories/heap_lang/lib/counter.v
+1
-1
theories/heap_lang/lib/lock.v
theories/heap_lang/lib/lock.v
+1
-1
theories/heap_lang/lib/par.v
theories/heap_lang/lib/par.v
+2
-1
theories/heap_lang/lib/spawn.v
theories/heap_lang/lib/spawn.v
+1
-1
theories/heap_lang/lib/spin_lock.v
theories/heap_lang/lib/spin_lock.v
+1
-1
theories/heap_lang/lib/ticket_lock.v
theories/heap_lang/lib/ticket_lock.v
+1
-1
theories/heap_lang/lifting.v
theories/heap_lang/lifting.v
+1
-1
theories/heap_lang/notation.v
theories/heap_lang/notation.v
+1
-1
theories/heap_lang/proofmode.v
theories/heap_lang/proofmode.v
+1
-1
theories/heap_lang/tactics.v
theories/heap_lang/tactics.v
+1
-1
theories/proofmode/class_instances.v
theories/proofmode/class_instances.v
+1
-1
theories/proofmode/classes.v
theories/proofmode/classes.v
+1
-1
theories/proofmode/coq_tactics.v
theories/proofmode/coq_tactics.v
+1
-1
theories/proofmode/environments.v
theories/proofmode/environments.v
+1
-1
theories/proofmode/intro_patterns.v
theories/proofmode/intro_patterns.v
+1
-1
theories/proofmode/notation.v
theories/proofmode/notation.v
+1
-1
theories/proofmode/sel_patterns.v
theories/proofmode/sel_patterns.v
+1
-1
theories/proofmode/spec_patterns.v
theories/proofmode/spec_patterns.v
+1
-1
theories/proofmode/strings.v
theories/proofmode/strings.v
+1
-1
theories/proofmode/tactics.v
theories/proofmode/tactics.v
+1
-1
theories/tests/barrier_client.v
theories/tests/barrier_client.v
+3
-2
theories/tests/counter.v
theories/tests/counter.v
+1
-1
theories/tests/heap_lang.v
theories/tests/heap_lang.v
+1
-1
theories/tests/joining_existentials.v
theories/tests/joining_existentials.v
+3
-2
theories/tests/list_reverse.v
theories/tests/list_reverse.v
+1
-1
theories/tests/one_shot.v
theories/tests/one_shot.v
+2
-1
theories/tests/proofmode.v
theories/tests/proofmode.v
+1
-1
theories/tests/tree_sum.v
theories/tests/tree_sum.v
+1
-1
No files found.
theories/heap_lang/adequacy.v
View file @
60d82286
...
...
@@ -3,7 +3,7 @@ From iris.heap_lang Require Export lifting.
From
iris
.
algebra
Require
Import
auth
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
proofmode
Require
Import
tactics
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Class
heapPreG
Σ
:
=
HeapPreG
{
heap_preG_iris
:
>
invPreG
Σ
;
...
...
theories/heap_lang/lang.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export ectx_language ectxi_language.
From
iris
.
algebra
Require
Export
ofe
.
From
iris
.
prelude
Require
Export
strings
.
From
iris
.
prelude
Require
Import
gmap
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Module
heap_lang
.
Open
Scope
Z_scope
.
...
...
theories/heap_lang/lib/assert.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
assert
:
val
:
=
λ
:
"v"
,
if
:
"v"
#()
then
#()
else
#
0
#
0
.
(* #0 #0 is unsafe *)
...
...
theories/heap_lang/lib/barrier/barrier.v
View file @
60d82286
From
iris
.
heap_lang
Require
Export
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
newbarrier
:
val
:
=
λ
:
<>,
ref
#
false
.
Definition
signal
:
val
:
=
λ
:
"x"
,
"x"
<-
#
true
.
...
...
theories/heap_lang/lib/barrier/proof.v
View file @
60d82286
...
...
@@ -5,7 +5,7 @@ From iris.prelude Require Import functions.
From
iris
.
base_logic
Require
Import
big_op
lib
.
saved_prop
lib
.
sts
.
From
iris
.
heap_lang
Require
Import
proofmode
.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Import
protocol
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
(** The CMRAs/functors we need. *)
(* Not bundling heapG, as it may be shared with other users. *)
...
...
theories/heap_lang/lib/barrier/protocol.v
View file @
60d82286
From
iris
.
algebra
Require
Export
sts
.
From
iris
.
base_logic
Require
Import
lib
.
own
.
From
iris
.
prelude
Require
Export
gmap
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
(** The STS describing the main barrier protocol. Every state has an index-set
associated with it. These indices are actually [gname], because we use them
...
...
theories/heap_lang/lib/barrier/specification.v
View file @
60d82286
...
...
@@ -2,11 +2,12 @@ From iris.program_logic Require Export hoare.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Export
barrier
.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Import
proof
.
From
iris
.
heap_lang
Require
Import
proofmode
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Section
spec
.
Context
`
{!
heapG
Σ
}
`
{!
barrierG
Σ
}.
Set
Default
Proof
Using
"Type*"
.
Context
`
{!
heapG
Σ
,
!
barrierG
Σ
}.
Lemma
barrier_spec
(
N
:
namespace
)
:
∃
recv
send
:
loc
→
iProp
Σ
-
n
>
iProp
Σ
,
...
...
theories/heap_lang/lib/counter.v
View file @
60d82286
...
...
@@ -4,7 +4,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
algebra
Require
Import
frac
auth
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
newcounter
:
val
:
=
λ
:
<>,
ref
#
0
.
Definition
incr
:
val
:
=
rec
:
"incr"
"l"
:
=
...
...
theories/heap_lang/lib/lock.v
View file @
60d82286
From
iris
.
heap_lang
Require
Export
lifting
notation
.
From
iris
.
base_logic
.
lib
Require
Export
invariants
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Structure
lock
Σ
`
{!
heapG
Σ
}
:
=
Lock
{
(* -- operations -- *)
...
...
theories/heap_lang/lib/par.v
View file @
60d82286
From
iris
.
heap_lang
Require
Export
spawn
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Definition
parN
:
namespace
:
=
nroot
.@
"par"
.
...
...
@@ -14,6 +14,7 @@ Definition par : val :=
Notation
"e1 ||| e2"
:
=
(
par
(
Pair
(
λ
:
<>,
e1
)
(
λ
:
<>,
e2
)))%
E
:
expr_scope
.
Section
proof
.
Set
Default
Proof
Using
"Type*"
.
Context
`
{!
heapG
Σ
,
!
spawnG
Σ
}.
(* Notice that this allows us to strip a later *after* the two Ψ have been
...
...
theories/heap_lang/lib/spawn.v
View file @
60d82286
...
...
@@ -4,7 +4,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
excl
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
spawn
:
val
:
=
λ
:
"f"
,
...
...
theories/heap_lang/lib/spin_lock.v
View file @
60d82286
...
...
@@ -4,7 +4,7 @@ From iris.proofmode Require Import tactics.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
excl
.
From
iris
.
heap_lang
.
lib
Require
Import
lock
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
newlock
:
val
:
=
λ
:
<>,
ref
#
false
.
Definition
try_acquire
:
val
:
=
λ
:
"l"
,
CAS
"l"
#
false
#
true
.
...
...
theories/heap_lang/lib/ticket_lock.v
View file @
60d82286
...
...
@@ -4,7 +4,7 @@ From iris.proofmode Require Import tactics.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
auth
gset
.
From
iris
.
heap_lang
.
lib
Require
Export
lock
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Definition
wait_loop
:
val
:
=
...
...
theories/heap_lang/lifting.v
View file @
60d82286
...
...
@@ -5,7 +5,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
heap_lang
Require
Import
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
prelude
Require
Import
fin_maps
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
(** Basic rules for language operations. *)
...
...
theories/heap_lang/notation.v
View file @
60d82286
From
iris
.
program_logic
Require
Import
language
.
From
iris
.
heap_lang
Require
Export
lang
tactics
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Coercion
LitInt
:
Z
>->
base_lit
.
Coercion
LitBool
:
bool
>->
base_lit
.
...
...
theories/heap_lang/proofmode.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre.
From
iris
.
proofmode
Require
Import
coq_tactics
.
From
iris
.
proofmode
Require
Export
tactics
.
From
iris
.
heap_lang
Require
Export
tactics
lifting
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
(** wp-specific helper tactics *)
...
...
theories/heap_lang/tactics.v
View file @
60d82286
From
iris
.
heap_lang
Require
Export
lang
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
heap_lang
.
(** We define an alternative representation of expressions in which the
...
...
theories/proofmode/class_instances.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.proofmode Require Export classes.
From
iris
.
algebra
Require
Import
gmap
.
From
iris
.
prelude
Require
Import
gmultiset
.
From
iris
.
base_logic
Require
Import
big_op
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Section
classes
.
...
...
theories/proofmode/classes.v
View file @
60d82286
From
iris
.
base_logic
Require
Export
base_logic
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Section
classes
.
...
...
theories/proofmode/coq_tactics.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.base_logic Require Export base_logic.
From
iris
.
base_logic
Require
Import
big_op
tactics
.
From
iris
.
proofmode
Require
Export
environments
classes
.
From
iris
.
prelude
Require
Import
stringmap
hlist
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Import
env_notations
.
...
...
theories/proofmode/environments.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.prelude Require Export strings.
From
iris
.
proofmode
Require
Import
strings
.
From
iris
.
algebra
Require
Export
base
.
From
iris
.
prelude
Require
Import
stringmap
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Inductive
env
(
A
:
Type
)
:
Type
:
=
|
Enil
:
env
A
...
...
theories/proofmode/intro_patterns.v
View file @
60d82286
From
iris
.
prelude
Require
Export
strings
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Inductive
intro_pat
:
=
|
IName
:
string
→
intro_pat
...
...
theories/proofmode/notation.v
View file @
60d82286
From
iris
.
proofmode
Require
Import
coq_tactics
environments
.
From
iris
.
prelude
Require
Export
strings
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Delimit
Scope
proof_scope
with
env
.
Arguments
Envs
_
_
%
proof_scope
_
%
proof_scope
.
...
...
theories/proofmode/sel_patterns.v
View file @
60d82286
From
iris
.
prelude
Require
Export
strings
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Inductive
sel_pat
:
=
|
SelPure
...
...
theories/proofmode/spec_patterns.v
View file @
60d82286
From
iris
.
prelude
Require
Export
strings
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Record
spec_goal
:
=
SpecGoal
{
spec_goal_modal
:
bool
;
...
...
theories/proofmode/strings.v
View file @
60d82286
From
iris
.
prelude
Require
Import
strings
.
From
iris
.
algebra
Require
Import
base
.
From
Coq
Require
Import
Ascii
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Local
Notation
"b1 && b2"
:
=
(
if
b1
then
b2
else
false
)
:
bool_scope
.
...
...
theories/proofmode/tactics.v
View file @
60d82286
...
...
@@ -5,7 +5,7 @@ From iris.proofmode Require Export classes notation.
From
iris
.
proofmode
Require
Import
class_instances
.
From
iris
.
prelude
Require
Import
stringmap
hlist
.
From
iris
.
proofmode
Require
Import
strings
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Declare
Reduction
env_cbv
:
=
cbv
[
beq
ascii_beq
string_beq
...
...
theories/tests/barrier_client.v
View file @
60d82286
...
...
@@ -3,7 +3,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Import
proof
.
From
iris
.
heap_lang
Require
Import
par
.
From
iris
.
heap_lang
Require
Import
adequacy
proofmode
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
worker
(
n
:
Z
)
:
val
:
=
λ
:
"b"
"y"
,
wait
"b"
;;
!
"y"
#
n
.
...
...
@@ -14,9 +14,10 @@ Definition client : expr :=
(
worker
12
"b"
"y"
|||
worker
17
"b"
"y"
).
Section
client
.
Set
Default
Proof
Using
"Type*"
.
Context
`
{!
heapG
Σ
,
!
barrierG
Σ
,
!
spawnG
Σ
}.
Local
Definition
N
:
=
nroot
.@
"barrier"
.
Definition
N
:
=
nroot
.@
"barrier"
.
Definition
y_inv
(
q
:
Qp
)
(
l
:
loc
)
:
iProp
Σ
:
=
(
∃
f
:
val
,
l
↦
{
q
}
f
∗
□
∀
n
:
Z
,
WP
f
#
n
{{
v
,
⌜
v
=
#(
n
+
42
)
⌝
}})%
I
.
...
...
theories/tests/counter.v
View file @
60d82286
...
...
@@ -8,7 +8,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
program_logic
Require
Export
hoare
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Import
uPred
.
Definition
newcounter
:
val
:
=
λ
:
<>,
ref
#
0
.
...
...
theories/tests/heap_lang.v
View file @
60d82286
...
...
@@ -3,7 +3,7 @@ From iris.program_logic Require Export weakestpre hoare.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
heap_lang
Require
Import
adequacy
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Section
LiftingTests
.
Context
`
{
heapG
Σ
}.
...
...
theories/tests/joining_existentials.v
View file @
60d82286
...
...
@@ -4,7 +4,7 @@ From iris.algebra Require Import excl agree csum.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Import
proof
specification
.
From
iris
.
heap_lang
Require
Import
notation
par
proofmode
.
From
iris
.
proofmode
Require
Import
tactics
.
Set
Default
Proof
Using
"
All
"
.
Set
Default
Proof
Using
"
Type
"
.
Definition
one_shotR
(
Σ
:
gFunctors
)
(
F
:
cFunctor
)
:
=
csumR
(
exclR
unitC
)
(
agreeR
$
laterC
$
F
(
iPreProp
Σ
)).
...
...
@@ -24,6 +24,7 @@ Definition client eM eW1 eW2 : expr :=
(
eM
;;
signal
"b"
)
|||
((
wait
"b"
;;
eW1
)
|||
(
wait
"b"
;;
eW2
)).
Section
proof
.
Set
Default
Proof
Using
"Type*"
.
Context
`
{!
heapG
Σ
,
!
barrierG
Σ
,
!
spawnG
Σ
,
!
oneShotG
Σ
F
}.
Context
(
N
:
namespace
).
Local
Notation
X
:
=
(
F
(
iProp
Σ
)).
...
...
@@ -71,7 +72,7 @@ Lemma client_spec_new eM eW1 eW2 `{!Closed [] eM, !Closed [] eW1, !Closed [] eW2
(
∀
x
,
{{
Φ
1
x
}}
eW1
{{
_
,
Ψ
1
x
}})
-
∗
(
∀
x
,
{{
Φ
2
x
}}
eW2
{{
_
,
Ψ
2
x
}})
-
∗
WP
client
eM
eW1
eW2
{{
_
,
∃
γ
,
barrier_res
γ
Ψ
}}.
Proof
.
Proof
using
All
.
iIntros
"/= HP #He #He1 #He2"
;
rewrite
/
client
.
iMod
(
own_alloc
(
Pending
:
one_shotR
Σ
F
))
as
(
γ
)
"Hγ"
;
first
done
.
wp_apply
(
newbarrier_spec
N
(
barrier_res
γ
Φ
))
;
auto
.
...
...
theories/tests/list_reverse.v
View file @
60d82286
...
...
@@ -3,7 +3,7 @@ From iris.program_logic Require Export weakestpre hoare.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Export
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Section
list_reverse
.
Context
`
{!
heapG
Σ
}.
...
...
theories/tests/one_shot.v
View file @
60d82286
...
...
@@ -3,7 +3,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
algebra
Require
Import
excl
agree
csum
.
From
iris
.
heap_lang
Require
Import
assert
proofmode
notation
.
From
iris
.
proofmode
Require
Import
tactics
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Definition
one_shot_example
:
val
:
=
λ
:
<>,
let
:
"x"
:
=
ref
NONE
in
(
...
...
@@ -30,6 +30,7 @@ Instance subG_one_shotΣ {Σ} : subG one_shotΣ Σ → one_shotG Σ.
Proof
.
intros
[?%
subG_inG
_
]%
subG_inv
.
split
;
apply
_
.
Qed
.
Section
proof
.
Set
Default
Proof
Using
"Type*"
.
Context
`
{!
heapG
Σ
,
!
one_shotG
Σ
}.
Definition
one_shot_inv
(
γ
:
gname
)
(
l
:
loc
)
:
iProp
Σ
:
=
...
...
theories/tests/proofmode.v
View file @
60d82286
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
base_logic
.
lib
Require
Import
invariants
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Lemma
demo_0
{
M
:
ucmraT
}
(
P
Q
:
uPred
M
)
:
□
(
P
∨
Q
)
-
∗
(
∀
x
,
⌜
x
=
0
⌝
∨
⌜
x
=
1
⌝
)
→
(
Q
∨
P
).
...
...
theories/tests/tree_sum.v
View file @
60d82286
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Export
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Set
Default
Proof
Using
"Type
*
"
.
Set
Default
Proof
Using
"Type"
.
Inductive
tree
:
=
|
leaf
:
Z
→
tree
...
...
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