Tidbits, and some advice to boot

The following tidbits emerged while commenting handins in past instances as well as this instance of LPP.

On uniformity and unity

Urban explorers shun wheels.
They fearlessly cross the street
where no pedestrian has crossed before,
like, ever.

A uniform notation has a way (1) to foster a unified understanding and (2) to support the detection of patterns, leading to modular programming, code reuse, and the generalization and reuse of eureka lemmas. In the short run, that may not be as thrilling as re-inventing the wheel at every twist and turn, but the induced intelligence of our programs and our proofs is vaster and lasts longer.

Food for thought

  • In a programming course one tests; here one proves. So, in the midterm project for example, one should not just test whether a function behaves as expected: one should prove that it satisfies its specification.
  • It is good to know how to expand a unit test with new tests. It is even better to know that we know how to prove their soundness.
The Ostrich Strategy in Computing:

If we don’t look for bugs, we don’t find them.

Regarding induction hypotheses

  • With a Biblical undertone:

    Beware of induction proofs that do not use the induction hypothesis, for they are proofs by cases in disguise.

    Beware of inductive specifications without induction step, for, well, they are not inductive.

    Beware of recursive functions with no recursive calls, for they are just ordinary functions.

    Beware of recursive definitions with no self-references, for they are not recursive at all.

  • With a Texas overtone:

    A proof ain’t inductive if it ain’t got no induction hypotheses.

    A specification ain’t inductive if it ain’t got no induction step.

    A function ain’t recursive if it ain’t got no recursive call.

    If it ain’t self-referential, don’t fix it.

  • With two forward references:

    A recursive function with no base case is likely not to terminate, unless it is corecursive.

    An inductive specification with no base case is probably coinductive.

Bits of advice

Outside the box is where I live:

To think outside the box,
one must be (1) aware that there is a box,
and (2) mindful of what is in this box.
That is the purpose of education.
  • Keep things in mind, they will come handy.
  • Compute the transitive closure of what you know. How else can you figure out whether it is the same elephant or something else entirely?
  • Use what you know until you know better: rules are also made to be broken.
  • To become secure in your knowledge, stay away from rabbits out of hats, for they tend to multiply at a Fibonacci rate, and then it’s hard to keep up.
  • Mind the elephant: not only is it likely to be the same, but often it is in the room already.
  • Follow your thoughts. Therein lies a path towards originality.

Regarding self reference

  • If at first you don’t repeat, do it again.
  • Foresight it a source of déjà vu.
  • If a jar is slightly open, is it ajar?
Loki (beatifically, and taking all the space): Mindfulness is everything.
Dana (slightly miffed): Er... Do you mind?
Halcyon (to himself, wondering): Is this a trick question or what?

Version

Moved Section On uniformity and unity from another chapter to the present one [20 Aug 2024]

Created [16 Feb 2024]