File tree Expand file tree Collapse file tree 2 files changed +21
-25
lines changed
Expand file tree Collapse file tree 2 files changed +21
-25
lines changed Original file line number Diff line number Diff line change @@ -37,23 +37,12 @@ theorem derive_is_closure_derive (Φ: σ -> α -> Bool) (r: Regex σ) (a: α):
3737 simp only [Regex.derive, Regex.Closure.derive]
3838 rw [ih1]
3939
40- theorem closure_derive_is_derive (Φ: σ -> Bool) (r: Regex σ) (a: α):
41- Regex.Closure.derive Φ r = Regex.derive (fun s _ => Φ s) r a := by
42- induction r with
43- | emptyset =>
44- simp only [Regex.derive, Regex.Closure.derive]
45- | emptystr =>
46- simp only [Regex.derive, Regex.Closure.derive]
47- | symbol s =>
48- simp only [Regex.derive, Regex.Closure.derive]
49- | or r1 r2 ih1 ih2 =>
50- simp only [Regex.derive, Regex.Closure.derive]
51- rw [ih1]
52- rw [ih2]
53- | concat r1 r2 ih1 ih2 =>
54- simp only [Regex.derive, Regex.Closure.derive]
55- rw [ih1]
56- rw [ih2]
57- | star r1 ih1 =>
58- simp only [Regex.derive, Regex.Closure.derive]
59- rw [ih1]
40+ theorem derive_commutesb {σ: Type } {α: Type } (Φ: σ -> α -> Bool) (r: Regex σ) (a: α):
41+ denote (fun s a => Φ s a) (Regex.Closure.derive (fun s => Φ s a) r) = Language.derive (denote (fun s a => Φ s a) r) a := by
42+ rw [<- derive_is_closure_derive]
43+ rw [<- Regex.derive_commutesb]
44+
45+ theorem derive_commutesb' {σ: Type } {α: Type } (Φ: σ -> α -> Bool) (r: Regex σ) (a: α):
46+ denote (fun s a => Φ s a) (Regex.Closure.derive (fun s => Φ s a) r) = Language.derive (denote (fun s a => Φ s a) r) a := by
47+ rw [<- derive_is_closure_derive]
48+ rw [<- Regex.derive_commutesb]
Original file line number Diff line number Diff line change @@ -12,15 +12,15 @@ inductive Regex (σ: Type) where
1212 | star (p: Regex σ)
1313 deriving DecidableEq, Ord, Repr, Hashable
1414
15- instance [Ord α ]: Ord (Regex α ) := inferInstance
15+ instance [Ord σ ]: Ord (Regex σ ) := inferInstance
1616
17- instance [Repr α ]: Repr (Regex α ) := inferInstance
17+ instance [Repr σ ]: Repr (Regex σ ) := inferInstance
1818
19- instance [DecidableEq α ]: DecidableEq (Regex α ) := inferInstance
19+ instance [DecidableEq σ ]: DecidableEq (Regex σ ) := inferInstance
2020
21- instance [DecidableEq α ]: BEq (Regex α ) := inferInstance
21+ instance [DecidableEq σ ]: BEq (Regex σ ) := inferInstance
2222
23- instance [Hashable α ]: Hashable (Regex α ) := inferInstance
23+ instance [Hashable σ ]: Hashable (Regex σ ) := inferInstance
2424
2525namespace Regex
2626
@@ -200,3 +200,10 @@ theorem derive_commutes {σ: Type} {α: Type} (Φ: σ -> α -> Prop) [DecidableR
200200 congrm ((Language.concat_n ?_ (Language.star_n (denote Φ r))))
201201 guard_target = denote Φ (derive (fun s a => Φ s a) r x) = Language.derive (denote Φ r) x
202202 exact ih
203+
204+ theorem derive_commutesb {σ: Type } {α: Type } (Φ: σ -> α -> Bool) (r: Regex σ) (x: α):
205+ denote (fun s a => Φ s a) (derive (fun s a => Φ s a) r x) = Language.derive (denote (fun s a => Φ s a) r) x := by
206+ rw [<- derive_commutes]
207+ congr
208+ funext s a
209+ simp only [Bool.decide_eq_true]
You can’t perform that action at this time.
0 commit comments