Add slipnet analysis: depth vs topology correlation study

Analysis shows no significant correlation between conceptual depth
and hop distance to letter nodes (r=0.281, p=0.113). Includes
Python scripts, visualizations, and LaTeX paper.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alex Linhares
2026-02-01 20:58:15 +00:00
parent 06a42cc746
commit 50b6fbdc27
14 changed files with 4209 additions and 0 deletions

View File

@ -0,0 +1,23 @@
{
"permissions": {
"allow": [
"Bash(git push:*)",
"Bash(/c/Users/alexa/anaconda3/python.exe export_slipnet.py:*)",
"Bash(C:\\\\Users\\\\alexa\\\\anaconda3\\\\python.exe:*)",
"Bash(/c/Users/alexa/anaconda3/python.exe compute_letter_paths.py)",
"Bash(/c/Users/alexa/anaconda3/python.exe:*)",
"WebFetch(domain:github.com)",
"WebFetch(domain:raw.githubusercontent.com)",
"Bash(dir \"C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis\" /b)",
"Bash(C:Usersalexaanaconda3python.exe plot_depth_distance_correlation.py)",
"Bash(powershell.exe -Command \"cd ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis''; & ''C:\\\\Users\\\\alexa\\\\anaconda3\\\\python.exe'' compute_stats.py\")",
"Bash(powershell.exe -Command \"cd ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis''; & ''C:\\\\Users\\\\alexa\\\\anaconda3\\\\python.exe'' plot_depth_distance_correlation.py\")",
"Bash(powershell.exe -Command \"cd ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis''; pdflatex -interaction=nonstopmode slipnet_depth_analysis.tex 2>&1 | Select-Object -Last 30\")",
"Bash(powershell.exe -Command \"cd ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis''; pdflatex -interaction=nonstopmode slipnet_depth_analysis.tex 2>&1 | Select-Object -Last 10\")",
"Bash(powershell.exe -Command \"cd ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis''; pdflatex -interaction=nonstopmode slipnet_depth_analysis.tex 2>&1 | Select-Object -Last 5\")",
"Bash(powershell.exe -Command \"Get-ChildItem ''C:\\\\Users\\\\alexa\\\\copycat\\\\slipnet_analysis'' | Select-Object Name, Length, LastWriteTime | Format-Table -AutoSize\")",
"Bash(powershell.exe:*)",
"Bash(git add:*)"
]
}
}

View File

@ -0,0 +1,157 @@
"""
Compute minimum hops from each node to the nearest letter node (a-z) in the slipnet.
Like Erdos number, but starting from letter nodes.
Adds 'minPathToLetter' field to each node in the JSON.
"""
import json
import networkx as nx
def load_slipnet(filepath):
with open(filepath, 'r') as f:
return json.load(f)
def save_slipnet(data, filepath):
with open(filepath, 'w') as f:
json.dump(data, f, indent=2)
def build_graph(data):
"""Build an undirected unweighted NetworkX graph from slipnet JSON."""
G = nx.Graph() # Undirected graph - edges work both ways
# Add all nodes
for node in data['nodes']:
G.add_node(node['name'])
# Add edges (unweighted - each edge counts as 1 hop)
for link in data['links']:
G.add_edge(link['source'], link['destination'])
return G
def get_letter_nodes():
"""Return set of letter nodes (a-z)."""
return set(chr(i) for i in range(ord('a'), ord('z') + 1))
def compute_min_hops_to_letters(G, letter_nodes):
"""
Compute minimum hops from each node to the nearest letter node.
Like Erdos number but for letters.
Returns dict: node_name -> {hops, path, nearest_letter}
"""
results = {}
# For each node, find shortest path (by hop count) to any letter
for node in G.nodes():
if node in letter_nodes:
# Letters have 0 hops to themselves
results[node] = {
'hops': 0,
'path': [node],
'nearestLetter': node
}
else:
min_hops = float('inf')
min_path = None
nearest_letter = None
for letter in letter_nodes:
try:
# Find shortest path by hop count (no weight parameter)
path = nx.shortest_path(G, source=node, target=letter)
hops = len(path) - 1 # Number of edges = nodes - 1
if hops < min_hops:
min_hops = hops
min_path = path
nearest_letter = letter
except nx.NetworkXNoPath:
continue
if min_path is not None:
results[node] = {
'hops': min_hops,
'path': min_path,
'nearestLetter': nearest_letter
}
else:
results[node] = {
'hops': None,
'path': None,
'nearestLetter': None
}
return results
def main():
filepath = r'C:\Users\alexa\copycat\slipnet_analysis\slipnet.json'
# Load the slipnet
data = load_slipnet(filepath)
print(f"Loaded slipnet with {data['nodeCount']} nodes and {data['linkCount']} links")
# Build the graph
G = build_graph(data)
print(f"Built graph with {G.number_of_nodes()} nodes and {G.number_of_edges()} edges")
# Get letter nodes
letter_nodes = get_letter_nodes()
print(f"Letter nodes: {sorted(letter_nodes)}")
# Compute minimum hops to letters
path_results = compute_min_hops_to_letters(G, letter_nodes)
# Find max hops among reachable nodes
max_hops = max(r['hops'] for r in path_results.values() if r['hops'] is not None)
unreachable_hops = 2 * max_hops
print(f"Max hops among reachable nodes: {max_hops}")
print(f"Assigning unreachable nodes hops = 2 * {max_hops} = {unreachable_hops}")
# Assign unreachable nodes hops = 2 * max_hops
for node_name, result in path_results.items():
if result['hops'] is None:
result['hops'] = unreachable_hops
result['path'] = None # No path exists
result['nearestLetter'] = None
# Add results to each node in the JSON
for node in data['nodes']:
node_name = node['name']
if node_name in path_results:
result = path_results[node_name]
node['minPathToLetter'] = {
'hops': result['hops'],
'path': result['path'],
'nearestLetter': result['nearestLetter']
}
# Save the updated JSON
save_slipnet(data, filepath)
print(f"\nUpdated slipnet saved to {filepath}")
# Print summary sorted by hops
print("\n=== Summary of minimum hops to letter nodes (Erdos-style) ===")
reachable_nodes = [(n['name'], n['minPathToLetter']) for n in data['nodes']
if 'minPathToLetter' in n and n['minPathToLetter']['path'] is not None
and n['minPathToLetter']['hops'] > 0]
unreachable_nodes = [(n['name'], n['minPathToLetter']) for n in data['nodes']
if 'minPathToLetter' in n and n['minPathToLetter']['path'] is None
and n['minPathToLetter']['hops'] > 0]
# Sort by hops, then by name
reachable_nodes.sort(key=lambda x: (x[1]['hops'], x[0]))
unreachable_nodes.sort(key=lambda x: x[0])
print(f"\n{'Node':<30} {'Hops':<6} {'Nearest':<8} {'Path'}")
print("-" * 80)
for name, info in reachable_nodes:
path_str = ' -> '.join(info['path'])
print(f"{name:<30} {info['hops']:<6} {info['nearestLetter']:<8} {path_str}")
if unreachable_nodes:
print(f"\nUnreachable nodes (assigned hops = {unreachable_hops}):")
for name, info in unreachable_nodes:
print(f" {name:<30} (depth: {[n['conceptualDepth'] for n in data['nodes'] if n['name'] == name][0]})")
if __name__ == '__main__':
main()

View File

