1 #+TITLE: Minipolymath 3 - core threads in LAK & IATC
4 #+DESCRIPTION: a "Rosetta Stone" for work on IATC
5 #+KEYWORDS: mathematical argumentation
7 #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
8 #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
9 #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
10 #+EXPORT_SELECT_TAGS: export
11 #+EXPORT_EXCLUDE_TAGS: noexport
14 #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://metameso.org/~joe/solarized-css/build/solarized-light.css" />
15 #+STARTUP: showeverything
17 * Thread 3: What is a line?
19 *ANONYMOUS*: If the points form a convex polygon, it is easy.
22 LAK> a. P: Conjecture(‘statement holds in the convex polygon case’).
23 LAK> b. P: Lemma(‘a windmill process walks around the vertices of the convex polygon’ L 3.1 )
28 IATC> perf[judge](value[easy](S_is_conv))
31 *THOMAS H*: Yes. Can we do it if there is a single point not on the convex
35 LAK> d. P: Conjecture(‘statement holds in the convex polygon plus point case’).
39 IATC> perf[agree](S_is_conv)
40 IATC> perf[query](rel[has_property](convex_plus_point, cycle_spans_S)
41 IATC> rel[instance_ofl](S, convex_plus_point)
44 *JERZY*: Say there are four points: an equilateral triangle, and then one
45 point in the center of the triangle. No three points are collinear. It
46 seems to me that the windmill can not use the center point more than
47 once! As soon as it hits one of the corner points, it will cycle
48 indefinitely through the corners and never return to the center point. I
49 must be missing something here...
52 LAK> e. O: GlobalCounter(‘equilateral triangle plus point’, ‘statement holds in the convex polygon case’).
56 IATC> perf[assert](rel[instance_of](convex_plus_point, equi_tri))
57 IATC> perf[assert](rel[instance_of](S, equi_tri))
58 IATC> perf[assert](rel[has_property](equi_tri, not_colin))
59 IATC> perf[challenge](problem, equi_tri_stuck)
60 IATC> rel[structural](equi_tri, equi_tri_stuck)
61 IATC> perf[judge](rel[not](value[plausible](equi_tri_stuck)))
64 *JOE*: This isn’t true - it will alternate between the
65 centre and each vertex of the triangle.
68 LAK> f. P: MonsterBar(‘equilateral triangle plus point’, ‘statement holds in the convex polygon case’, ‘line is alternating’).
72 IATC> perf[challenge](equi_tri_stuck, alternate)
75 *THOMAS H*: No, you’re not right. Let the corner points be A, B, C,
76 clockwise, M the center. If you start in M, you first hit say A, then C,
77 then M, then B, then A.
80 LAK> g. P: PDefinition(‘equilateral triangle plus point’, ‘line is alternating’, ‘“line” extends in both directions’).
84 IATC> perf[challenge](equi_tri_stuck, alternate1)
87 *JERZY*: Ohhh. . . I misunderstood the problem. I saw it as a half-line
88 extending out from the last point, in which case you would get stuck on
89 the convex hull. But apparently it means a full line, so that the next
90 point can be “behind” the previous point. Got it.
93 LAK> h. O: MonsterAccept(‘equilateral triangle plus point’, ‘line is alternating’).
97 IATC> perf[retract](perf[challenge](problem, equi_tri_stuck))
98 IATC> perf[assert](rel[not](half_line))
99 IATC> rel[structural](line, half_line)
102 * Thread 11: Hitting all the points
104 *ANONYMOUS*: One can start with any point (since every point of S
105 should be pivot infinitely often), the direction of line that one
106 starts with however matters!
109 LAK> a. P: Lemma(‘we can start with any point’ L 11.1 ).
113 IATC> perf[assert](rel[equivalent](problem, forall_exists_problem))
114 IATC> ???rel[structural](problem, forall_exists_problem)
115 IATC> perf[assert](rel[not](rel[equivalent](problem, forall_forall_problem)))
116 IATC> ???rel[structural](problem, forall_forall_problem)
119 *NEMANJA*: In other words, we can start with any point and ‘just’ need
120 to choose a second point through which will we draw a line.
123 LAK> [Repetition of previous move.]
127 IATC> perf[assert](forall_exists_problem_detail)
128 IATC> rel[structural](forall_exists_problem, forall_exists_problem_detail)
131 *ANONYMOUS*: Perhaps even the line does not mat-
132 ter! Is it possible to prove that any point and any line
136 LAK> b. P: Lemma(‘the line does not matter‘ L 11.2 ).
137 LAK> c. P: ProofDone.
141 IATC> perf[query](forall_forall_problem)
144 *THOMAS H*: No, if you start with two points on the convex hull (ordered
145 in the right way) you stay on the convex hull.
148 LAK> d. O: LocalCounter(‘two points on the convex hull’, L 11.2 )
152 IATC> perf[challenge](forall_forall_problem, two_conseq_hull)
155 *NEMANJA*: It is not possible, two consecutive points on convex hull
159 LAK> [Repetition of previous move.]
163 IATC> perf[assert](rel[wlog](problem, zero_angle), one_turn)
166 *ZHECKA*: Sure a choice of line is important. Imagine S is a set of
167 vertices of a convex polygon P (triangle, say) plus one point inside
171 LAK> [Repetition of previous move.]
175 IATC> perf[challenge](forall_forall_problem, convex_plus_point)
178 *ANONYMOUS*: Only the starting point matters. By the problem
179 statement, it appears that the initial angle is irrelevant to the
180 existence of a pivot point P∗ from which all of S is traversed. Every
181 point in S is a pivot point, but only with a specific range of
182 starting angle (e.g. those consistent with the cycle generating
183 S). The union of these intervals must necessarily be [0, 2π), and thus
184 we can assume WLOG that the start- ing angle is 0 (and thus we single
185 out a specific point – or points in the case of |S| = 2).
188 LAK> e. P: LocalLemmaInc(‘two points on the convex hull’, L 11.2 , ‘the initial angle is irrelevant within a specific range’).
192 IATC> perf[assert](rel[wlog](problem, zero_angle), one_turn)
195 * Thread 14 (first part): Splitting in two sets, conclusion
197 *ANONYMOUS*: I’m not sure but as no three points are collinear, one can
198 always find a line which splits the points into two sets whose number
199 of elements differ at most one?
202 LAK> a. P: Lemma(‘we can separate the points in two parts of roughly equal size’ L 14.1 ).
206 IATC> perf[assert](forall_split, rel[has_property](S, not_colin))
209 *THOMAS H*: That is surely true. How could this help us?
216 IATC> perf[agree](forall_split)
217 IATC> perf[query](value[useful](forall_split))
220 *ANONYMOUS*: Something like one can find this no matter how we choose
221 the first point. Then in some time the windmill must be parallel to
222 the line through these points. This line must be unique or else it
223 splits the points such that number of elements differ at least two.
230 IATC> perf[assert](value[useful](forall_split))
231 IATC> perf[assert](meta[auxiliary](parallel_line, forall_split))
232 IATC> rel[structural](parallel_line, l)
235 *JUSTIN W SMITH*: It appears that the number of points to the “left” or
236 “right” of the line is constant through the entire process!
243 IATC> perf[assert](half_thepoints)
246 *GARF*: I think this solves the problem. Start with a line which
247 separates the points into two parts of roughly same size (their
248 cardinal differ by at most one, not counting the point to which the
249 line is attached). Then run the process until the line is
250 “upside-down”, and so has turn by exactly π. Every point has gone from
251 the right of the line to the left of the line (easy to see is the
252 number of point is odd, you have to be a bit more crafty if it is
253 even), and no point can go from left to right or right to left without
254 touching the line. Add the previous remarks (the process will always
255 come back to its initial configuration), and every point will be
256 visited infinitely often.
259 LAK> b. P: Lemma(‘we can run the process until the line is upside down’ L 14.2 ).
260 LAK> c. P: Lemma(‘every point goes from right to left’ L 14.3 ).
261 LAK> d. P: Lemma(‘no point can go from left to right without touching the line’ L 14.4 ).
262 LAK> e. P: Lemma(‘the process will return to its initial configuration’ L 14.5 ).
263 LAK> f. P: Lemma(‘each point will be visited infinitely often’ L 14.6 ).
264 LAK> g. P: ProofDone.
268 IATC> perf[define](init_line, init_line_def)
269 IATC> rel[structural](init_line_def, forall_split)
270 IATC> proof_sugg := perf[assert](rel[equivalent](init_turn_by_pi, points_switched_sides))
271 IATC> perf[assert](problem, proof_sugg, half_thepoints)
272 IATC> *** or perf[assert](rel[stronger](proof_sugg, problem))???
273 IATC> perf[assert](rel[instance_of](parallel_line, init_turn_by_pi))
274 IATC> rel[structural]((init_turn_by_pi, init_line)
277 *GAL*: Very nice! Don’t we run into problems with a convex hull though?
278 Take a square with a point in the middle (M) and pass the diagonal of
279 the square (not through M) – it seems to me M is never visited (though
280 I may be wrong here). I think we should be more specific in our
281 initial choice of line, maybe?
284 LAK> h. O: HybridCounter(‘point inside square’, ‘problem statement
289 IATC> perf[judge](value[beautiful](proof_sugg))
290 IATC> perf[challenge](proof_sugg, convex_ex_5)
291 IATC> rel[structural](convex_ex_5, S)
292 IATC> rel[structural](convex_ex_5, l)
293 IATC> rel[structural](convex_ex_5, P)
296 *GAL*: No. This example is false :)
299 LAK> i. P: HybridLemmaInc(‘point inside square’, L 14.6 ,).
300 LAK> j. P: Conjecture(‘problem statement holds, even for point inside square’).
301 LAK> k. P: ProofDone.
305 IATC> perf[retract](convex_ex_5)
308 *ZHECKA*: Yes, it seems to be a correct solution!
311 LAK> [Repetition of previous moves.]
315 IATC> perf[agree](proof_sugg)
316 IATC> perf[assert](rel[stronger](proof_sugg, problem))
319 *GAL*: This seems to be right, but there something I don’t
320 understand. Please see if you can help me with it: Start with a square
321 and a point inside it (M): start with a tangent to the square (your
322 solution demands a more equal division of points, I know). When we get
323 to the opposite vertex of the square all points moved from one side of
324 the line to the other, but not all points have been visited (M will
325 never be visited). The argu- ment is almost exactly the same, so it
326 seems that the equal division of points plays a crucial role, but I
327 don’t understand what role exactly. Can we pin it down pre- cisely?
330 LAK> O: LocalCounter(‘M is never visited’, L 14.4 ).
334 IATC> perf[assert](half_points_essential, convex_ex_6)
335 IATC> perf[assert](rel[instance_of](S, convex_ex_6))
336 IATC> rel[structural](convex_ex_6, l)
337 IATC> perf[assert](rel[has_property](convex_ex_6, rel[not](has_cycle)))
338 IATC> perf[assert](rel[has_property](convex_ex_6, points_switched_sides))
339 IATC> perf[queryE](why_half_points_essentia(X))
340 IATC> rel[structural](why_half_points_essential, half_points_essential)
343 *GARF*: If I understand well your example: the problem is that you must
344 give an orientation to the line. Then, left and right are defined
345 with respect to this orientation: if the line has made half a turn,
346 then left and right are reversed. In your example, I think most of the
347 points move from, say, the part at the top of the line to the part at
348 the bottom of the line, but always stay at the right of the line.
351 LAK> m. P: LocalLemmaInc(‘M is never visited’, L 14.4 , ‘left and
352 right must be reversed after a rotation’).
356 IATC> perf[challenge](rel[has_property](convex_ex_6, points_switched_sides))
359 *GAL*: Got it! Kind of like a turn number in topology. Thanks! :)
366 IATC> perf[agree](perf[challenge](rel[has_property](convex_ex_6, points_switched_sides)))