Skip to content

Commit b620e3e

Browse files
remove unfolded versions of derive
1 parent cacd31a commit b620e3e

2 files changed

Lines changed: 14 additions & 59 deletions

File tree

Validator/Regex/Room.lean

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -14,58 +14,7 @@ def derive {σ: Type}
1414
let pred_results: Vec Bool (Symbol.num r) := Vec.map symbols Φ
1515
Leave.leave r pred_results
1616

17-
def derive_unfolded {σ: Type}
18-
(Φ: σ -> Bool) (r: Regex σ): Regex σ :=
19-
Regex.Point.derive
20-
(Symbol.replaceFrom
21-
(Symbol.extractFrom r).1
22-
(Vec.zip
23-
(Symbol.extractFrom r).2
24-
(Vec.map
25-
(Symbol.extractFrom r).2
26-
Φ
27-
)
28-
)
29-
)
30-
3117
def derive_unapplied {σ: Type} {α: Type} (Φ: σ -> α -> Bool) (r: Regex σ) (a: α): Regex σ :=
3218
let symbols: Vec σ (Symbol.num r) := Enter.enter r
3319
let pred_results: Vec Bool (Symbol.num r) := Vec.map symbols (flip Φ a)
3420
Leave.leave r pred_results
35-
36-
def derive_unapplied_unfolded {σ: Type} {α: Type} (Φ: σ -> α -> Bool) (r: Regex σ) (a: α): Regex σ :=
37-
let (r', symbols): (Symbol.RegexID (Symbol.num r) × Vec σ (Symbol.num r)) := Symbol.extractFrom r
38-
let pred_results: Vec Bool (Symbol.num r) := Vec.map symbols (fun s => Φ s a)
39-
let replaces: Vec (σ × Bool) (Symbol.num r) := Vec.zip symbols pred_results
40-
let replaced: Regex (σ × Bool) := Symbol.replaceFrom r' replaces
41-
Regex.Point.derive replaced
42-
43-
theorem derive_is_derive_unfolded (Φ: σ -> Bool) (r: Regex σ):
44-
derive Φ r = derive_unfolded Φ r := by
45-
simp only [derive, derive_unfolded, Enter.enter, Leave.leave]
46-
47-
theorem derive_unapplied_is_derive_unapplied_unfolded (Φ: σ -> α -> Bool) (r: Regex σ):
48-
derive_unapplied Φ r = derive_unapplied_unfolded Φ r := by
49-
unfold derive_unapplied
50-
unfold derive_unapplied_unfolded
51-
unfold flip
52-
simp only [Enter.enter, Leave.leave]
53-
54-
theorem derive_unapplied_unfolded_is_Regex_derive
55-
{σ: Type} {α: Type} (Φ: σ -> α -> Bool) (r: Regex σ) (a: α):
56-
Room.derive_unapplied_unfolded Φ r a = Regex.derive Φ r a := by
57-
unfold Room.derive_unapplied_unfolded
58-
simp only
59-
rw [<- Vec.zip_map]
60-
rw [<- Symbol.extractFrom_replaceFrom_is_fmap]
61-
rw [Regex.Point.derive_is_point_derive]
62-
63-
theorem derive_unfolded_is_derive_unapplied_unfolded
64-
(p: σ -> Bool) (r: Regex σ) (a: α):
65-
Room.derive_unfolded p r = Room.derive_unapplied_unfolded (fun s _ => p s) r a := by
66-
rfl
67-
68-
theorem derive_unapplied_unfolded_is_derive_unfolded
69-
(p: σ -> α -> Bool) (r: Regex σ) (a: α):
70-
Room.derive_unapplied_unfolded p r a = Room.derive_unfolded (fun s => p s a) r := by
71-
rfl

Validator/Regex/Symbol.lean

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,10 @@ import Validator.Regex.Room
1515
namespace Symbol
1616

1717
def derives {σ: Type} {α: Type} (Φ: σ -> α -> Bool) (rs: Vec (Regex σ) l) (a: α): Vec (Regex σ) l :=
18-
let (rs', symbols): (Vec (RegexID (Symbol.nums rs)) l × Vec σ (Symbol.nums rs)) := Symbol.extractsFrom rs
18+
let symbols: Vec σ (Symbol.nums rs) := Enter.enters rs
1919
let pred_results: Vec Bool (Symbol.nums rs) := Vec.map symbols (fun s => Φ s a)
20-
let replaces: Vec (σ × Bool) (Symbol.nums rs) := Vec.zip symbols pred_results
21-
let replaced: Vec (Regex (σ × Bool)) l := replacesFrom rs' replaces
22-
Regex.Point.derives replaced
20+
let res: Vec (Regex σ) l := Leave.leaves rs pred_results
21+
res
2322

2423
-- derives_preds unlike derives takes a predicate that works out the full vector of predicates.
2524
-- 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.
@@ -47,11 +46,16 @@ def derives_closure {σ: Type}
4746

4847
theorem Symbol_derives_is_fmap
4948
{σ: Type} {α: Type} (Φ: σ -> α -> Bool) (rs: Vec (Regex σ) l) (a: α):
50-
Symbol.derives Φ rs a = Vec.map rs (fun r => Room.derive_unapplied_unfolded Φ r a) := by
49+
Symbol.derives Φ rs a = Vec.map rs (fun r => Room.derive_unapplied Φ r a) := by
5150
unfold Symbol.derives
51+
unfold Enter.enters
52+
unfold Leave.leaves
5253
simp only
5354
unfold Regex.Point.derives
54-
unfold Room.derive_unapplied_unfolded
55+
unfold Room.derive_unapplied
56+
unfold Enter.enter
57+
unfold Leave.leave
58+
unfold flip
5559
nth_rewrite 2 [<- Vec.map_map]
5660
nth_rewrite 1 [<- Vec.map_map]
5761
apply (congrArg (fun xs => Vec.map xs Regex.Point.derive))
@@ -67,11 +71,13 @@ theorem Symbol_derives_is_Regex_derives
6771
(r: Vec (Regex σ) l) (a: α):
6872
Symbol.derives Φ r a = Regex.map_derive Φ r a := by
6973
rw [Symbol_derives_is_fmap]
70-
unfold Room.derive_unapplied_unfolded
74+
unfold Room.derive_unapplied
75+
unfold flip
76+
unfold Enter.enter
77+
unfold Leave.leave
7178
unfold Regex.map_derive
7279
congr
7380
funext r
74-
simp only
7581
simp only [<- Vec.zip_map]
7682
rw [<- extractFrom_replaceFrom_is_fmap]
7783
rw [Regex.Point.derive_is_point_derive]

0 commit comments

Comments
 (0)