@ -0,0 +1,85 @@
"""Compute correlation statistics for the paper (hop-based)."""
import json
import numpy as np
from scipy import stats
def main():
with open(r'C:\Users\alexa\copycat\slipnet_analysis\slipnet.json', 'r') as f:
data = json.load(f)
# Extract data points (excluding letter nodes themselves)
names = []
depths = []
hops = []
is_unreachable = []
for node in data['nodes']:
name = node['name']
depth = node['conceptualDepth']
path_info = node.get('minPathToLetter', {})
hop_count = path_info.get('hops')
nearest = path_info.get('nearestLetter')
# Skip letter nodes (hops 0)
if hop_count is not None and hop_count > 0:
names.append(name)
depths.append(depth)
hops.append(hop_count)
is_unreachable.append(nearest is None)
# Convert to numpy arrays
depths = np.array(depths)
hops = np.array(hops)
# Compute correlation
correlation, p_value = stats.pearsonr(depths, hops)
spearman_corr, spearman_p = stats.spearmanr(depths, hops)
# Linear regression
z = np.polyfit(depths, hops, 1)
# R-squared
y_pred = np.polyval(z, depths)
ss_res = np.sum((hops - y_pred) ** 2)
ss_tot = np.sum((hops - np.mean(hops)) ** 2)
r_squared = 1 - (ss_res / ss_tot)
num_unreachable = sum(is_unreachable)
print(f"Number of nodes analyzed: {len(names)}")
print(f"Total nodes: {data['nodeCount']}")
print(f"Letter nodes (excluded): 26")
print(f"Unreachable nodes (hops = 2*max): {num_unreachable}")
print()
print(f"Pearson correlation: r = {correlation:.4f}")
print(f"Pearson p-value: p = {p_value:.6f}")
print(f"Spearman correlation: rho = {spearman_corr:.4f}")
print(f"Spearman p-value: p = {spearman_p:.6f}")
print(f"R-squared: {r_squared:.4f}")
print(f"Linear regression: hops = {z[0]:.4f} * depth + {z[1]:.4f}")
print()
print(f"Depth range: {min(depths):.1f} - {max(depths):.1f}")
print(f"Hops range: {min(hops)} - {max(hops)}")
print(f"Mean depth: {np.mean(depths):.2f}")
print(f"Mean hops: {np.mean(hops):.2f}")
print(f"Std depth: {np.std(depths):.2f}")
print(f"Std hops: {np.std(hops):.2f}")
print()
# Distribution of hops
print("Distribution of hops:")
for h in sorted(set(hops)):
count = sum(1 for x in hops if x == h)
nodes_at_h = [n for n, hp in zip(names, hops) if hp == h]
print(f" {h} hops: {count} nodes")
print()
print("Data points (sorted by hops, then depth):")
print(f"{'Node':<30} {'Depth':<10} {'Hops':<10} {'Reachable':<10}")
print("-" * 60)
for name, depth, hop, unreachable in sorted(zip(names, depths, hops, is_unreachable), key=lambda x: (x[2], x[1])):
status = "No" if unreachable else "Yes"
print(f"{name:<30} {depth:<10.1f} {hop:<10} {status:<10}")
if __name__ == '__main__':
main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -0,0 +1,162 @@
# Slipnet Edge Types
This document describes all relationship types between nodes in the Copycat slipnet.
## Overview
The slipnet contains **202 links** connecting **59 nodes**. Links are categorized by:
1. **Link Type** - The structural role of the link
2. **Label** - An optional semantic annotation (itself a slipnode)
---
## Link Types (5 types)
### 1. `nonSlip` (83 links)
Lateral connections that do NOT allow conceptual slippage during analogy-making.
**Purpose**: Connect related concepts that should remain distinct during mapping.
**Examples**:
- `a``b` (labeled `successor`) - sequential letter relationship
- `b``a` (labeled `predecessor`) - reverse sequential relationship
- `left``leftmost` - direction to position association
- `sameness``samenessGroup` (labeled `groupCategory`) - bond type to group type
- `predecessorGroup``length` - groups have length property
### 2. `instance` (50 links)
Connect a category to its instances (downward in the hierarchy).
**Purpose**: Define membership relationships.
**Examples**:
- `letterCategory``a` (and all letters a-z)
- `length``1`, `2`, `3`, `4`, `5`
- `stringPositionCategory``leftmost`, `rightmost`, `middle`, `single`, `whole`
- `directionCategory``left`, `right`
- `bondCategory``predecessor`, `successor`, `sameness`
- `objectCategory``letter`, `group`
### 3. `category` (51 links)
Connect an instance back to its category (upward in the hierarchy).
**Purpose**: Allow instances to reference their parent category.
**Examples**:
- `a``letterCategory` (and all letters)
- `1``length` (and all numbers)
- `leftmost``stringPositionCategory`
- `predecessor``bondCategory`
- `samenessGroup``letterCategory`
### 4. `slip` (16 links)
Lateral connections that ALLOW conceptual slippage during analogy-making.
**Purpose**: Enable flexible mappings between related but distinct concepts.
**Examples**:
- `first``last` (labeled `opposite`) - opposites can slip to each other
- `left``right` (labeled `opposite`)
- `successor``predecessor` (labeled `opposite`)
- `letterCategory``length` - facets can slip
- `letter``group` - object types can slip
- `single``whole` - string positions can slip
### 5. `property` (2 links)
Connect objects to their intrinsic properties.
**Purpose**: Define inherent attributes of specific nodes.
**Examples**:
- `a``first` (letter 'a' has property of being first)
- `z``last` (letter 'z' has property of being last)
---
## Link Labels (5 labels)
Labels are themselves slipnodes that annotate links with semantic meaning.
### 1. `successor` (29 links)
Marks sequential forward relationships.
**Used on**: nonSlip links between consecutive letters (a→b, b→c, ..., y→z) and numbers (1→2, ..., 4→5)
### 2. `predecessor` (29 links)
Marks sequential backward relationships.
**Used on**: nonSlip links in reverse direction (b→a, c→b, ..., z→y) and numbers (2→1, ..., 5→4)
### 3. `opposite` (10 links)
Marks oppositional relationships.
**Used on**: slip links between conceptual opposites:
- `first``last`
- `leftmost``rightmost`
- `left``right`
- `successor``predecessor`
- `successorGroup``predecessorGroup`
### 4. `groupCategory` (3 links)
Links bond types to their corresponding group types.
**Used on**: nonSlip links:
- `sameness``samenessGroup`
- `successor``successorGroup`
- `predecessor``predecessorGroup`
### 5. `bondCategory` (3 links)
Links group types back to their corresponding bond types.
**Used on**: nonSlip links:
- `samenessGroup``sameness`
- `successorGroup``successor`
- `predecessorGroup``predecessor`
---
## Special Cases: Label-Only Nodes
Two nodes exist in the slipnet but have **no edges as endpoints**:
### `opposite`
- Has 0 incoming and 0 outgoing edges as a graph node
- Used only as a label on 10 slip links
- Exists as a node so its activation can be tracked during reasoning
### `identity`
- Has 0 incoming and 0 outgoing edges as a graph node
- Not used as a label on any links in the current implementation
- Reserved for potential identity mappings in analogies
---
## Disconnected Cluster
Three nodes form a separate cluster disconnected from the letter nodes:
- `objectCategory``letter` (instance link)
- `objectCategory``group` (instance link)
- `letter``group` (slip links)
These nodes are reachable from each other but not from any letter (a-z).
---
## Summary Table
| Type | Count | Direction | Allows Slippage | Purpose |
|------------|-------|--------------|-----------------|----------------------------------|
| nonSlip | 83 | Directional | No | Lateral associations |
| instance | 50 | Category→Instance | N/A | Membership (downward) |
| category | 51 | Instance→Category | N/A | Classification (upward) |
| slip | 16 | Directional | Yes | Flexible analogy mappings |
| property | 2 | Object→Property | N/A | Intrinsic attributes |
| Label | Count | Semantic Meaning |
|--------------|-------|-------------------------------------|
| successor | 29 | Forward sequential relationship |
| predecessor | 29 | Backward sequential relationship |
| opposite | 10 | Oppositional relationship |
| groupCategory| 3 | Bond-to-group association |
| bondCategory | 3 | Group-to-bond association |

View File

