packages feed

hermit-0.1.1.0: examples/map/Map.hss

flatten-module
consider 'mapPlus1Int
{load "../fib-tuple/WWSplitTactic.hss"
  consider 'work

  remember origwork
  0
  one-td (unfold 'unwrap)
  any-call (unfold '.)
  innermost (beta-reduce <+ safe-let-subst)
  0
  case-split-inline 'x
  { 3 -- Nil case
    any-call (unfold 'abs)
    any-call (unfold 'f)
    any-call (unfold 'rep)
    simplify
  }
  { 2 -- Singleton case
    any-call (unfold 'abs)
    any-call (unfold 'f)
    any-call (unfold 'wrap)
    any-call (unfold 'rep)
    -- here we make use of the already solved Nil case
    any-call (unfold 'work)
    simplify
    any-call (unfold 'abs)
    simplify
  }
  { 1 -- Cons2 case
    any-call (unfold 'abs)
    any-call (unfold 'f)
    any-call (unfold 'wrap)
    simplify
    any-bu (unfold origwork)
    any-call (unfold 'unwrap)
    simplify
    innermost (unfold-rule precondition1)
    any-call (unfold 'f)
    innermost case-reduce
    any-call (unfold 'rep)
    innermost case-reduce
    any-call (unfold 'wrap)
    simplify
    innermost (unfold-rule precondition2)
  }
}