249
|
1 |
A student who is attempting to prove the pumping lemma for regular
|
|
2 |
languages came across the following problem. Suppose a DFA is
|
|
3 |
represented by a record <| init ; trans ; accept |> where
|
|
4 |
|
|
5 |
init : 'state
|
|
6 |
trans : 'state -> 'symbol -> 'state
|
|
7 |
accept : 'state -> bool
|
|
8 |
|
|
9 |
Execution of a DFA on a string:
|
|
10 |
|
|
11 |
(Execute machine [] s = s)
|
|
12 |
(Execute machine (h::t) s = Execute machine t (machine.trans s h))
|
|
13 |
|
|
14 |
Language recognized by a machine D:
|
|
15 |
|
|
16 |
Lang(D) = {x | D.accept (Execute D x D.init)}
|
|
17 |
|
|
18 |
These are all accepted by HOL with no problem. In then trying to define
|
|
19 |
the
|
|
20 |
set of regular languages, namely those accepted by some DFA, the
|
|
21 |
following
|
|
22 |
is natural to try
|
|
23 |
|
|
24 |
Regular (L:'symbol list -> bool) = ?D. L = Lang(D)
|
|
25 |
|
|
26 |
But this fails, since D has two type variables ('state and 'symbol) but
|
|
27 |
Regular is a predicate on 'symbol lists. So the principle of definition
|
|
28 |
rejects.
|
|
29 |
|
|
30 |
So now my questions.
|
|
31 |
|
|
32 |
1. Is there a work-around (other than not attempting to define Regular,
|
|
33 |
or defining regularity through some other device, like regular
|
|
34 |
expressions).
|
|
35 |
|
|
36 |
2. I'm aware that examples of this kind have cropped up from time to
|
|
37 |
time,
|
|
38 |
and I'd like to hear of any others you've encountered.
|
|
39 |
|
|
40 |
Thanks,
|
|
41 |
Konrad.
|
|
42 |
|
|
43 |
|
|
44 |
|
|
45 |
-----------------------------------------
|
|
46 |
Hi Konrad,
|
|
47 |
|
|
48 |
| Regular (L:'symbol list -> bool) = ?D. L = Lang(D)
|
|
49 |
|
|
|
50 |
| But this fails, since D has two type variables ('state and 'symbol) but
|
|
51 |
| Regular is a predicate on 'symbol lists. So the principle of definition
|
|
52 |
| rejects.
|
|
53 |
|
|
54 |
This is a classic case where adding quantifiers over type variables, as
|
|
55 |
once suggested by Tom Melham, would really help.
|
|
56 |
|
|
57 |
| 2. I'm aware that examples of this kind have cropped up from time to
|
|
58 |
| time, and I'd like to hear of any others you've encountered.
|
|
59 |
|
|
60 |
The metatheory of first order logic (this is close to Hasan's example).
|
|
61 |
In the work I reported at TPHOLs'98 I wanted to define the notion of
|
|
62 |
"satisfiable" for first order formulas, but this cannot be done in the
|
|
63 |
straightforward way you'd like. See the end of section 3 of:
|
|
64 |
|
|
65 |
http://www.cl.cam.ac.uk/users/jrh/papers/model.html
|
|
66 |
|
|
67 |
| 1. Is there a work-around (other than not attempting to define Regular,
|
|
68 |
| or defining regularity through some other device, like regular
|
|
69 |
| expressions).
|
|
70 |
|
|
71 |
You could define it over some type you "know" to be adequate, such
|
|
72 |
as numbers (Rob) or equivalence classes of symbol lists (Ching Tsun).
|
|
73 |
Then you could validate the definition by proving that it implies
|
|
74 |
the analogous thing over any type. In first-order logic, this was
|
|
75 |
precisely one of the key things I wanted to prove anyway (the
|
|
76 |
downward Loewenheim-Skolem theorem) so it wasn't wasted effort.
|
|
77 |
|
|
78 |
|- (?M:(A)model. M satisfies p) ==> (?M:(num)model. M satisfies p)
|
|
79 |
|
|
80 |
Where "A" is a type variable. That's an abstraction of the actual
|
|
81 |
statement proved, which is given towards the end of section 4.
|
|
82 |
|
|
83 |
John.
|
|
84 |
|
|
85 |
-----------------------------------------------------
|
|
86 |
|
|
87 |
On Apr 21, 2005, at 1:10 PM, Rob Arthan wrote:
|
|
88 |
>>
|
|
89 |
>> So now my questions.
|
|
90 |
>>
|
|
91 |
>> 1. Is there a work-around (other than not attempting to define
|
|
92 |
>> Regular,
|
|
93 |
>> or defining regularity through some other device, like regular
|
|
94 |
>> expressions).
|
|
95 |
>
|
|
96 |
> I was going to say: instantiate 'state to num in the definition -
|
|
97 |
> after all, DFAs only have finitely many states so the states can
|
|
98 |
> always be represented by numbers.
|
|
99 |
|
|
100 |
Good idea.
|
|
101 |
|
|
102 |
>
|
|
103 |
> But your student's definitions don't captured the tiniteness
|
|
104 |
> requirement. And they need to! As things stand every language L is
|
|
105 |
> regular via the machine with states being lists of symbols and with
|
|
106 |
>
|
|
107 |
> init = []
|
|
108 |
> trans st sym = st @ [sym]
|
|
109 |
> accept = L
|
|
110 |
|
|
111 |
Good example, sorry about my shoddy presentation: I gave an overly
|
|
112 |
simplified
|
|
113 |
version. A better version would be something like the following:
|
|
114 |
|
|
115 |
Hol_datatype `dfa = <| states : 'a -> bool ;
|
|
116 |
symbols : 'b -> bool ;
|
|
117 |
init : 'a ;
|
|
118 |
trans : 'a->'b->'a ;
|
|
119 |
accept : 'a -> bool |>`;
|
|
120 |
|
|
121 |
Define
|
|
122 |
`DFA(M) =
|
|
123 |
FINITE M.states /\
|
|
124 |
FINITE M.symbols /\
|
|
125 |
~(M.states = {}) /\
|
|
126 |
~(M.symbols = {}) /\
|
|
127 |
M.accept SUBSET M.states /\
|
|
128 |
M.init IN M.states /\
|
|
129 |
!(a:'symbol) (s:'state).
|
|
130 |
a IN M.symbols /\ s IN M.states ==> (M.trans s a) IN
|
|
131 |
M.states`;
|
|
132 |
|
|
133 |
|
|
134 |
Define `(Exec D [] s = s) /\
|
|
135 |
(Exec D (h::t) s = Exec D t (D.trans s h))`;
|
|
136 |
|
|
137 |
Define `Lang D = {x | D.accept (Exec D x D.init)}`;
|
|
138 |
|
|
139 |
(* Urk! *)
|
|
140 |
|
|
141 |
Define `Regular L = ?D::DFA. L = Lang D`;
|
|
142 |
|
|
143 |
>
|
|
144 |
> if you take account of finiteness properly, then instantiating 'state
|
|
145 |
> to num will give the right answer.; And it gives another proof
|
|
146 |
> opportunity! (Namely to prove that the instantiated definition is
|
|
147 |
> equivalent to the definition you really wanted).
|
|
148 |
|
|
149 |
That's a nice bit of spin: a proof opportunity!
|
|
150 |
|
|
151 |
>
|
|
152 |
>>
|
|
153 |
>> 2. I'm aware that examples of this kind have cropped up from time to
|
|
154 |
>> time,
|
|
155 |
>> and I'd like to hear of any others you've encountered.
|
|
156 |
>>
|
|
157 |
>
|
|
158 |
> Free algebraic structures provide a vast set of examples.
|
|
159 |
>
|
|
160 |
>
|
|
161 |
Very interesting. Can you give some specific examples?
|
|
162 |
|
|
163 |
Thanks,
|
|
164 |
Konrad.
|
|
165 |
|