@ -0,0 +1,334 @@
#!/usr/bin/env python3
"""Export the Slipnet structure to a JSON file.
This script is self-contained to avoid Python version compatibility issues
with the main copycat package.
"""
import json
class Slipnode:
"""Minimal Slipnode for export purposes."""
def __init__(self, slipnet, name, depth, length=0.0):
self.slipnet = slipnet
self.name = name
self.conceptualDepth = depth
self.intrinsicLinkLength = length
self.shrunkLinkLength = length * 0.4
self.codelets = []
self.categoryLinks = []
self.instanceLinks = []
self.propertyLinks = []
self.lateralSlipLinks = []
self.lateralNonSlipLinks = []
self.incomingLinks = []
self.outgoingLinks = []
class Sliplink:
"""Minimal Sliplink for export purposes."""
def __init__(self, source, destination, label=None, length=0.0):
self.source = source
self.destination = destination
self.label = label
self.fixedLength = length
source.outgoingLinks.append(self)
destination.incomingLinks.append(self)
class SlipnetExporter:
"""Recreates the Slipnet structure for export."""
def __init__(self):
self.slipnodes = []
self.sliplinks = []
self._addInitialNodes()
self._addInitialLinks()
def _addNode(self, name, depth, length=0):
slipnode = Slipnode(self, name, depth, length)
self.slipnodes.append(slipnode)
return slipnode
def _addLink(self, source, destination, label=None, length=0.0):
link = Sliplink(source, destination, label=label, length=length)
self.sliplinks.append(link)
return link
def _addSlipLink(self, source, destination, label=None, length=0.0):
link = self._addLink(source, destination, label, length)
source.lateralSlipLinks.append(link)
def _addNonSlipLink(self, source, destination, label=None, length=0.0):
link = self._addLink(source, destination, label, length)
source.lateralNonSlipLinks.append(link)
def _addBidirectionalLink(self, source, destination, length):
self._addNonSlipLink(source, destination, length=length)
self._addNonSlipLink(destination, source, length=length)
def _addCategoryLink(self, source, destination, length):
link = self._addLink(source, destination, None, length)
source.categoryLinks.append(link)
def _addInstanceLink(self, source, destination, length=100.0):
categoryLength = source.conceptualDepth - destination.conceptualDepth
self._addCategoryLink(destination, source, categoryLength)
link = self._addLink(source, destination, None, length)
source.instanceLinks.append(link)
def _addPropertyLink(self, source, destination, length):
link = self._addLink(source, destination, None, length)
source.propertyLinks.append(link)
def _addOppositeLink(self, source, destination):
self._addSlipLink(source, destination, label=self.opposite)
self._addSlipLink(destination, source, label=self.opposite)
def _link_items_to_their_neighbors(self, items):
previous = items[0]
for item in items[1:]:
self._addNonSlipLink(previous, item, label=self.successor)
self._addNonSlipLink(item, previous, label=self.predecessor)
previous = item
def _addInitialNodes(self):
self.letters = []
for c in 'abcdefghijklmnopqrstuvwxyz':
slipnode = self._addNode(c, 10.0)
self.letters.append(slipnode)
self.numbers = []
for c in '12345':
slipnode = self._addNode(c, 30.0)
self.numbers.append(slipnode)
# string positions
self.leftmost = self._addNode('leftmost', 40.0)
self.rightmost = self._addNode('rightmost', 40.0)
self.middle = self._addNode('middle', 40.0)
self.single = self._addNode('single', 40.0)
self.whole = self._addNode('whole', 40.0)
# alphabetic positions
self.first = self._addNode('first', 60.0)
self.last = self._addNode('last', 60.0)
# directions
self.left = self._addNode('left', 40.0)
self.left.codelets += ['top-down-bond-scout--direction']
self.left.codelets += ['top-down-group-scout--direction']
self.right = self._addNode('right', 40.0)
self.right.codelets += ['top-down-bond-scout--direction']
self.right.codelets += ['top-down-group-scout--direction']
# bond types
self.predecessor = self._addNode('predecessor', 50.0, 60.0)
self.predecessor.codelets += ['top-down-bond-scout--category']
self.successor = self._addNode('successor', 50.0, 60.0)
self.successor.codelets += ['top-down-bond-scout--category']
self.sameness = self._addNode('sameness', 80.0)
self.sameness.codelets += ['top-down-bond-scout--category']
# group types
self.predecessorGroup = self._addNode('predecessorGroup', 50.0)
self.predecessorGroup.codelets += ['top-down-group-scout--category']
self.successorGroup = self._addNode('successorGroup', 50.0)
self.successorGroup.codelets += ['top-down-group-scout--category']
self.samenessGroup = self._addNode('samenessGroup', 80.0)
self.samenessGroup.codelets += ['top-down-group-scout--category']
# other relations
self.identity = self._addNode('identity', 90.0)
self.opposite = self._addNode('opposite', 90.0, 80.0)
# objects
self.letter = self._addNode('letter', 20.0)
self.group = self._addNode('group', 80.0)
# categories
self.letterCategory = self._addNode('letterCategory', 30.0)
self.stringPositionCategory = self._addNode('stringPositionCategory', 70.0)
self.stringPositionCategory.codelets += ['top-down-description-scout']
self.alphabeticPositionCategory = self._addNode('alphabeticPositionCategory', 80.0)
self.alphabeticPositionCategory.codelets += ['top-down-description-scout']
self.directionCategory = self._addNode('directionCategory', 70.0)
self.bondCategory = self._addNode('bondCategory', 80.0)
self.groupCategory = self._addNode('groupCategory', 80.0)
self.length = self._addNode('length', 60.0)
self.objectCategory = self._addNode('objectCategory', 90.0)
self.bondFacet = self._addNode('bondFacet', 90.0)
self.initiallyClampedSlipnodes = [
self.letterCategory,
self.stringPositionCategory,
]
def _addInitialLinks(self):
self._link_items_to_their_neighbors(self.letters)
self._link_items_to_their_neighbors(self.numbers)
# letter categories
for letter in self.letters:
self._addInstanceLink(self.letterCategory, letter, 97.0)
self._addCategoryLink(self.samenessGroup, self.letterCategory, 50.0)
# lengths
for number in self.numbers:
self._addInstanceLink(self.length, number)
groups = [self.predecessorGroup, self.successorGroup, self.samenessGroup]
for group in groups:
self._addNonSlipLink(group, self.length, length=95.0)
opposites = [
(self.first, self.last),
(self.leftmost, self.rightmost),
(self.left, self.right),
(self.successor, self.predecessor),
(self.successorGroup, self.predecessorGroup),
]
for a, b in opposites:
self._addOppositeLink(a, b)
# properties
self._addPropertyLink(self.letters[0], self.first, 75.0)
self._addPropertyLink(self.letters[-1], self.last, 75.0)
links = [
# object categories
(self.objectCategory, self.letter),
(self.objectCategory, self.group),
# string positions
(self.stringPositionCategory, self.leftmost),
(self.stringPositionCategory, self.rightmost),
(self.stringPositionCategory, self.middle),
(self.stringPositionCategory, self.single),
(self.stringPositionCategory, self.whole),
# alphabetic positions
(self.alphabeticPositionCategory, self.first),
(self.alphabeticPositionCategory, self.last),
# direction categories
(self.directionCategory, self.left),
(self.directionCategory, self.right),
# bond categories
(self.bondCategory, self.predecessor),
(self.bondCategory, self.successor),
(self.bondCategory, self.sameness),
# group categories
(self.groupCategory, self.predecessorGroup),
(self.groupCategory, self.successorGroup),
(self.groupCategory, self.samenessGroup),
# bond facets
(self.bondFacet, self.letterCategory),
(self.bondFacet, self.length),
]
for a, b in links:
self._addInstanceLink(a, b)
# link bonds to their groups
self._addNonSlipLink(self.sameness, self.samenessGroup, label=self.groupCategory, length=30.0)
self._addNonSlipLink(self.successor, self.successorGroup, label=self.groupCategory, length=60.0)
self._addNonSlipLink(self.predecessor, self.predecessorGroup, label=self.groupCategory, length=60.0)
# link bond groups to their bonds
self._addNonSlipLink(self.samenessGroup, self.sameness, label=self.bondCategory, length=90.0)
self._addNonSlipLink(self.successorGroup, self.successor, label=self.bondCategory, length=90.0)
self._addNonSlipLink(self.predecessorGroup, self.predecessor, label=self.bondCategory, length=90.0)
# letter category to length
self._addSlipLink(self.letterCategory, self.length, length=95.0)
self._addSlipLink(self.length, self.letterCategory, length=95.0)
# letter to group
self._addSlipLink(self.letter, self.group, length=90.0)
self._addSlipLink(self.group, self.letter, length=90.0)
# direction-position, direction-neighbor, position-neighbor
self._addBidirectionalLink(self.left, self.leftmost, 90.0)
self._addBidirectionalLink(self.right, self.rightmost, 90.0)
self._addBidirectionalLink(self.right, self.leftmost, 100.0)
self._addBidirectionalLink(self.left, self.rightmost, 100.0)
self._addBidirectionalLink(self.leftmost, self.first, 100.0)
self._addBidirectionalLink(self.rightmost, self.first, 100.0)
self._addBidirectionalLink(self.leftmost, self.last, 100.0)
self._addBidirectionalLink(self.rightmost, self.last, 100.0)
# other
self._addSlipLink(self.single, self.whole, length=90.0)
self._addSlipLink(self.whole, self.single, length=90.0)
def export_slipnet():
"""Export slipnet nodes and links to a JSON structure."""
slipnet = SlipnetExporter()
# Build node data
nodes = []
node_to_id = {}
for node in slipnet.slipnodes:
node_to_id[node] = node.name
node_data = {
"name": node.name,
"conceptualDepth": node.conceptualDepth,
"intrinsicLinkLength": node.intrinsicLinkLength,
"shrunkLinkLength": node.shrunkLinkLength,
}
if node.codelets:
node_data["codelets"] = node.codelets
nodes.append(node_data)
# Build link data with type classification
links = []
for link in slipnet.sliplinks:
link_data = {
"source": node_to_id[link.source],
"destination": node_to_id[link.destination],
"fixedLength": link.fixedLength,
}
if link.label:
link_data["label"] = node_to_id[link.label]
# Determine link type
if link in link.source.lateralSlipLinks:
link_data["type"] = "slip"
elif link in link.source.lateralNonSlipLinks:
link_data["type"] = "nonSlip"
elif link in link.source.categoryLinks:
link_data["type"] = "category"
elif link in link.source.instanceLinks:
link_data["type"] = "instance"
elif link in link.source.propertyLinks:
link_data["type"] = "property"
links.append(link_data)
# Identify initially clamped nodes
initially_clamped = [node_to_id[n] for n in slipnet.initiallyClampedSlipnodes]
# Create the full structure
data = {
"description": "Copycat Slipnet - A semantic network for analogical reasoning",
"nodeCount": len(nodes),
"linkCount": len(links),
"initiallyClampedNodes": initially_clamped,
"nodes": nodes,
"links": links,
}
return data
if __name__ == '__main__':
data = export_slipnet()
output_file = 'slipnet.json'
with open(output_file, 'w') as f:
json.dump(data, f, indent=2)
print(f"Exported {data['nodeCount']} nodes and {data['linkCount']} links to {output_file}")

View File

