-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathTactic.lp
More file actions
83 lines (54 loc) · 1.92 KB
/
Tactic.lp
File metadata and controls
83 lines (54 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// define a type representing Lambdapi tactics
require open Stdlib.String Stdlib.Option Stdlib.List;
constant symbol Tactic : TYPE;
// mandatory builtins
constant symbol #admit : Tactic;
builtin "admit" ≔ #admit;
symbol & : Tactic → Tactic → Tactic;
builtin "and" ≔ &;
notation & infix right 10;
constant symbol #apply [p] : π p → Tactic;
builtin "apply" ≔ #apply;
constant symbol #assume : String → Tactic;
builtin "assume" ≔ #assume;
constant symbol #fail : Tactic;
builtin "fail" ≔ #fail;
constant symbol #generalize : Π [a], τ a → Tactic;
builtin "generalize" ≔ #generalize;
constant symbol #have : String → Prop → Tactic;
builtin "have" ≔ #have;
constant symbol #induction : Tactic;
builtin "induction" ≔ #induction;
constant symbol #orelse : Tactic → Tactic → Tactic;
builtin "orelse" ≔ #orelse;
constant symbol #refine [p] : π p → Tactic;
builtin "refine" ≔ #refine;
constant symbol #reflexivity : Tactic;
builtin "reflexivity" ≔ #reflexivity;
constant symbol #remove : Π [a], π a → Tactic;
builtin "remove" ≔ #remove;
constant symbol #repeat : Tactic → Tactic;
builtin "repeat" ≔ #repeat;
constant symbol #rewrite [p] : π p → Tactic;
builtin "rewrite" ≔ #rewrite;
constant symbol #set : String → Π [a], τ a → Tactic;
builtin "set" ≔ #set;
constant symbol #simplify : Tactic;
builtin "simplify" ≔ #simplify;
constant symbol #simplify_beta : Tactic;
builtin "simplify rule off" ≔ #simplify_beta;
constant symbol #solve : Tactic;
builtin "solve" ≔ #solve;
constant symbol #symmetry : Tactic;
builtin "symmetry" ≔ #symmetry;
constant symbol #try : Tactic → Tactic;
builtin "try" ≔ #try;
constant symbol #why3 : Tactic;
builtin "why3" ≔ #why3;
// defined tactics
symbol nothing ≔ #try #fail;
require open Stdlib.Nat;
symbol times : ℕ → Tactic → Tactic;
notation times infix 20;
rule 0 times _ ↪ nothing
with $n +1 times $t ↪ $t & $n times $t;