|
1 | 1 | import Validator.Std.Vec |
2 | 2 |
|
| 3 | +import Validator.Regex.Enter |
3 | 4 | import Validator.Regex.Extract |
| 5 | +import Validator.Regex.Leave |
4 | 6 | import Validator.Regex.Map |
5 | 7 | import Validator.Regex.Num |
6 | 8 | import Validator.Regex.Point |
@@ -61,47 +63,35 @@ def derives {σ: Type} {α: Type} (Φ: σ -> α -> Bool) (rs: Vec (Regex σ) l) |
61 | 63 | let replaced: Vec (Regex (σ × Bool)) l := replacesFrom rs' replaces |
62 | 64 | Regex.Point.derives replaced |
63 | 65 |
|
64 | | -def leave |
65 | | - (rs: Vec (Regex σ) l) |
66 | | - (ps: Vec Bool (Symbol.nums rs)) |
67 | | - : (Vec (Regex σ) l) := |
68 | | - let replaces: Vec (σ × Bool) (Symbol.nums rs) := Vec.zip (Symbol.extractsFrom rs).2 ps |
69 | | - let replaced: Vec (Regex (σ × Bool)) l := replacesFrom (Symbol.extractsFrom rs).1 replaces |
70 | | - Regex.Point.derives replaced |
71 | | - |
72 | | -def enter (rs: Vec (Regex σ) l): Vec σ (Symbol.nums rs) := |
73 | | - let (_, symbols): (Vec (RegexID (Symbol.nums rs)) l × Vec σ (Symbol.nums rs)) := Symbol.extractsFrom rs |
74 | | - symbols |
75 | | - |
76 | 66 | -- derives_preds unlike derives takes a predicate that works out the full vector of predicates. |
77 | 67 | -- This gives the predicate control over the evaluation order of α, for example α is a tree, we can first evaluate the same label, before traversing down. |
78 | 68 | def derives_preds {σ: Type} {α: Type} |
79 | 69 | (ps: {n: Nat} -> Vec σ n -> α -> Vec Bool n) (rs: Vec (Regex σ) l) (a: α): Vec (Regex σ) l := |
80 | | - let symbols: Vec σ (Symbol.nums rs) := enter rs |
| 70 | + let symbols: Vec σ (Symbol.nums rs) := Enter.deriveEnter rs |
81 | 71 | let pred_results: Vec Bool (Symbol.nums rs) := ps symbols a |
82 | | - leave rs pred_results |
| 72 | + Leave.deriveLeaves rs pred_results |
83 | 73 |
|
84 | 74 | def derives_closures {σ: Type} |
85 | 75 | (ps: {n: Nat} -> Vec σ n -> Vec Bool n) (rs: Vec (Regex σ) l): Vec (Regex σ) l := |
86 | | - let symbols: Vec σ (Symbol.nums rs) := enter rs |
| 76 | + let symbols: Vec σ (Symbol.nums rs) := Enter.deriveEnter rs |
87 | 77 | let pred_results: Vec Bool (Symbol.nums rs) := ps symbols |
88 | | - leave rs pred_results |
| 78 | + Leave.deriveLeaves rs pred_results |
89 | 79 |
|
90 | 80 | def derives_closures' {σ: Type} |
91 | 81 | (ps: {n: Nat} -> Vec σ n -> Vec Bool n) (rs: Vec (Regex σ) l): Vec (Regex σ) l := |
92 | | - leave rs (ps (enter rs)) |
| 82 | + Leave.deriveLeaves rs (ps (Enter.deriveEnter rs)) |
93 | 83 |
|
94 | 84 | def derives_closure {σ: Type} |
95 | 85 | (p: σ -> Bool) (rs: Vec (Regex σ) l): Vec (Regex σ) l := |
96 | | - let symbols: Vec σ (Symbol.nums rs) := enter rs |
| 86 | + let symbols: Vec σ (Symbol.nums rs) := Enter.deriveEnter rs |
97 | 87 | let pred_results: Vec Bool (Symbol.nums rs) := Vec.map symbols p |
98 | | - leave rs pred_results |
| 88 | + Leave.deriveLeaves rs pred_results |
99 | 89 |
|
100 | 90 | def derive_closure {σ: Type} |
101 | 91 | (p: σ -> Bool) (r: Regex σ): Regex σ := |
102 | | - let symbols: Vec σ (Symbol.nums #vec[r]) := enter #vec[r] |
| 92 | + let symbols: Vec σ (Symbol.nums #vec[r]) := Enter.deriveEnter #vec[r] |
103 | 93 | let pred_results: Vec Bool (Symbol.nums #vec[r]) := Vec.map symbols p |
104 | | - let res := (leave #vec[r] pred_results) |
| 94 | + let res := (Leave.deriveLeaves #vec[r] pred_results) |
105 | 95 | match res with |
106 | 96 | | Vec.cons res' Vec.nil => res' |
107 | 97 |
|
@@ -423,8 +413,8 @@ theorem Symbol_derives_is_derives_preds |
423 | 413 | simp only |
424 | 414 | rw [<- h] |
425 | 415 | unfold derives_preds |
426 | | - unfold leave |
427 | | - unfold enter |
| 416 | + unfold Leave.deriveLeaves |
| 417 | + unfold Enter.deriveEnter |
428 | 418 | simp only |
429 | 419 |
|
430 | 420 | theorem Symbol_derives_preds_is_derives_closures |
|
0 commit comments