@ -0,0 +1,108 @@
"""
Plot correlation between minimum hops to letter nodes and conceptual depth.
"""
import json
import matplotlib
matplotlib.use('Agg') # Non-interactive backend
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
def load_slipnet(filepath):
with open(filepath, 'r') as f:
return json.load(f)
def main():
filepath = r'C:\Users\alexa\copycat\slipnet_analysis\slipnet.json'
data = load_slipnet(filepath)
# Extract data points (excluding letter nodes themselves)
names = []
depths = []
hops = []
is_unreachable = [] # Track which nodes are unreachable
for node in data['nodes']:
name = node['name']
depth = node['conceptualDepth']
path_info = node.get('minPathToLetter', {})
hop_count = path_info.get('hops')
nearest = path_info.get('nearestLetter')
# Skip letter nodes (hops 0)
if hop_count is not None and hop_count > 0:
names.append(name)
depths.append(depth)
hops.append(hop_count)
# Unreachable nodes have no nearestLetter
is_unreachable.append(nearest is None)
# Convert to numpy arrays
depths = np.array(depths)
hops = np.array(hops)
is_unreachable = np.array(is_unreachable)
# Compute correlation
correlation, p_value = stats.pearsonr(depths, hops)
spearman_corr, spearman_p = stats.spearmanr(depths, hops)
# Create the plot
fig, ax = plt.subplots(figsize=(10, 8))
# Scatter plot with jitter for overlapping points
jitter = np.random.normal(0, 0.08, len(hops))
# Plot reachable nodes in blue
reachable_mask = ~is_unreachable
ax.scatter(depths[reachable_mask], hops[reachable_mask] + jitter[reachable_mask],
alpha=0.7, s=100, c='steelblue', edgecolors='navy', label='Reachable')
# Plot unreachable nodes in red
if np.any(is_unreachable):
ax.scatter(depths[is_unreachable], hops[is_unreachable] + jitter[is_unreachable],
alpha=0.7, s=100, c='crimson', edgecolors='darkred', label='Unreachable (2×max)')
# Add labels to each point
for i, name in enumerate(names):
ax.annotate(name, (depths[i], hops[i] + jitter[i]), fontsize=8, alpha=0.8,
xytext=(5, 5), textcoords='offset points')
# Add trend line
z = np.polyfit(depths, hops, 1)
p = np.poly1d(z)
x_line = np.linspace(min(depths), max(depths), 100)
ax.plot(x_line, p(x_line), "r--", alpha=0.8, label=f'Linear fit (y = {z[0]:.3f}x + {z[1]:.2f})')
# Labels and title
ax.set_xlabel('Conceptual Depth', fontsize=12)
ax.set_ylabel('Minimum Hops to Letter Node (Erdos-style)', fontsize=12)
ax.set_title('Correlation: Conceptual Depth vs Hops to Nearest Letter\n'
f'Pearson r = {correlation:.3f} (p = {p_value:.4f}), '
f'Spearman rho = {spearman_corr:.3f} (p = {spearman_p:.4f})',
fontsize=11)
ax.legend(loc='upper left')
ax.grid(True, alpha=0.3)
max_hops = int(max(hops))
ax.set_yticks(range(1, max_hops + 1))
ax.set_ylim(0.5, max_hops + 0.5)
# Print statistics
print(f"Number of nodes with paths (excluding letters): {len(names)}")
print(f"\nPearson correlation: r = {correlation:.4f}, p-value = {p_value:.6f}")
print(f"Spearman correlation: rho = {spearman_corr:.4f}, p-value = {spearman_p:.6f}")
print(f"\nLinear regression: hops = {z[0]:.4f} * depth + {z[1]:.4f}")
print("\nData points:")
print(f"{'Node':<30} {'Depth':<10} {'Hops':<10}")
print("-" * 50)
for name, depth, hop in sorted(zip(names, depths, hops), key=lambda x: (x[2], x[1])):
print(f"{name:<30} {depth:<10.1f} {hop:<10}")
plt.tight_layout()
plt.savefig(r'C:\Users\alexa\copycat\slipnet_analysis\depth_hops_correlation.png', dpi=150)
print(f"\nPlot saved to: C:\\Users\\alexa\\copycat\\slipnet_analysis\\depth_hops_correlation.png")
if __name__ == '__main__':
main()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,46 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\citation{mitchell1993,hofstadter1995}
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}The Slipnet Architecture}{1}{subsection.1.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Conceptual Depth}{2}{subsection.1.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Research Question}{2}{subsection.1.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2}Methods}{2}{section.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Data Extraction}{2}{subsection.2.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Graph Construction}{2}{subsection.2.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Hop Count Computation}{2}{subsection.2.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Handling Unreachable Nodes}{2}{subsection.2.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Statistical Analysis}{3}{subsection.2.5}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3}Results}{3}{section.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Network Connectivity}{3}{subsection.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Hop Distribution}{3}{subsection.3.2}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Distribution of minimum hops to letter nodes}}{3}{table.caption.2}\protected@file@percent }
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
\newlabel{tab:hops}{{1}{3}{Distribution of minimum hops to letter nodes}{table.caption.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Descriptive Statistics}{3}{subsection.3.3}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Descriptive statistics for analyzed nodes (n=33)}}{3}{table.caption.3}\protected@file@percent }
\newlabel{tab:descriptive}{{2}{3}{Descriptive statistics for analyzed nodes (n=33)}{table.caption.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Correlation Analysis}{3}{subsection.3.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Visualization}{4}{subsection.3.5}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Scatter plot of conceptual depth versus minimum hops to nearest letter node. Reachable nodes (blue) and unreachable nodes (red, assigned hops=$2 \times 4 = 8$) are distinguished. Points are jittered vertically for visibility. The dashed line shows the linear regression fit.}}{4}{figure.caption.4}\protected@file@percent }
\newlabel{fig:scatter}{{1}{4}{Scatter plot of conceptual depth versus minimum hops to nearest letter node. Reachable nodes (blue) and unreachable nodes (red, assigned hops=$2 \times 4 = 8$) are distinguished. Points are jittered vertically for visibility. The dashed line shows the linear regression fit}{figure.caption.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Counterexamples}{4}{subsection.3.6}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4}Discussion}{4}{section.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Orthogonal Design Dimensions}{4}{subsection.4.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}The Disconnected Cluster}{5}{subsection.4.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Hub Structure}{5}{subsection.4.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Implications}{5}{subsection.4.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Limitations}{5}{subsection.4.5}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusion}{5}{section.5}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {A}Complete Data}{6}{appendix.A}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces All analyzed nodes sorted by hop count, then depth}}{6}{table.caption.6}\protected@file@percent }
\newlabel{tab:complete}{{3}{6}{All analyzed nodes sorted by hop count, then depth}{table.caption.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {B}Link Type Distribution}{6}{appendix.B}\protected@file@percent }
\bibcite{mitchell1993}{{1}{}{{}}{{}}}
\bibcite{hofstadter1995}{{2}{}{{}}{{}}}
\providecommand\NAT@force@numbers{}\NAT@force@numbers
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Slipnet link type distribution}}{7}{table.caption.7}\protected@file@percent }
\newlabel{tab:links}{{4}{7}{Slipnet link type distribution}{table.caption.7}{}}
\gdef \@abspage@last{7}

View File

