Vocabulary/codot

 u :. v Obverse Conjunction

Rank -- depends on the rank of u -- WHY IS THIS IMPORTANT?

Creates a new verb that behaves the same as u, except that its obverse is v

```   append1 =: , :. }.  NB. Like , but obverse is }.
'ab' append1 'cd'
abcd
append1^:_1 'abcd'  NB. This executes the obverse
bcd
```

The obverse of u is called by  u^:_1 or  u&.v or  u&.:v .

Normally the obverse is the same as the inverse, i.e. a verb that undoes the action of u . But u:.v can be used to assign an obverse when the default inverse is undefined or incorrect.

Common uses

1. Supply or correct the obverse of a verb so that it can be used as the v of u&.v

```verbname =: definition :. correct_inverse
```

Consider a system that knows two formats for time:

• a 3-atom list of hours/minutes/seconds (hms form)
• an atom containing seconds from midnight (time form)

Verbs to convert between the two formats:

```hmstotime =: 24 60 60&#."1
timetohms =: 24 60 60&#:"0
]hmss =: 2 3 \$ 9 30 0 16 0 0  NB. two times in hms...
9 30 0
16  0 0
]ts =: hmstotime hmss   NB. ...and in seconds from midnight
34200 57600
```

We would like to be able to compute in either format. So we should be able to add times in hms by converting to time and then converting back

```   hmss +&.hmstotime 0 45 0  NB. go to time form to handle overflow of minutes: 45 minutes after the times
10 15 0
16 45 0
```

We should be able to add in hms form too:

```   ts +&.timetohms 60   NB. add 60 seconds to ts... catastrophe!
32949 113491 0
58576   3661 0
```

What happened!?? We were expecting two times!

u b. _1 shows the inverse of the verb u. That quickly reveals the problem

```   timetohms b. _1
24 60 60&#."0
hmstotime b. _1
24 60 60&#:"1
```

Those ranks are incorrect. The inverse of timetohms, which should convert an hms to a time, needs to have rank 1, and the inverse of hmstotime needs to have rank 0. The fix is easy - we assign the correct obverse to each verb

```hmstotime =: 24 60 60&#."1 :. timetohms
timetohms =: 24 60 60&#:"0 :. hmstotime
```

and now:

```   ts +&.timetohms 60
34260 57660
```

as expected.

Related Primitives

Under (Dual) (u&.v), Under (Dual) (u&.:v)

1. . The default inverses are most ingenious and worth a look.
2. . To see the obverse of the verb u, execute  u b. _1 .

Details

1. The obverse of u :. v is v :. u. This is not obvious.

Consider

```   u =: +
v =: + :. -
uv =: u :. v
```

Now, consider the obverse of uv -- is it v? The definition seems to say so. Since the obverse of uv is defined as v, and v is + :. -, the obverse of the obverse of uv would be -.

Not so. The obverse of uv is actually v :. u rather than simply v

```   uv b. _1
v :.u
```

So the obverse of the obverse of uv is u :. v.

```   uv^:_1^:_1 (5)  NB. It uses u (+) instead of v^:_1 (-)
5
```

It follows that the obverse of the v in u :. v is immaterial because it can never be executed.