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
Toggle navigation
Open sidebar
pub
frama-c
Commits
6684c86a
Commit
6684c86a
authored
Nov 04, 2020
by
Allan Blanchard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[wp] No selectors for Inf/Sup in induction tactic
parent
7b0a228d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
17 additions
and
35 deletions
+17
-35
src/plugins/wp/TacInduction.ml
src/plugins/wp/TacInduction.ml
+10
-24
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.0.session/script/lemma_ByInd.json
...oracle_qualif/induction.0.session/script/lemma_ByInd.json
+5
-7
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.1.session/script/lemma_ByInd.json
...oracle_qualif/induction.1.session/script/lemma_ByInd.json
+1
-2
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.2.session/script/lemma_ByInd.json
...oracle_qualif/induction.2.session/script/lemma_ByInd.json
+1
-2
No files found.
src/plugins/wp/TacInduction.ml
View file @
6684c86a
...
...
@@ -37,14 +37,13 @@ let rec strip env p =
(
env
.
hind
<-
p
::
env
.
hind
;
F
.
p_true
)
else
p
let
process
value
n0
~
inf
~
sup
seq
=
let
process
value
n0
seq
=
(* Transfrom seq into: hyps => (forall n, goal) *)
let
n
=
Lang
.
freshvar
~
basename
:
"n"
Qed
.
Logic
.
Int
in
let
i
=
Lang
.
freshvar
~
basename
:
"i"
Qed
.
Logic
.
Int
in
let
vn
=
F
.
e_var
n
in
let
vi
=
F
.
e_var
i
in
let
v0
=
n0
in
let
sigma
=
Lang
.
sigma
()
in
F
.
Subst
.
add
sigma
value
vn
;
let
env
=
{
n
;
sigma
;
hind
=
[]
}
in
...
...
@@ -53,25 +52,19 @@ let process value n0 ~inf ~sup seq =
let
goal_i
=
F
.
p_subst_var
n
vi
goal_n
in
(* Base: n = n0 *)
let
goal_base
=
F
.
p_imply
(
F
.
p_equal
vn
v
0
)
goal_n
in
let
goal_base
=
F
.
p_imply
(
F
.
p_equal
vn
n
0
)
goal_n
in
(* Hind: n0 <= i < n *)
let
goal_sup
=
if
sup
then
let
hsup
=
[
F
.
p_leq
v0
vi
;
F
.
p_lt
vi
vn
]
in
let
hind
=
F
.
p_forall
[
i
]
(
F
.
p_hyps
hsup
goal_i
)
in
F
.
p_hyps
[
F
.
p_lt
v0
vn
;
hind
]
goal_n
else
F
.
p_leq
value
v0
in
let
hsup
=
[
F
.
p_leq
n0
vi
;
F
.
p_lt
vi
vn
]
in
let
hind
=
F
.
p_forall
[
i
]
(
F
.
p_hyps
hsup
goal_i
)
in
F
.
p_hyps
[
F
.
p_lt
n0
vn
;
hind
]
goal_n
in
(* Hind: n < i <= n0 *)
let
goal_inf
=
if
inf
then
let
hinf
=
[
F
.
p_lt
vn
vi
;
F
.
p_leq
vi
v0
]
in
let
hind
=
F
.
p_forall
[
i
]
(
F
.
p_hyps
hinf
goal_i
)
in
F
.
p_hyps
[
F
.
p_lt
vn
v0
;
hind
]
goal_n
else
F
.
p_leq
v0
value
in
let
hinf
=
[
F
.
p_lt
vn
vi
;
F
.
p_leq
vi
n0
]
in
let
hind
=
F
.
p_forall
[
i
]
(
F
.
p_hyps
hinf
goal_i
)
in
F
.
p_hyps
[
F
.
p_lt
vn
n0
;
hind
]
goal_n
in
(* All Cases *)
List
.
map
(
fun
(
name
,
goal
)
->
name
,
(
hyps
,
goal
))
[
...
...
@@ -86,10 +79,6 @@ let process value n0 ~inf ~sup seq =
let
vbase
,
pbase
=
Tactical
.
composer
~
id
:
"base"
~
title
:
"Base"
~
descr
:
"Value of base case"
()
let
vsup
,
psup
=
Tactical
.
checkbox
~
id
:
"hsup"
~
title
:
"Sup"
~
descr
:
"Induction over base <= n"
~
default
:
true
()
let
vinf
,
pinf
=
Tactical
.
checkbox
~
id
:
"hinf"
~
title
:
"Inf"
~
descr
:
"Induction over n <= base"
~
default
:
true
()
class
induction
=
object
(
self
)
...
...
@@ -97,7 +86,7 @@ class induction =
~
id
:
"Wp.induction"
~
title
:
"Induction"
~
descr
:
"Proof by integer induction"
~
params
:
[
pbase
;
psup
;
pinf
]
~
params
:
[
pbase
]
method
private
get_base
()
=
match
self
#
get_field
vbase
with
...
...
@@ -113,10 +102,7 @@ class induction =
let
value
=
Tactical
.
selected
s
in
if
F
.
is_int
value
then
match
self
#
get_base
()
with
|
Some
base
->
let
inf
=
self
#
get_field
vinf
in
let
sup
=
self
#
get_field
vsup
in
Applicable
(
process
value
base
~
inf
~
sup
)
|
Some
base
->
Applicable
(
process
value
base
)
|
None
->
Not_configured
else
Not_applicable
...
...
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.0.session/script/lemma_ByInd.json
View file @
6684c86a
[
{
"prover"
:
"script"
,
"verdict"
:
"valid"
},
{
"header"
:
"Induction"
,
"tactic"
:
"Wp.induction"
,
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
},
"hsup"
:
true
,
"hinf"
:
true
},
[
{
"header"
:
"Induction"
,
"tactic"
:
"Wp.induction"
,
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
}
},
"select"
:
{
"select"
:
"inside-goal"
,
"occur"
:
0
,
"target"
:
"(L_f x_0)"
,
"pattern"
:
"L_f$x"
},
"children"
:
{
"Base"
:
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
"verdict"
:
"valid"
,
"time"
:
0.004
4
,
"steps"
:
6
}
],
"time"
:
0.004
7
,
"steps"
:
6
}
],
"Induction (sup)"
:
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
"verdict"
:
"valid"
,
"time"
:
0.00
35
,
"verdict"
:
"valid"
,
"time"
:
0.00
41
,
"steps"
:
21
}
],
"Induction (inf)"
:
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
"verdict"
:
"valid"
,
"time"
:
0.00
67
,
"verdict"
:
"valid"
,
"time"
:
0.00
54
,
"steps"
:
20
}
]
}
}
]
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.1.session/script/lemma_ByInd.json
View file @
6684c86a
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
"verdict"
:
"unknown"
},
{
"prover"
:
"script"
,
"verdict"
:
"unknown"
},
{
"header"
:
"Induction"
,
"tactic"
:
"Wp.induction"
,
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
},
"hsup"
:
true
,
"hinf"
:
true
},
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
}
},
"select"
:
{
"select"
:
"inside-goal"
,
"occur"
:
0
,
"target"
:
"x_0"
,
"pattern"
:
"$x"
},
"children"
:
{
"Base"
:
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
...
...
src/plugins/wp/tests/wp_tip/oracle_qualif/induction.2.session/script/lemma_ByInd.json
View file @
6684c86a
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
"verdict"
:
"unknown"
},
{
"prover"
:
"script"
,
"verdict"
:
"unknown"
},
{
"header"
:
"Induction"
,
"tactic"
:
"Wp.induction"
,
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
},
"hsup"
:
true
,
"hinf"
:
true
},
"params"
:
{
"base"
:
{
"select"
:
"kint"
,
"val"
:
"0"
}
},
"select"
:
{
"select"
:
"inside-goal"
,
"occur"
:
0
,
"target"
:
"y_0"
,
"pattern"
:
"$y"
},
"children"
:
{
"Base"
:
[
{
"prover"
:
"Alt-Ergo:2.2.0"
,
...
...
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