@ -0,0 +1,719 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.28 (MiKTeX 25.12) (preloaded format=pdflatex 2026.1.28) 1 FEB 2026 19:58
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**./slipnet_depth_analysis.tex
(slipnet_depth_analysis.tex
LaTeX2e <2025-11-01>
L3 programming layer <2025-12-29>
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/base\article.cls
Document Class: article 2025/01/22 v1.4n Standard LaTeX document class
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/base\size11.clo
File: size11.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
)
\c@part=\count275
\c@section=\count276
\c@subsection=\count277
\c@subsubsection=\count278
\c@paragraph=\count279
\c@subparagraph=\count280
\c@figure=\count281
\c@table=\count282
\abovecaptionskip=\skip49
\belowcaptionskip=\skip50
\bibindent=\dimen148
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/base\inputenc.sty
Package: inputenc 2024/02/08 v1.3d Input encoding file
\inpenc@prehook=\toks17
\inpenc@posthook=\toks18
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/base\fontenc.sty
Package: fontenc 2025/07/18 v2.1d Standard LaTeX package
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsmath\amsmath.sty
Package: amsmath 2025/07/09 v2.17z AMS math features
\@mathmargin=\skip51
For additional information on amsmath, use the `?' option.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsmath\amstext.sty
Package: amstext 2024/11/17 v2.01 AMS text
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsmath\amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks19
\ex@=\dimen149
))
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsmath\amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen150
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsmath\amsopn.sty
Package: amsopn 2022/04/08 v2.04 operator names
)
\inf@bad=\count283
LaTeX Info: Redefining \frac on input line 233.
\uproot@=\count284
\leftroot@=\count285
LaTeX Info: Redefining \overline on input line 398.
LaTeX Info: Redefining \colon on input line 409.
\classnum@=\count286
\DOTSCASE@=\count287
LaTeX Info: Redefining \ldots on input line 495.
LaTeX Info: Redefining \dots on input line 498.
LaTeX Info: Redefining \cdots on input line 619.
\Mathstrutbox@=\box53
\strutbox@=\box54
LaTeX Info: Redefining \big on input line 721.
LaTeX Info: Redefining \Big on input line 722.
LaTeX Info: Redefining \bigg on input line 723.
LaTeX Info: Redefining \Bigg on input line 724.
\big@size=\dimen151
LaTeX Font Info: Redeclaring font encoding OML on input line 742.
LaTeX Font Info: Redeclaring font encoding OMS on input line 743.
\macc@depth=\count288
LaTeX Info: Redefining \bmod on input line 904.
LaTeX Info: Redefining \pmod on input line 909.
LaTeX Info: Redefining \smash on input line 939.
LaTeX Info: Redefining \relbar on input line 969.
LaTeX Info: Redefining \Relbar on input line 970.
\c@MaxMatrixCols=\count289
\dotsspace@=\muskip17
\c@parentequation=\count290
\dspbrk@lvl=\count291
\tag@help=\toks20
\row@=\count292
\column@=\count293
\maxfields@=\count294
\andhelp@=\toks21
\eqnshift@=\dimen152
\alignsep@=\dimen153
\tagshift@=\dimen154
\tagwidth@=\dimen155
\totwidth@=\dimen156
\lineht@=\dimen157
\@envbody=\toks22
\multlinegap=\skip52
\multlinetaggap=\skip53
\mathdisplay@stack=\toks23
LaTeX Info: Redefining \[ on input line 2950.
LaTeX Info: Redefining \] on input line 2951.
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\symAMSa=\mathgroup4
\symAMSb=\mathgroup5
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
)) (C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics\graphicx.st
y
Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics\keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks24
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics\graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics\trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics-cfg\graphics.c
fg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 106.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/graphics-def\pdftex.def
File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex
))
\Gin@req@height=\dimen158
\Gin@req@width=\dimen159
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/booktabs\booktabs.sty
Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
\heavyrulewidth=\dimen160
\lightrulewidth=\dimen161
\cmidrulewidth=\dimen162
\belowrulesep=\dimen163
\belowbottomsep=\dimen164
\aboverulesep=\dimen165
\abovetopsep=\dimen166
\cmidrulesep=\dimen167
\cmidrulekern=\dimen168
\defaultaddspace=\dimen169
\@cmidla=\count295
\@cmidlb=\count296
\@aboverulesep=\dimen170
\@belowrulesep=\dimen171
\@thisruleclass=\count297
\@lastruleclass=\count298
\@thisrulewidth=\dimen172
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\hyperref.sty
Package: hyperref 2025-07-12 v7.01o Hypertext links for LaTeX
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/iftex\iftex.sty
Package: iftex 2024/12/12 v1.0g TeX engine tests
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/kvsetkeys\kvsetkeys.sty
Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/kvdefinekeys\kvdefine
keys.sty
Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/pdfescape\pdfescape.s
ty
Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/ltxcmds\ltxcmds.sty
Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/pdftexcmds\pdftexcmds
.sty
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/infwarerr\infwarerr.s
ty
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
)
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
))
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hycolor\hycolor.sty
Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\nameref.sty
Package: nameref 2025-06-21 v2.57 Cross-referencing by name of section
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/refcount\refcount.sty
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/gettitlestring\gettit
lestring.sty
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/kvoptions\kvoptions.sty
Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO)
))
\c@section@level=\count299
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/etoolbox\etoolbox.sty
Package: etoolbox 2025/10/02 v2.5m e-TeX tools for LaTeX (JAW)
\etb@tempcnta=\count300
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/stringenc\stringenc.s
ty
Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO
)
)
\@linkdim=\dimen173
\Hy@linkcounter=\count301
\Hy@pagecounter=\count302
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\pd1enc.def
File: pd1enc.def 2025-07-12 v7.01o Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
) (C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/intcalc\intcalc.sty
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
)
\Hy@SavedSpaceFactor=\count303
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\puenc.def
File: puenc.def 2025-07-12 v7.01o Hyperref: PDF Unicode definition (HO)
Now handling font encoding PU ...
... no UTF-8 mapping file for font encoding PU
)
Package hyperref Info: Hyper figures OFF on input line 4195.
Package hyperref Info: Link nesting OFF on input line 4200.
Package hyperref Info: Hyper index ON on input line 4203.
Package hyperref Info: Plain pages OFF on input line 4210.
Package hyperref Info: Backreferencing OFF on input line 4215.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4462.
\c@Hy@tempcnt=\count304
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/url\url.sty
\Urlmuskip=\muskip18
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
LaTeX Info: Redefining \url on input line 4801.
\XeTeXLinkMargin=\dimen174
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/bitset\bitset.sty
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/bigintcalc\bigintcalc
.sty
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
)
))
\Fld@menulength=\count305
\Field@Width=\dimen175
\Fld@charsize=\dimen176
Package hyperref Info: Hyper figures OFF on input line 6078.
Package hyperref Info: Link nesting OFF on input line 6083.
Package hyperref Info: Hyper index ON on input line 6086.
Package hyperref Info: backreferencing OFF on input line 6093.
Package hyperref Info: Link coloring OFF on input line 6098.
Package hyperref Info: Link coloring with OCG OFF on input line 6103.
Package hyperref Info: PDF/A mode OFF on input line 6108.
\Hy@abspage=\count306
\c@Item=\count307
\c@Hfootnote=\count308
)
Package hyperref Info: Driver (autodetected): hpdftex.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\hpdftex.def
File: hpdftex.def 2025-07-12 v7.01o Hyperref driver for pdfTeX
\Fld@listcount=\count309
\c@bookmark@seq@number=\count310
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/rerunfilecheck\rerunfil
echeck.sty
Package: rerunfilecheck 2025-06-21 v1.11 Rerun checks for auxiliary files (HO)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/uniquecounter\uniquec
ounter.sty
Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
84.
)
\Hy@SectionHShift=\skip54
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/geometry\geometry.sty
Package: geometry 2020/01/02 v5.9 Page Geometry
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/generic/iftex\ifvtex.sty
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
)
\Gm@cnth=\count311
\Gm@cntv=\count312
\c@Gm@tempcnt=\count313
\Gm@bindingoffset=\dimen177
\Gm@wd@mp=\dimen178
\Gm@odd@mp=\dimen179
\Gm@even@mp=\dimen180
\Gm@layoutwidth=\dimen181
\Gm@layoutheight=\dimen182
\Gm@layouthoffset=\dimen183
\Gm@layoutvoffset=\dimen184
\Gm@dimlist=\toks25
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/geometry\geometry.cfg))
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/natbib\natbib.sty
Package: natbib 2010/09/13 8.31b (PWD, AO)
\bibhang=\skip55
\bibsep=\skip56
LaTeX Info: Redefining \cite on input line 694.
\c@NAT@ctr=\count314
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/float\float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count315
\float@exts=\toks26
\float@box=\box55
\@float@everytoks=\toks27
\@floatcapt=\box56
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/caption\caption.sty
Package: caption 2023/08/05 v3.6o Customizing captions (AR)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/caption\caption3.sty
Package: caption3 2023/07/31 v2.4d caption3 kernel (AR)
\caption@tempdima=\dimen185
\captionmargin=\dimen186
\caption@leftmargin=\dimen187
\caption@rightmargin=\dimen188
\caption@width=\dimen189
\caption@indent=\dimen190
\caption@parindent=\dimen191
\caption@hangindent=\dimen192
Package caption Info: Standard document class detected.
)
\c@caption@flags=\count316
\c@continuedfloat=\count317
Package caption Info: float package is loaded.
Package caption Info: hyperref package is loaded.
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/caption\subcaption.sty
Package: subcaption 2023/07/28 v1.6b Sub-captions (AR)
Package caption Info: New subtype `subfigure' on input line 238.
\c@subfigure=\count318
Package caption Info: New subtype `subtable' on input line 238.
\c@subtable=\count319
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/l3backend\l3backend-pdf
tex.def
File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count320
) (slipnet_depth_analysis.aux
! Package natbib Error: Bibliography not compatible with author-year citations.
(natbib) Press <return> to continue in numerical citation style.
See the natbib package documentation for explanation.
Type H <return> for immediate help.
...
l.43 ...mand\NAT@force@numbers{}\NAT@force@numbers
Check the bibliography entries for non-compliant syntax,
or select author-year BibTeX style, e.g. plainnat
)
\openout1 = `slipnet_depth_analysis.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/context/base/mkii\supp-pdf.mk
ii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count321
\scratchdimen=\dimen193
\scratchbox=\box57
\nofMPsegments=\count322
\nofMParguments=\count323
\everyMPshowfont=\toks28
\MPscratchCnt=\count324
\MPscratchDim=\dimen194
\MPnumerator=\count325
\makeMPintoPDFobject=\count326
\everyMPtoPDFconversion=\toks29
)
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/epstopdf-pkg\epstopdf-b
ase.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/00miktex\epstopdf-sys.c
fg
File: epstopdf-sys.cfg 2021/03/18 v2.0 Configuration of epstopdf for MiKTeX
))
Package hyperref Info: Link coloring OFF on input line 24.
(slipnet_depth_analysis.out) (slipnet_depth_analysis.out)
\@outlinefile=\write3
\openout3 = `slipnet_depth_analysis.out'.
*geometry* driver: auto-detecting
*geometry* detected driver: pdftex
*geometry* verbose mode - [ preamble ] result:
* driver: pdftex
* paper: <default>
* layout: <same size as paper>
* layoutoffset:(h,v)=(0.0pt,0.0pt)
* modes:
* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt)
* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt)
* \paperwidth=614.295pt
* \paperheight=794.96999pt
* \textwidth=469.75502pt
* \textheight=650.43001pt
* \oddsidemargin=0.0pt
* \evensidemargin=0.0pt
* \topmargin=-37.0pt
* \headheight=12.0pt
* \headsep=25.0pt
* \topskip=11.0pt
* \footskip=30.0pt
* \marginparwidth=4.0pt
* \marginparsep=10.0pt
* \columnsep=10.0pt
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
* \hoffset=0.0pt
* \voffset=0.0pt
* \mag=1000
* \@twocolumntrue
* \@twosidefalse
* \@mparswitchfalse
* \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
Package caption Info: Begin \AtBeginDocument code.
Package caption Info: End \AtBeginDocument code.
LaTeX Font Info: Trying to load font information for U+msa on input line 27.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Trying to load font information for U+msb on input line 27.
(C:\Users\alexa\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
Underfull \hbox (badness 10000) in paragraph at lines 43--44
[]\T1/cmr/bx/n/10.95 Positional con-cepts\T1/cmr/m/n/10.95 : \T1/cmtt/m/n/10.95
leftmost\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 10000) in paragraph at lines 44--45
[]\T1/cmr/bx/n/10.95 Relational con-cepts\T1/cmr/m/n/10.95 : \T1/cmtt/m/n/10.95
successor\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 2617) in paragraph at lines 45--46
[]\T1/cmr/bx/n/10.95 Category con-cepts\T1/cmr/m/n/10.95 : \T1/cmtt/m/n/10.95 l
etterCategory\T1/cmr/m/n/10.95 ,
[]
[1{C:/Users/alexa/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map}
]
Underfull \hbox (badness 10000) in paragraph at lines 62--63
[]\T1/cmtt/m/n/10.95 stringPositionCategory\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 10000) in paragraph at lines 64--65
[]\T1/cmtt/m/n/10.95 opposite\T1/cmr/m/n/10.95 , \T1/cmtt/m/n/10.95 identity\T1
/cmr/m/n/10.95 , \T1/cmtt/m/n/10.95 bondFacet\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 6332) in paragraph at lines 64--65
\T1/cmtt/m/n/10.95 objectCategory\T1/cmr/m/n/10.95 : depth = 90 (most
[]
[2]
Underfull \hbox (badness 10000) in paragraph at lines 142--143
[]\T1/cmtt/m/n/10.95 letterCategory\T1/cmr/m/n/10.95 , \T1/cmtt/m/n/10.95 first
\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 10000) in paragraph at lines 143--144
[]\T1/cmtt/m/n/10.95 leftmost\T1/cmr/m/n/10.95 , \T1/cmtt/m/n/10.95 length\T1/c
mr/m/n/10.95 ,
[]
Underfull \hbox (badness 1668) in paragraph at lines 144--145
[]\T1/cmr/m/n/10.95 Numbers 1--5, \T1/cmtt/m/n/10.95 sameness\T1/cmr/m/n/10.95
,
[]
Underfull \hbox (badness 10000) in paragraph at lines 145--146
[]\T1/cmtt/m/n/10.95 bondCategory\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 10000) in paragraph at lines 146--147
[]\T1/cmtt/m/n/10.95 identity\T1/cmr/m/n/10.95 , \T1/cmtt/m/n/10.95 opposite\T1
/cmr/m/n/10.95 ,
[]
[3]
<depth_hops_correlation.png, id=151, 722.7pt x 578.16pt>
File: depth_hops_correlation.png Graphic file (type png)
<use depth_hops_correlation.png>
Package pdftex.def Info: depth_hops_correlation.png used on input line 194.
(pdftex.def) Requested size: 229.8775pt x 183.9034pt.
Underfull \hbox (badness 2809) in paragraph at lines 204--205
[]\T1/cmr/bx/n/10.95 High depth, few hops\T1/cmr/m/n/10.95 : \T1/cmtt/m/n/10.95
bondFacet
[]
Underfull \hbox (badness 1939) in paragraph at lines 204--205
\T1/cmr/m/n/10.95 and \T1/cmtt/m/n/10.95 alphabeticPositionCategory \T1/cmr/m/n
/10.95 (both
[]
Underfull \hbox (badness 5924) in paragraph at lines 208--209
[]\T1/cmr/bx/n/10.95 Same depth, dif-fer-ent hops\T1/cmr/m/n/10.95 : At
[]
Underfull \hbox (badness 10000) in paragraph at lines 208--209
\T1/cmr/m/n/10.95 depth=90, \T1/cmtt/m/n/10.95 bondFacet \T1/cmr/m/n/10.95 need
s only
[]
Underfull \hbox (badness 10000) in paragraph at lines 208--209
\T1/cmr/m/n/10.95 2 hops while \T1/cmtt/m/n/10.95 identity\T1/cmr/m/n/10.95 , \
T1/cmtt/m/n/10.95 opposite\T1/cmr/m/n/10.95 ,
[]
Underfull \hbox (badness 10000) in paragraph at lines 208--209
\T1/cmr/m/n/10.95 and \T1/cmtt/m/n/10.95 objectCategory \T1/cmr/m/n/10.95 are c
om-pletely
[]
Underfull \hbox (badness 3219) in paragraph at lines 222--223
\T1/cmr/m/n/10.95 cepts can ac-ti-vate each other through
[]
Underfull \hbox (badness 1540) in paragraph at lines 222--223
\T1/cmr/m/n/10.95 by an edge can di-rectly in-flu-ence each
[]
[4 <./depth_hops_correlation.png>]
Underfull \hbox (badness 7099) in paragraph at lines 236--237
\T1/cmr/m/n/10.95 object-type hi-er-ar-chy. They clas-sify
[]
Underfull \hbox (badness 3396) in paragraph at lines 239--240
[]\T1/cmr/m/n/10.95 Notably, the \T1/cmtt/m/n/10.95 letter \T1/cmr/m/n/10.95 co
n-cept (depth=20,
[]
Underfull \hbox (badness 10000) in paragraph at lines 239--240
\T1/cmr/m/n/10.95 rel-a-tively con-crete) is dis-con-nected while
[]
Underfull \hbox (badness 1478) in paragraph at lines 239--240
\T1/cmtt/m/n/10.95 letterCategory \T1/cmr/m/n/10.95 (depth=30) is di-rectly con
-
[]
Underfull \hbox (badness 6559) in paragraph at lines 239--240
\T1/cmr/m/n/10.95 ``letter-as-type'' and ``letter-as-category'' fur-
[]
Underfull \hbox (badness 3525) in paragraph at lines 272--273
[]\T1/cmr/bx/n/10.95 Penalty as-sign-ment\T1/cmr/m/n/10.95 : The choice of
[]
Underfull \hbox (badness 2042) in paragraph at lines 274--275
[]\T1/cmr/bx/n/10.95 Undirected as-sump-tion\T1/cmr/m/n/10.95 : We treated
[]
[5]
Underfull \hbox (badness 2285) in paragraph at lines 289--290
[]\T1/cmtt/m/n/10.95 slipnet.json\T1/cmr/m/n/10.95 : Com-plete net-work with
[]
Underfull \hbox (badness 10000) in paragraph at lines 291--292
[]\T1/cmtt/m/n/10.95 plot_depth_distance_correlation.py\T1/cmr/m/n/10.95 :
[]
Overfull \hbox (31.95923pt too wide) in paragraph at lines 306--349
[][]
[]
Underfull \vbox (badness 10000) has occurred while \output is active []
Underfull \hbox (badness 10000) in paragraph at lines 363--364
[]\T1/cmr/m/n/10.95 Lateral as-so-ci-a-tions
[]
Underfull \hbox (badness 1590) in paragraph at lines 363--364
\T1/cmr/m/n/10.95 that don't al-low con-
[]
Underfull \hbox (badness 1308) in paragraph at lines 364--365
[]\T1/cmr/m/n/10.95 Upward hi-er-ar-chy (in-
[]
Underfull \hbox (badness 10000) in paragraph at lines 365--366
[]\T1/cmr/m/n/10.95 Downward hi-er-ar-chy
[]
Underfull \hbox (badness 10000) in paragraph at lines 367--368
[]\T1/cmr/m/n/10.95 Intrinsic at-tributes
[]
Underfull \vbox (badness 10000) has occurred while \output is active []
[6]
[7
] (slipnet_depth_analysis.aux)
***********
LaTeX2e <2025-11-01>
L3 programming layer <2025-12-29>
***********
Package rerunfilecheck Info: File `slipnet_depth_analysis.out' has not changed.
(rerunfilecheck) Checksum: EE379051615A964053B9116F5B823DA0;3632.
)
Here is how much of TeX's memory you used:
12369 strings out of 467871
192910 string characters out of 5418376
617452 words of memory out of 5000000
41044 multiletter control sequences out of 15000+600000
644966 words of font info for 86 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191
75i,11n,79p,1103b,511s stack positions out of 10000i,1000n,20000p,200000b,200000s
<C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ecrm
1000.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi60
0\ecrm0600.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec
/dpi600\ecrm0800.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknap
pen/ec/dpi600\ectt1095.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour
/jknappen/ec/dpi600\ecbx1095.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fonts/pk/
ljfour/jknappen/ec/dpi600\tcrm1095.pk> <C:\Users\alexa\AppData\Local\MiKTeX\fon
ts/pk/ljfour/jknappen/ec/dpi600\ecti1095.pk> <C:\Users\alexa\AppData\Local\MiKT
eX\fonts/pk/ljfour/jknappen/ec/dpi600\ecbx1200.pk> <C:\Users\alexa\AppData\Loca
l\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ecrm1095.pk> <C:\Users\alexa\AppDat
a\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ecbx1440.pk> <C:\Users\alexa\
AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ectt1200.pk> <C:\Users\
alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ecrm1200.pk> <C:\
Users\alexa\AppData\Local\MiKTeX\fonts/pk/ljfour/jknappen/ec/dpi600\ecrm1728.pk
><C:/Users/alexa/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/c
mmi10.pfb><C:/Users/alexa/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsf
onts/cm/cmmi8.pfb><C:/Users/alexa/AppData/Local/Programs/MiKTeX/fonts/type1/pub
lic/amsfonts/cm/cmr10.pfb><C:/Users/alexa/AppData/Local/Programs/MiKTeX/fonts/t
ype1/public/amsfonts/cm/cmr8.pfb><C:/Users/alexa/AppData/Local/Programs/MiKTeX/
fonts/type1/public/amsfonts/cm/cmsy10.pfb><C:/Users/alexa/AppData/Local/Program
s/MiKTeX/fonts/type1/public/amsfonts/cm/cmsy8.pfb>
Output written on slipnet_depth_analysis.pdf (7 pages, 353154 bytes).
PDF statistics:
645 PDF objects out of 1000 (max. 8388607)
61 named destinations out of 1000 (max. 500000)
214 words of extra memory for PDF output out of 10000 (max. 10000000)

