DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T l

⟦74cd5268a⟧ TextFile

    Length: 1830 (0x726)
    Types: TextFile
    Names: »lists.web«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z« 
        └─⟦036c765ac⟧ 
            └─⟦this⟧ »TeX3.0/Spiderweb/larch/lists.web« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦63303ae94⟧ »unix3.14/TeX3.14.tar.Z« 
        └─⟦c58930e5c⟧ 
            └─⟦this⟧ »TeX3.14/Spiderweb/larch/lists.web« 

TextFile

@*Theory of sequences.
The theory of sequences is built on the theory of stacks. 
The stack theory provides most of the machinery needed for the elementary
operations on lists:  |insert|, |head|, |tail|, and |is_empty|.
The sequence trait includes
additional machinery that allows easy specification of concatenation.
@c
sequence: trait
    imports Stack_theory with [nil for empty_stack,
		cons for push, first for top, rest for pop]
    introduces
         enter: C,E -> C        % adds e to back of c 
         last:  C -> E
         prefix:  C -> C        % c with last deleted 
         #.[#]:C, Card -> E      % indexed selection (starts at 1) 
         append: C,C -> C       % concatenation 

    constrains [C] so that C is generated by [new, insert]
                           C is generated by [new, enter]
                           C is partitioned by [first, rest, isEmpty]
                           C is partitioned by [last, prefix, isEmpty]

      for all [e:E] 
         last(enter(new,e)) = e
         prefix(enter(new,e)) = new

      for all [c:C, e:E] 
         not isEmpty(enter(c,e))
         last(enter(c,e)) = e
         prefix(enter(c,e)) = stk

     for  all [c:C, e, e1: E] 
          insert(new,e) = enter(new,e)
          insert(enter(c,e),e1) = enter(insert(c,e1),e)

       for all [c:C, i:Card] 
          c.[1] = first(c)
          c.[i+1] = rest(c).[i]

      for all [c,c1:C, e:E] 
         append(c,new) = c
         append(c,insert(c1,e)) = insert(append(c,c1), e)

 implies
       converts [insert, first, last, rest, prefix],
                [enter, first, last, rest, prefix],
                [append],
                [isEmpty],
                [size],
                [#.[#]]


      exempts last(new), prefix(new), first(new), rest(new) 
%              for all [c:C], c(0)  

@*Index.