Skip to content

Commit 8105af6

Browse files
Lang and dLang
1 parent 0002f11 commit 8105af6

File tree

4 files changed

+170
-61
lines changed

4 files changed

+170
-61
lines changed

Katydid/Conal/Calculus.lean

+36-35
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
import Katydid.Conal.LanguageNotation
55
import Mathlib.Logic.Equiv.Defs -- ≃
6-
open Lang
6+
import Katydid.Std.Tipe2
7+
open dLang
78
open List
89
open Char
910
open String
@@ -53,21 +54,21 @@ def example_of_proof_relevant_parse2 : (char 'a', (char 'b' ⋃ char 'c')) (toLi
5354

5455
-- ν⇃ : Lang → Set ℓ -- “nullable”
5556
-- ν⇃ P = P []
56-
def ν (P : Lang α) : Type u := -- backslash nu
57+
def ν' (P : dLang α) : Type u := -- backslash nu
5758
P []
5859

5960
-- δ⇃ : Lang → A → Lang -- “derivative”
6061
-- δ⇃ P a w = P (a ∷ w)
61-
def δ (P : Lang α) (a : α) : Lang α := -- backslash delta
62+
def δ' (P : dLang α) (a : α) : dLang α := -- backslash delta
6263
fun (w : List α) => P (a :: w)
6364

64-
attribute [simp] ν δ
65+
attribute [simp] ν' δ'
6566

6667
-- ν∅ : ν ∅ ≡ ⊥
6768
-- ν∅ = refl
6869
theorem nullable_emptySet:
6970
∀ (α: Type),
70-
@ν α ∅ ≡ PEmpty := by
71+
' α ∅ ≡ PEmpty := by
7172
intro α
7273
constructor
7374
rfl
@@ -76,7 +77,7 @@ theorem nullable_emptySet:
7677
-- ν𝒰 = refl
7778
theorem nullable_universal:
7879
∀ (α: Type),
79-
@ν α 𝒰 ≡ PUnit := by
80+
' α 𝒰 ≡ PUnit := by
8081
intro α
8182
constructor
8283
rfl
@@ -89,7 +90,7 @@ theorem nullable_universal:
8990
-- (λ { refl → refl })
9091
theorem nullable_emptyStr:
9192
∀ (α: Type),
92-
@ν α ε ≃ PUnit := by
93+
' α ε ≃ PUnit := by
9394
intro α
9495
refine Equiv.mk ?a ?b ?c ?d
9596
intro _
@@ -105,7 +106,7 @@ theorem nullable_emptyStr:
105106

106107
theorem nullable_emptyStr':
107108
∀ (α: Type),
108-
@ν α ε ≃ PUnit :=
109+
' α ε ≃ PUnit :=
109110
fun _ => Equiv.mk
110111
(fun _ => PUnit.unit)
111112
(fun _ => by constructor; rfl)
@@ -116,7 +117,7 @@ theorem nullable_emptyStr':
116117
-- ν` = mk↔′ (λ ()) (λ ()) (λ ()) (λ ())
117118
theorem nullable_char:
118119
∀ (c: α),
119-
ν (char c) ≃ PEmpty := by
120+
ν' (char c) ≃ PEmpty := by
120121
intro α
121122
simp
122123
apply Equiv.mk
@@ -131,7 +132,7 @@ theorem nullable_char:
131132

132133
theorem nullable_char':
133134
∀ (c: α),
134-
ν (char c) -> PEmpty := by
135+
ν' (char c) -> PEmpty := by
135136
intro
136137
refine (fun x => ?c)
137138
simp at x
@@ -145,26 +146,26 @@ theorem nullable_char':
145146
-- ν∪ : ν (P ∪ Q) ≡ (ν P ⊎ ν Q)
146147
-- ν∪ = refl
147148
theorem nullable_or:
148-
∀ (P Q: Lang α),
149-
ν (P ⋃ Q) ≡ (Sum (ν P) (ν Q)) := by
149+
∀ (P Q: dLang α),
150+
ν' (P ⋃ Q) ≡ (Sum (ν' P) (ν' Q)) := by
150151
intro P Q
151152
constructor
152153
rfl
153154

154155
-- ν∩ : ν (P ∩ Q) ≡ (ν P × ν Q)
155156
-- ν∩ = refl
156157
theorem nullable_and:
157-
∀ (P Q: Lang α),
158-
ν (P ⋂ Q) ≡ (Prod (ν P) (ν Q)) := by
158+
∀ (P Q: dLang α),
159+
ν' (P ⋂ Q) ≡ (Prod (ν' P) (ν' Q)) := by
159160
intro P Q
160161
constructor
161162
rfl
162163

163164
-- ν· : ν (s · P) ≡ (s × ν P)
164165
-- ν· = refl
165166
theorem nullable_scalar:
166-
∀ (s: Type) (P: Lang α),
167-
ν (Lang.scalar s P) ≡ (Prod s (ν P)) := by
167+
∀ (s: Type) (P: dLang α),
168+
ν' (dLang.scalar s P) ≡ (Prod s (ν' P)) := by
168169
intro P Q
169170
constructor
170171
rfl
@@ -176,8 +177,8 @@ theorem nullable_scalar:
176177
-- (λ { (νP , νQ) → refl } )
177178
-- (λ { (([] , []) , refl , νP , νQ) → refl})
178179
theorem nullable_concat:
179-
∀ (P Q: Lang α),
180-
ν (P, Q) ≃ (Prod (ν Q) (ν P)) := by
180+
∀ (P Q: dLang α),
181+
ν' (P, Q) ≃ (Prod (ν' Q) (ν' P)) := by
181182
-- TODO
182183
sorry
183184

@@ -210,16 +211,16 @@ theorem nullable_concat:
210211
-- (ν P) ✶
211212
-- ∎ where open ↔R
212213
theorem nullable_star:
213-
∀ (P: Lang α),
214-
ν (P *) ≃ List (ν P) := by
214+
∀ (P: dLang α),
215+
ν' (P *) ≃ List (ν' P) := by
215216
-- TODO
216217
sorry
217218

218219
-- δ∅ : δ ∅ a ≡ ∅
219220
-- δ∅ = refl
220221
theorem derivative_emptySet:
221222
∀ (a: α),
222-
(δ ∅ a) ≡ ∅ := by
223+
' ∅ a) ≡ ∅ := by
223224
intro a
224225
constructor
225226
rfl
@@ -228,7 +229,7 @@ theorem derivative_emptySet:
228229
-- δ𝒰 = refl
229230
theorem derivative_universal:
230231
∀ (a: α),
231-
(δ 𝒰 a) ≡ 𝒰 := by
232+
' 𝒰 a) ≡ 𝒰 := by
232233
intro a
233234
constructor
234235
rfl
@@ -238,7 +239,7 @@ theorem derivative_universal:
238239
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
239240
theorem derivative_emptyStr:
240241
∀ (a: α),
241-
(δ ε a) ≡ ∅ := by
242+
' ε a) ≡ ∅ := by
242243
-- TODO
243244
sorry
244245

@@ -251,9 +252,9 @@ theorem derivative_emptyStr:
251252
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
252253
theorem derivative_char:
253254
∀ (a: α) (c: α),
254-
(δ (char c) a) ≡ Lang.scalar (a ≡ c) ε := by
255+
' (char c) a) ≡ dLang.scalar (a ≡ c) ε := by
255256
intros a c
256-
unfold δ
257+
unfold δ'
257258
unfold char
258259
unfold emptyStr
259260
unfold scalar
@@ -262,26 +263,26 @@ theorem derivative_char:
262263
-- δ∪ : δ (P ∪ Q) a ≡ δ P a ∪ δ Q a
263264
-- δ∪ = refl
264265
theorem derivative_or:
265-
∀ (a: α) (P Q: Lang α),
266-
(δ (P ⋃ Q) a) ≡ ((δ P a) ⋃ (δ Q a)) := by
266+
∀ (a: α) (P Q: dLang α),
267+
' (P ⋃ Q) a) ≡ ((δ' P a) ⋃ (δ' Q a)) := by
267268
intro a P Q
268269
constructor
269270
rfl
270271

271272
-- δ∩ : δ (P ∩ Q) a ≡ δ P a ∩ δ Q a
272273
-- δ∩ = refl
273274
theorem derivative_and:
274-
∀ (a: α) (P Q: Lang α),
275-
(δ (P ⋂ Q) a) ≡ ((δ P a) ⋂ (δ Q a)) := by
275+
∀ (a: α) (P Q: dLang α),
276+
' (P ⋂ Q) a) ≡ ((δ' P a) ⋂ (δ' Q a)) := by
276277
intro a P Q
277278
constructor
278279
rfl
279280

280281
-- δ· : δ (s · P) a ≡ s · δ P a
281282
-- δ· = refl
282283
theorem derivative_scalar:
283-
∀ (a: α) (s: Type) (P: Lang α),
284-
(δ (Lang.scalar s P) a) ≡ (Lang.scalar s (δ P a)) := by
284+
∀ (a: α) (s: Type) (P: dLang α),
285+
(δ (dLang.scalar s P) a) ≡ (dLang.scalar s (δ' P a)) := by
285286
intro a s P
286287
constructor
287288
rfl
@@ -298,9 +299,9 @@ theorem derivative_scalar:
298299
-- ; ((.a ∷ u , v) , refl , Pu , Qv) → refl })
299300
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
300301
theorem derivative_concat:
301-
∀ (a: α) (P Q: Lang α),
302+
∀ (a: α) (P Q: dLang α),
302303
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
303-
(δ (P , Q) a) ≡ Lang.scalar (ν P) ((δ Q a) ⋃ ((δ P a), Q)) := by
304+
' (P , Q) a) ≡ dLang.scalar (ν' P) ((δ' Q a) ⋃ ((δ' P a), Q)) := by
304305
-- TODO
305306
sorry
306307

@@ -338,8 +339,8 @@ theorem derivative_concat:
338339
-- ∎ where open ↔R
339340
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
340341
theorem derivative_star:
341-
∀ (a: α) (P: Lang α),
342+
∀ (a: α) (P: dLang α),
342343
-- TODO: Redo this definition to do extensional isomorphism: `⟷` properly
343-
(δ (P *) a) ≡ Lang.scalar (List (ν P)) (δ P a, P *) := by
344+
' (P *) a) ≡ dLang.scalar (List (ν' P)) (δ' P a, P *) := by
344345
-- TODO
345346
sorry

Katydid/Conal/Examples.lean

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
-- https://github.com/conal/paper-2021-language-derivatives/blob/main/Examples.lagda
33

44
import Katydid.Conal.LanguageNotation
5-
open Lang
5+
open dLang
66

7-
example: (Lang.char 'a') ['a'] := by
7+
example: (dLang.char 'a') ['a'] := by
88
simp
99
constructor
1010
rfl
@@ -15,7 +15,7 @@ example: (Lang.char 'a') ['a'] := by
1515
-- _ : a∪b [ 'b' ]
1616
-- _ = inj₂ refl
1717
example : (char 'a' ⋃ char 'b') ['b'] :=
18-
Sum.inr (TEq.mk rfl)
18+
Sum.inr trfl
1919

2020
example : (char 'a' ⋃ char 'b') (String.toList "b") := by
2121
apply Sum.inr
@@ -42,6 +42,12 @@ example : (char 'a', char 'b') (String.toList "ab") := by
4242
refine PSigma.mk trfl ?d
4343
rfl
4444

45+
example : (char 'a', char 'b') (String.toList "ab") :=
46+
PSigma.mk ['a'] (PSigma.mk ['b'] (PSigma.mk trfl (PSigma.mk trfl rfl)))
47+
48+
example : (char 'a', char 'b') (String.toList "ab") :=
49+
PSigma.mk ['a'] (PSigma.mk ['b'] (PSigma.mk trfl (PSigma.mk trfl rfl)))
50+
4551
example : ((char 'a')*) (String.toList "a") := by sorry
4652
-- TODO:
4753
-- simp

0 commit comments

Comments
 (0)