miser

The Miser Project
λ Applicative-Procedure Abstraction

miser> obap>



index>
0.4.1 2025-01-19T17:48Z

1. The Abstraction Idea

Views on Abstraction
“This process [of extracting common features] can be regarded as a repeated abstraction … and under certain circumstances such abstracting processes can be repeatedly piled on top of one another. Here ‘abstract’ has to be understood in the literal meaning of the word as ‘removing’, as leaving aside everything inessential for the context in question or for a particular purpose … .”
Hans Reichardt [VNR1977: Introduction,p.11]
 
“A high-level computer language abstracts away the machine [so that] the programmer need not be an expert in the machinations of computer hardware … in order to successfully program a computer. High-level languages (HLLs) automate, hide, or otherwise abstract away the underlying operations of the machine … .”
– Mark Jones Lorenzo [Lorenzo2019: Introduction, p.13]
 
“Abstraction is about digging deep into a situation to find out what is at its core making it tick. Another way to think of it is about stripping away irrelevant details, or rather, stripping away details that are irrelevant to what we’re thinking about.”
Eugenia Cheng, The Joy of Abstraction [Cheng2023: 2.3 Forgetting Details]
 
“We call the symbol λx an abstraction operator, and speak of the function which is denoted by (λx M) as obtained from the expression M by abstraction.”
Alonzo Church [Church1941: p.7]

2. The Abstraction Challenge

The challenge at the oMiser/oFrugal level is the fact that there are only obs and every ob has an applicative interpretation; any ob can have an intended operational use as both data and script. The computational accomplishment of abstraction for oMiser straddles that ambiguity/flexibility of interpretation.

2.1 Pure abstraction

Pure abstraction operations on obs depend on an ob and its structure without consideration of anything other than the ob “as-is.” The abstraction

σ.s M

is a script for an applicative procedure such that, given obs s, M, N, and definite function σ (sigma),

(σ.s M) N

determines a form of ob M with N substituted everywhere s occurs in M. This is based strictly on ob structure and not on any interpretation of M as an applicative-procedure script.

Evaluation of (σ.s M) determines an ob different than M having no occurrences of s. (σ.s M) has s abstracted away in a sense comparable to that of Alonzo Church quoted above. ((σ.s M) s) = M as-is. If s does not occur in M, ((σ.s M) t) = M for any determined ob, t.

There are handy companion functions, δ(s, N) and subst(N, s), for convenient use, often when one or more definite operands are known in advance.

δ(s, N) M = subst(N, s) M = (σ.s M) N = σ(s, M, N)

illustrating various Frugalese forms for achieving the same result, given definite s, N, and M.

These and their intermediate variations, such as subst(.ARG), known as Curried forms, will be employed in the development of oFrugal utility scripts, including those for applicative-procedure abstraction.

2.2 Symbolic forms

2.2.1 Symbolic form principles

It is a design principle of the oMiser universal functions ap and eval that when there is no specific interpretation of an ap operator ob, “no change” occurs.

The definitions of obap.a and obap.b for the cases of singletons–individuals and enclosures–illustrate that principle. Those cases were arrived at indirectly by seeking a computational implementation that has those functions be total–definite for all definite obs. The principle is generalized for further cases, including the introduction of symbolic forms.

In oMiser, lindies denote distinct constant obs that are invariant under the universal functions. In this case “no change” is accomplished by the mathematical engineering of obaptheory such that when a lindy ob is applied to an operand, the lindy and the operand are preserved: the result is pairing of the lindy and the operand. In this way,

ap(lindy, x) yields (lindy :: x)

using (` x) when x is not also invariant. The result is invariant in this same sense.

The lindy-involved invariant obs are classified as symbolic forms and distinguished by the obaptheory predicate is-symbolic-form(x); symbolic forms are all preserved without change in this manner. The general rules is

ap(symbolic-form, x) = (symbolic-form :: x)

using (` x) when x is neither ob.NIL nor a symbolic form.

2.2.2 Utility of symbolic forms

Symbolic forms have the appearance of applicative-procedure scripts and/or constant list structures, perhaps in mixtures. Intended purpose for a symbolic form is revealed only in the context of usage.

Harmony of symbolic forms with applicative-operation expressions is supported by the computational interpretation of f :: g :: x being tantamount to the Frugalese applicative expression f g x, both being right-associative and equivalent to f(g x) with a prospective interpretation of lindies f, g, and x as variables in an applicative-operation formula.

For example, the oFrugal expression with lindies a, b, and x

(a x) b x ;

evaluates to

(a :: x) :: b :: x ;

and

!eval (a :: x) :: b :: x ;

the same.

3. Applicative-Procedure Abstraction Techniques

[Author’s Note]: Brief introduction to the two forms.

This placeholder links to raw materials and notes, including text files. There will be organized folios of content as consolidation of documentation on the web progresses.

ID Status Started Topic
sigma 0.4.0 2024-06-24 2024-05-05 σ.s M, subst(L, s), δ(s, L) definitions
lambda 0.4.0 2024-06-24 2024-06-20 λ.x & ρ.p Abstraction Operations
c000000 undated 2024-01-25 Construction Diary & Job Jar

I invite discussion about Miser Project topics in the Discussion section. Improvements and removal of defects in this particular documentation can be reported and addressed in the Issues section. There are also relevant projects from time to time.

Hard Hat Area You are navigating the Miser Project on Github

created 2024-01-25 by orcmid