View File

@ -0,0 +1,26 @@
\BOOKMARK [1][-]{section.1}{\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 1
\BOOKMARK [2][-]{subsection.1.1}{\376\377\000T\000h\000e\000\040\000S\000l\000i\000p\000n\000e\000t\000\040\000A\000r\000c\000h\000i\000t\000e\000c\000t\000u\000r\000e}{section.1}% 2
\BOOKMARK [2][-]{subsection.1.2}{\376\377\000C\000o\000n\000c\000e\000p\000t\000u\000a\000l\000\040\000D\000e\000p\000t\000h}{section.1}% 3
\BOOKMARK [2][-]{subsection.1.3}{\376\377\000R\000e\000s\000e\000a\000r\000c\000h\000\040\000Q\000u\000e\000s\000t\000i\000o\000n}{section.1}% 4
\BOOKMARK [1][-]{section.2}{\376\377\000M\000e\000t\000h\000o\000d\000s}{}% 5
\BOOKMARK [2][-]{subsection.2.1}{\376\377\000D\000a\000t\000a\000\040\000E\000x\000t\000r\000a\000c\000t\000i\000o\000n}{section.2}% 6
\BOOKMARK [2][-]{subsection.2.2}{\376\377\000G\000r\000a\000p\000h\000\040\000C\000o\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n}{section.2}% 7
\BOOKMARK [2][-]{subsection.2.3}{\376\377\000H\000o\000p\000\040\000C\000o\000u\000n\000t\000\040\000C\000o\000m\000p\000u\000t\000a\000t\000i\000o\000n}{section.2}% 8
\BOOKMARK [2][-]{subsection.2.4}{\376\377\000H\000a\000n\000d\000l\000i\000n\000g\000\040\000U\000n\000r\000e\000a\000c\000h\000a\000b\000l\000e\000\040\000N\000o\000d\000e\000s}{section.2}% 9
\BOOKMARK [2][-]{subsection.2.5}{\376\377\000S\000t\000a\000t\000i\000s\000t\000i\000c\000a\000l\000\040\000A\000n\000a\000l\000y\000s\000i\000s}{section.2}% 10
\BOOKMARK [1][-]{section.3}{\376\377\000R\000e\000s\000u\000l\000t\000s}{}% 11
\BOOKMARK [2][-]{subsection.3.1}{\376\377\000N\000e\000t\000w\000o\000r\000k\000\040\000C\000o\000n\000n\000e\000c\000t\000i\000v\000i\000t\000y}{section.3}% 12
\BOOKMARK [2][-]{subsection.3.2}{\376\377\000H\000o\000p\000\040\000D\000i\000s\000t\000r\000i\000b\000u\000t\000i\000o\000n}{section.3}% 13
\BOOKMARK [2][-]{subsection.3.3}{\376\377\000D\000e\000s\000c\000r\000i\000p\000t\000i\000v\000e\000\040\000S\000t\000a\000t\000i\000s\000t\000i\000c\000s}{section.3}% 14
\BOOKMARK [2][-]{subsection.3.4}{\376\377\000C\000o\000r\000r\000e\000l\000a\000t\000i\000o\000n\000\040\000A\000n\000a\000l\000y\000s\000i\000s}{section.3}% 15
\BOOKMARK [2][-]{subsection.3.5}{\376\377\000V\000i\000s\000u\000a\000l\000i\000z\000a\000t\000i\000o\000n}{section.3}% 16
\BOOKMARK [2][-]{subsection.3.6}{\376\377\000C\000o\000u\000n\000t\000e\000r\000e\000x\000a\000m\000p\000l\000e\000s}{section.3}% 17
\BOOKMARK [1][-]{section.4}{\376\377\000D\000i\000s\000c\000u\000s\000s\000i\000o\000n}{}% 18
\BOOKMARK [2][-]{subsection.4.1}{\376\377\000O\000r\000t\000h\000o\000g\000o\000n\000a\000l\000\040\000D\000e\000s\000i\000g\000n\000\040\000D\000i\000m\000e\000n\000s\000i\000o\000n\000s}{section.4}% 19
\BOOKMARK [2][-]{subsection.4.2}{\376\377\000T\000h\000e\000\040\000D\000i\000s\000c\000o\000n\000n\000e\000c\000t\000e\000d\000\040\000C\000l\000u\000s\000t\000e\000r}{section.4}% 20
\BOOKMARK [2][-]{subsection.4.3}{\376\377\000H\000u\000b\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e}{section.4}% 21
\BOOKMARK [2][-]{subsection.4.4}{\376\377\000I\000m\000p\000l\000i\000c\000a\000t\000i\000o\000n\000s}{section.4}% 22
\BOOKMARK [2][-]{subsection.4.5}{\376\377\000L\000i\000m\000i\000t\000a\000t\000i\000o\000n\000s}{section.4}% 23
\BOOKMARK [1][-]{section.5}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 24
\BOOKMARK [1][-]{appendix.A}{\376\377\000C\000o\000m\000p\000l\000e\000t\000e\000\040\000D\000a\000t\000a}{}% 25
\BOOKMARK [1][-]{appendix.B}{\376\377\000L\000i\000n\000k\000\040\000T\000y\000p\000e\000\040\000D\000i\000s\000t\000r\000i\000b\000u\000t\000i\000o\000n}{}% 26

Binary file not shown.

View File

@ -0,0 +1,382 @@
\documentclass[11pt,twocolumn]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{hyperref}
\usepackage[margin=1in]{geometry}
\usepackage{natbib}
\usepackage{float}
\usepackage{caption}
\usepackage{subcaption}
\title{No Significant Relationship Between Conceptual Depth and Graph Distance to Concrete Letter Nodes in the Copycat Slipnet}
\author{
Slipnet Analysis Project\\
\texttt{slipnet\_analysis/}
}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
The Copycat system, developed by Douglas Hofstadter and Melanie Mitchell, employs a semantic network called the slipnet where each node has a ``conceptual depth'' parameter intended to capture its level of abstraction. We investigate whether conceptual depth correlates with the topological distance (hop count) from abstract concept nodes to concrete letter nodes (a--z). Using breadth-first search on an undirected graph representation of the slipnet, we computed minimum hop distances for 33 non-letter nodes, assigning unreachable nodes a penalty distance of $2 \times \max(\text{hops})$. Statistical analysis reveals no significant correlation between conceptual depth and hop count (Pearson $r = 0.281$, $p = 0.113$; Spearman $\rho = 0.141$, $p = 0.433$). The coefficient of determination ($R^2 = 0.079$) indicates that conceptual depth explains only 7.9\% of the variance in hop distance. These findings demonstrate that conceptual depth and network topology are orthogonal design dimensions in the Copycat architecture.
\end{abstract}
\section{Introduction}
The Copycat project, developed by Douglas Hofstadter and Melanie Mitchell in the 1980s and 1990s, represents a landmark effort in computational cognitive science to model analogical reasoning \citep{mitchell1993,hofstadter1995}. The system operates on letter-string analogy problems of the form ``if abc changes to abd, what does ppqqrr change to?'' While the domain is deliberately simple, the underlying cognitive architecture embodies sophisticated principles about how concepts are represented and manipulated during reasoning.
\subsection{The Slipnet Architecture}
Central to Copycat's operation is the \emph{slipnet}, a semantic network containing 59 nodes representing concepts relevant to the letter-string domain. These concepts span multiple levels of abstraction:
\begin{itemize}
\item \textbf{Concrete letters}: The 26 lowercase letters (a--z), representing the atomic units of the problem domain
\item \textbf{Numeric lengths}: The numbers 1--5, used to describe group sizes
\item \textbf{Positional concepts}: \texttt{leftmost}, \texttt{rightmost}, \texttt{first}, \texttt{last}, \texttt{middle}
\item \textbf{Relational concepts}: \texttt{successor}, \texttt{predecessor}, \texttt{sameness}
\item \textbf{Category concepts}: \texttt{letterCategory}, \texttt{bondCategory}, \texttt{groupCategory}
\item \textbf{Meta-concepts}: \texttt{opposite}, \texttt{identity}
\end{itemize}
The slipnet contains 202 directed links connecting these nodes. When converted to an undirected graph, this yields 104 unique edges after removing directional duplicates.
\subsection{Conceptual Depth}
Each slipnet node has a \emph{conceptual depth} parameter, a numeric value between 10 and 90 representing its level of abstraction. Hofstadter and Mitchell intended this parameter to capture the ``deepness'' of a concept---how far removed it is from surface-level, perceptual features:
\begin{itemize}
\item Letter nodes (a--z): depth = 10 (most concrete)
\item \texttt{letter}: depth = 20
\item \texttt{letterCategory}, numbers 1--5: depth = 30
\item \texttt{leftmost}, \texttt{rightmost}, \texttt{middle}: depth = 40
\item \texttt{predecessor}, \texttt{successor}: depth = 50
\item \texttt{first}, \texttt{last}, \texttt{length}: depth = 60
\item \texttt{stringPositionCategory}, \texttt{directionCategory}: depth = 70
\item \texttt{sameness}, \texttt{samenessGroup}, \texttt{group}: depth = 80
\item \texttt{opposite}, \texttt{identity}, \texttt{bondFacet}, \texttt{objectCategory}: depth = 90 (most abstract)
\end{itemize}
The conceptual depth influences Copycat's behavior in several ways: it affects activation spreading dynamics, it modulates the system's preference for discovering ``deep'' versus ``shallow'' analogies, and it contributes to the calculation of conceptual similarity between structures.
\subsection{Research Question}
A natural hypothesis is that deeper (more abstract) concepts should be topologically farther from concrete letters in the network. After all, if conceptual depth represents abstraction level, one might expect that reaching abstract concepts requires traversing more edges from the concrete letter nodes. We test this hypothesis using hop count---the minimum number of edges to traverse---as an Erd\H{o}s number-style metric, with letters serving as the ``center'' analogous to Erd\H{o}s himself.
\section{Methods}
\subsection{Data Extraction}
The slipnet structure was extracted from the original Copycat Python implementation and serialized to JSON format. The extraction preserved all 59 nodes with their attributes (name, conceptual depth, intrinsic link length) and all 202 directed links with their attributes (source, destination, fixed length, type, optional label).
\subsection{Graph Construction}
We constructed an undirected graph $G = (V, E)$ from the slipnet using the NetworkX library. Each node in the slipnet became a vertex in $G$, and each directed link became an undirected edge. When multiple directed links existed between the same pair of nodes (e.g., both \texttt{a}$\to$\texttt{b} and \texttt{b}$\to$\texttt{a}), they were collapsed into a single undirected edge. This yielded $|V| = 59$ vertices and $|E| = 104$ edges.
\subsection{Hop Count Computation}
For each non-letter node $v \in V$, we computed the minimum number of edges to reach any letter node $\ell \in L$ where $L = \{a, b, c, \ldots, z\}$:
\begin{equation}
\text{hops}(v) = \min_{\ell \in L} |P(v, \ell)| - 1
\end{equation}
where $P(v, \ell)$ is the shortest path (sequence of vertices) from $v$ to $\ell$. The subtraction of 1 converts path length (number of vertices) to hop count (number of edges).
This metric is analogous to an Erd\H{o}s number, with the 26 letter nodes collectively playing the role of Erd\H{o}s. A node with hop count 1 is directly connected to at least one letter; a node with hop count 2 is connected to a node that is connected to a letter; and so on.
\subsection{Handling Unreachable Nodes}
Five nodes in the slipnet are topologically disconnected from the letter subgraph. Rather than exclude these nodes from analysis, we assigned them a penalty distance:
\begin{equation}
\text{hops}_{\text{unreachable}} = 2 \times \max_{v \in V_{\text{reachable}}} \text{hops}(v)
\end{equation}
With the maximum observed hop count among reachable nodes being 4, unreachable nodes were assigned $\text{hops} = 8$. This approach ensures all 33 non-letter nodes are included in the analysis while appropriately penalizing disconnected nodes.
\subsection{Statistical Analysis}
We computed both Pearson's correlation coefficient $r$ (measuring linear relationship) and Spearman's rank correlation $\rho$ (measuring monotonic relationship) between conceptual depth and hop count. Statistical significance was assessed at $\alpha = 0.05$.
Linear regression was performed to characterize any trend:
\begin{equation}
\text{hops} = \beta_0 + \beta_1 \times \text{depth} + \epsilon
\end{equation}
The coefficient of determination $R^2$ was computed to quantify the proportion of variance in hop count explained by conceptual depth.
\section{Results}
\subsection{Network Connectivity}
Of the 59 total nodes, 26 are letter nodes (which have hop count 0 by definition) and 33 are non-letter concept nodes. Among these 33 nodes, 28 are reachable from at least one letter and 5 are disconnected from the letter subgraph. The five disconnected nodes are:
\begin{itemize}
\item \texttt{identity} (depth = 90)
\item \texttt{opposite} (depth = 90)
\item \texttt{objectCategory} (depth = 90)
\item \texttt{group} (depth = 80)
\item \texttt{letter} (depth = 20)
\end{itemize}
\subsection{Hop Distribution}
Table~\ref{tab:hops} shows the distribution of hop counts among all 33 non-letter nodes.
\begin{table}[H]
\centering
\caption{Distribution of minimum hops to letter nodes}
\label{tab:hops}
\begin{tabular}{ccp{4.5cm}}
\toprule
Hops & Count & Example Nodes \\
\midrule
1 & 3 & \texttt{letterCategory}, \texttt{first}, \texttt{last} \\
2 & 6 & \texttt{leftmost}, \texttt{length}, \texttt{bondFacet} \\
3 & 12 & Numbers 1--5, \texttt{sameness}, \texttt{groupCategory} \\
4 & 7 & \texttt{bondCategory}, \texttt{predecessor}, \texttt{middle} \\
8 & 5 & \texttt{identity}, \texttt{opposite}, \texttt{letter} (unreachable) \\
\bottomrule
\end{tabular}
\end{table}
The distribution shows most nodes (28 of 33) within 4 hops of a letter, with 5 nodes forming a disconnected cluster.
\subsection{Descriptive Statistics}
Table~\ref{tab:descriptive} summarizes the distributions of conceptual depth and hop count.
\begin{table}[H]
\centering
\caption{Descriptive statistics for analyzed nodes (n=33)}
\label{tab:descriptive}
\begin{tabular}{lcc}
\toprule
Statistic & Depth & Hops \\
\midrule
Minimum & 20 & 1 \\
Maximum & 90 & 8 \\
Mean & 55.76 & 3.61 \\
Std. Dev. & 21.89 & 2.04 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{Correlation Analysis}
The correlation analysis yielded the following results:
\begin{itemize}
\item Pearson correlation: $r = 0.281$, $p = 0.113$
\item Spearman correlation: $\rho = 0.141$, $p = 0.433$
\item Coefficient of determination: $R^2 = 0.079$
\item Linear regression: $\text{hops} = 0.026 \times \text{depth} + 2.14$
\end{itemize}
Neither correlation coefficient approaches statistical significance. The p-values of 0.113 and 0.433 are above the 0.05 threshold. The $R^2$ of 0.079 indicates that conceptual depth explains only 7.9\% of the variance in hop count---a weak effect at best.
The regression slope of $0.026$ suggests that a 10-point increase in conceptual depth predicts only a 0.26 increase in hop count---modest compared to the 2.04 standard deviation of hops.
\subsection{Visualization}
Figure~\ref{fig:scatter} displays the scatter plot of conceptual depth versus minimum hops. Unreachable nodes (hops=8) are shown in red. The wide spread of depths at each hop level and the weak regression line visually confirm the absence of any strong relationship.
\begin{figure}[H]
\centering
\includegraphics[width=\columnwidth]{depth_hops_correlation.png}
\caption{Scatter plot of conceptual depth versus minimum hops to nearest letter node. Reachable nodes (blue) and unreachable nodes (red, assigned hops=$2 \times 4 = 8$) are distinguished. Points are jittered vertically for visibility. The dashed line shows the linear regression fit.}
\label{fig:scatter}
\end{figure}
\subsection{Counterexamples}
The data reveal striking counterexamples to any depth-distance relationship:
\begin{enumerate}
\item \textbf{High depth, few hops}: \texttt{bondFacet} (depth=90, the maximum) is only 2 hops from a letter. Similarly, \texttt{samenessGroup} and \texttt{alphabeticPositionCategory} (both depth=80) are also just 2 hops away.
\item \textbf{Low depth, many hops}: The \texttt{letter} node (depth=20) is completely disconnected from actual letters despite being the object-type concept for them. The number nodes 1--5 (depth=30) all require 3 hops to reach a letter.
\item \textbf{Same depth, different hops}: At depth=90, \texttt{bondFacet} needs only 2 hops while \texttt{identity}, \texttt{opposite}, and \texttt{objectCategory} are completely unreachable---a dramatic difference.
\item \textbf{Same hops, different depths}: Nodes at 2 hops have depths ranging from 40 (\texttt{leftmost}) to 90 (\texttt{bondFacet})---the full 50-point range.
\item \textbf{Unreachable nodes span depths}: The 5 disconnected nodes have depths of 20, 80, and 90---covering most of the depth range despite all being topologically equivalent (infinitely far from letters).
\end{enumerate}
\section{Discussion}
\subsection{Orthogonal Design Dimensions}
The weak, non-significant correlation ($r = 0.281$, $p = 0.113$) demonstrates that conceptual depth and network topology were designed as largely independent dimensions. This orthogonality is architecturally meaningful:
\begin{enumerate}
\item \textbf{Network topology} determines which concepts can activate each other through spreading activation. Two nodes connected by an edge can directly influence each other's activation levels during reasoning.
\item \textbf{Conceptual depth} modulates how the system values discoveries at different abstraction levels. Deeper concepts, when activated, contribute more to the system's sense of having found a ``good'' analogy.
\end{enumerate}
By keeping these dimensions independent, the slipnet can connect concepts that need to interact (regardless of depth) while separately encoding their semantic abstraction level.
\subsection{The Disconnected Cluster}
The five disconnected nodes form a coherent subsystem:
\begin{itemize}
\item \texttt{identity} and \texttt{opposite}: These exist primarily as labels on slip links, not as endpoints in the graph. They track activation for meta-level relationship concepts.
\item \texttt{letter}, \texttt{group}, \texttt{objectCategory}: These form an isolated cluster representing the object-type hierarchy. They classify workspace objects but don't connect to the letter-category network.
\end{itemize}
Notably, the \texttt{letter} concept (depth=20, relatively concrete) is disconnected while \texttt{letterCategory} (depth=30) is directly connected to all 26 letters. This distinction between ``letter-as-type'' and ``letter-as-category'' further illustrates how topology and depth serve different purposes.
\subsection{Hub Structure}
Analysis of the shortest paths reveals that routes to letters converge on gateway nodes:
\begin{itemize}
\item \texttt{first} $\to$ \texttt{a}: Property link providing direct access
\item \texttt{last} $\to$ \texttt{z}: Property link providing direct access
\item \texttt{letterCategory} $\to$ any letter: Instance links to all 26 letters
\end{itemize}
The \texttt{letterCategory} node is particularly important, serving as a central hub. This makes it the primary gateway between abstract concepts and concrete letters, explaining why many paths route through it.
\subsection{Implications}
Our findings have implications for understanding and extending the Copycat architecture:
\begin{enumerate}
\item \textbf{For analysis}: Attempting to infer conceptual depth from topology---or vice versa---would be misguided. They encode different information.
\item \textbf{For extensions}: New concepts added to the slipnet can be placed topologically based on needed associations, with depth set independently based on abstraction level.
\item \textbf{For interpretation}: The slipnet's representational power comes from having multiple orthogonal dimensions, not from a single unified hierarchy.
\end{enumerate}
\subsection{Limitations}
Several limitations should be noted:
\begin{enumerate}
\item \textbf{Sample size}: With 33 nodes, statistical power is limited, though this represents the complete population of non-letter nodes.
\item \textbf{Penalty assignment}: The choice of $2 \times \max(\text{hops})$ for unreachable nodes is somewhat arbitrary. However, alternative penalty values (e.g., $3 \times \max$ or $\infty$) would likely strengthen our conclusion.
\item \textbf{Undirected assumption}: We treated edges as undirected. Analysis of directed paths might differ.
\item \textbf{Single metric}: Hop count is one of many possible graph metrics. Centrality measures or spectral properties might reveal different patterns.
\end{enumerate}
\section{Conclusion}
There is no statistically significant relationship between conceptual depth and hop distance to letter nodes in the Copycat slipnet. With Pearson $r = 0.281$ ($p = 0.113$), Spearman $\rho = 0.141$ ($p = 0.433$), and $R^2 = 0.079$, conceptual depth explains less than 8\% of the variance in topological distance---and this weak positive trend fails to reach significance.
This finding supports the view that the slipnet employs two orthogonal representational dimensions: network topology (governing associative access and activation flow) and conceptual depth (governing abstraction-level preferences in reasoning). This separation allows independent tuning of each dimension and may contribute to the slipnet's representational flexibility.
\section*{Data Availability}
All analysis scripts and data are available in the \texttt{slipnet\_analysis/} directory:
\begin{itemize}
\item \texttt{slipnet.json}: Complete network with computed paths
\item \texttt{compute\_letter\_paths.py}: Hop computation script
\item \texttt{plot\_depth\_distance\_correlation.py}: Statistical analysis and plotting
\item \texttt{compute\_stats.py}: Detailed statistics computation
\end{itemize}
\appendix
\section{Complete Data}
Table~\ref{tab:complete} presents all 33 analyzed nodes sorted by hop count and depth.
\begin{table}[H]
\centering
\caption{All analyzed nodes sorted by hop count, then depth}
\label{tab:complete}
\small
\begin{tabular}{lccc}
\toprule
Node & Depth & Hops & Reachable \\
\midrule
letterCategory & 30 & 1 & Yes \\
first & 60 & 1 & Yes \\
last & 60 & 1 & Yes \\
\midrule
leftmost & 40 & 2 & Yes \\
rightmost & 40 & 2 & Yes \\
length & 60 & 2 & Yes \\
samenessGroup & 80 & 2 & Yes \\
alphabeticPositionCategory & 80 & 2 & Yes \\
bondFacet & 90 & 2 & Yes \\
\midrule
1 & 30 & 3 & Yes \\
2 & 30 & 3 & Yes \\
3 & 30 & 3 & Yes \\
4 & 30 & 3 & Yes \\
5 & 30 & 3 & Yes \\
left & 40 & 3 & Yes \\
right & 40 & 3 & Yes \\
predecessorGroup & 50 & 3 & Yes \\
successorGroup & 50 & 3 & Yes \\
stringPositionCategory & 70 & 3 & Yes \\
sameness & 80 & 3 & Yes \\
groupCategory & 80 & 3 & Yes \\
\midrule
middle & 40 & 4 & Yes \\
single & 40 & 4 & Yes \\
whole & 40 & 4 & Yes \\
predecessor & 50 & 4 & Yes \\
successor & 50 & 4 & Yes \\
directionCategory & 70 & 4 & Yes \\
bondCategory & 80 & 4 & Yes \\
\midrule
letter & 20 & 8 & No \\
group & 80 & 8 & No \\
identity & 90 & 8 & No \\
opposite & 90 & 8 & No \\
objectCategory & 90 & 8 & No \\
\bottomrule
\end{tabular}
\end{table}
\section{Link Type Distribution}
The slipnet contains five distinct types of directed links, summarized in Table~\ref{tab:links}.
\begin{table}[H]
\centering
\caption{Slipnet link type distribution}
\label{tab:links}
\begin{tabular}{lcp{4cm}}
\toprule
Type & Count & Purpose \\
\midrule
nonSlip & 83 & Lateral associations that don't allow conceptual slippage \\
category & 51 & Upward hierarchy (instance to category) \\
instance & 50 & Downward hierarchy (category to instance) \\
slip & 16 & Links allowing conceptual slippage \\
property & 2 & Intrinsic attributes (\texttt{a}$\to$\texttt{first}, \texttt{z}$\to$\texttt{last}) \\
\bottomrule
\end{tabular}
\end{table}
\begin{thebibliography}{9}
\bibitem{mitchell1993}
Mitchell, M. (1993). \textit{Analogy-Making as Perception: A Computer Model}. MIT Press.
\bibitem{hofstadter1995}
Hofstadter, D. R., \& FARG. (1995). \textit{Fluid Concepts and Creative Analogies: Computer Models of the Fundamental Mechanisms of Thought}. Basic Books.
\end{thebibliography}
\end{document}