Apply
This commit is contained in:
parent
b9d507b650
commit
5af07fff8d
@ -18,5 +18,6 @@ and token_tactic = parse
|
|||||||
| eof { EOF }
|
| eof { EOF }
|
||||||
| "intro" { INTRO }
|
| "intro" { INTRO }
|
||||||
| "assumption" { ASSUMPTION }
|
| "assumption" { ASSUMPTION }
|
||||||
|
| "apply" { APPLY }
|
||||||
| ['a'-'z']+['0'-'9']* as s { VAR_NAME s }
|
| ['a'-'z']+['0'-'9']* as s { VAR_NAME s }
|
||||||
| '.' { DOT }
|
| '.' { DOT }
|
||||||
|
|||||||
13
main.ml
13
main.ml
@ -119,6 +119,19 @@ while !subgoals <> [] do
|
|||||||
in
|
in
|
||||||
explore hyps
|
explore hyps
|
||||||
)
|
)
|
||||||
|
| Apply var -> (
|
||||||
|
let rec explore = function
|
||||||
|
| (var_hyp, TImpl (t1, t2)) :: _ when var_hyp = var && t2 = ty -> (
|
||||||
|
subgoals := (t1, hyps) :: !subgoals;
|
||||||
|
fill_holes := function
|
||||||
|
| hole :: holes -> f ((LApp (LVar var_hyp, hole)) :: holes)
|
||||||
|
| [] -> fail ()
|
||||||
|
)
|
||||||
|
| [] -> failwith ("Hypothesis " ^ var ^ " not found or unusable")
|
||||||
|
| _ :: hyps -> explore hyps
|
||||||
|
in
|
||||||
|
explore hyps;
|
||||||
|
)
|
||||||
done;
|
done;
|
||||||
|
|
||||||
Printf.printf "Final proof :\n%s\n" (string_of_lam (!fill_holes []));;
|
Printf.printf "Final proof :\n%s\n" (string_of_lam (!fill_holes []));;
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
%token <string> VAR_NAME
|
%token <string> VAR_NAME
|
||||||
%token <string> TYPE_NAME
|
%token <string> TYPE_NAME
|
||||||
|
|
||||||
%token DOT INTRO ASSUMPTION
|
%token DOT INTRO ASSUMPTION APPLY
|
||||||
|
|
||||||
/* L'ordre de définition définit la priorité */
|
/* L'ordre de définition définit la priorité */
|
||||||
%right RARROW
|
%right RARROW
|
||||||
@ -39,3 +39,4 @@ main_tactic:
|
|||||||
tactic:
|
tactic:
|
||||||
| INTRO VAR_NAME DOT { Intro $2 }
|
| INTRO VAR_NAME DOT { Intro $2 }
|
||||||
| ASSUMPTION DOT { Assumption }
|
| ASSUMPTION DOT { Assumption }
|
||||||
|
| APPLY VAR_NAME DOT { Apply $2 }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user