Master is giving positive examples:
```clafer
ExamplePhone1
display
LCD
GSM
CPU
keyboard
```
```clafer
ExamplePhone2
display
OLED
GSM
touchscreen
```
```clafer
ExampleTablet1
display
AMOLED
HSPA
CPU 4
touchscreen
```
Master is giving negative examples:
negative
```clafer
ExamplePhone3
display
LCD
GSM
CPU 4
keyboard
```
negative
```clafer
ExampleTablet2
display
AMOLED
HSPA
CPU 4
keyboard
```
Luke builds an abstraction:
```clafer
abstract AndroidDevice1
xor display
LCD
OLED
AMOLED
[ no keyboard ]
GSM
HSPA ?
CPU 1..4
xor input
keyboard
touchscreen
```
and a specialization:
```clafer
abstract AndroidPhone : AndroidDevice
[ GSM ]
[ # CPU < 4 ]
```
Luke fixes the abstraction, since not all tablets have `GSM`:
```clafer
abstract AndroidDevice
xor display
LCD
OLED
AMOLED
[ no keyboard ]
GSM ?
HSPA ?
CPU 1..4
xor input
keyboard
touchscreen
```
Luke validates the abstraction by generating examples and confirming with master:
```clafer
AndroidPhone4 : AndroidPhone
display
AMOLED
GSM
HSPA
CPU 2
input
touchscreen
```
Luke discovers new variants and checks whether the positive ones are included and whether negative ones are excluded.
```{.clafer .summary}
```
End.