The "Tetris" domain involves moving and rotating Tetris pieces on a grid of positions. There are three types of pieces:

1. One-square piece: occupies exactly one position.
2. Two-square straight piece: occupies exactly two connected positions in a straight line.
3. Right-L piece: occupies exactly three positions arranged in an "L" shape.

Positions can be either clear (empty) or occupied by a piece. Pieces can move or rotate into adjacent clear positions.

Actions:

1) move_square  
Example: (move_square positionA positionB piece1)  
Meaning: Moves a one-square piece named "piece1" from positionA to an adjacent empty positionB, costing 1 unit.  
• Purpose: Moves a single-square piece to an adjacent empty position.  
• Preconditions:  
  - positionB must be clear (empty).  
  - piece1 must currently occupy positionA.  
  - positionA and positionB must be adjacent (connected).  
• Effects:  
  - positionA becomes clear.  
  - positionB becomes occupied by piece1 (no longer clear).  

2) move_two  
Example: (move_two positionA positionB positionC piece2)  
Meaning: Moves or rotates a two-square straight piece named "piece2," currently occupying positions positionA and positionB, so that it occupies positions positionB and positionC, costing 2 units.  
• Purpose: Moves or rotates a two-square straight piece into an adjacent clear position.  
• Preconditions:  
  - positionC must be clear.  
  - piece2 currently occupies positions positionA and positionB.  
  - positionB and positionC must be adjacent (connected).  
• Effects:  
  - positionA becomes clear.  
  - positionC becomes occupied by piece2 (no longer clear).  
  - piece2 now occupies positions positionB and positionC.  

3) move_l_right  
Example: (move_l_right positionA positionB positionC positionD positionE positionMid pieceL)  
Meaning: Moves or rotates a three-square "L" shaped piece named "pieceL," currently occupying positions positionA, positionB, and positionC, to the right, so it occupies positions positionD, positionC, and positionE, costing 3 units.  
• Purpose: Moves or rotates an "L" shaped piece to the right into two adjacent clear positions.  
• Preconditions:  
  - positions positionD and positionE must both be clear.  
  - pieceL currently occupies positions positionA, positionB, and positionC.  
  - positions positionD and positionE must be adjacent to the current positions in a way that forms a valid "L" shape.  
• Effects:  
  - positions positionA and positionB become clear.  
  - positions positionD and positionE become occupied by pieceL (no longer clear).  
  - pieceL now occupies positions positionD, positionC, and positionE.  

4) move_l_left  
Example: (move_l_left positionA positionB positionC positionD positionE pieceL)  
Meaning: Moves or rotates a three-square "L" shaped piece named "pieceL," currently occupying positions positionA, positionB, and positionC, to the left, so it occupies positions positionD, positionE, and positionB, costing 3 units.  
• Purpose: Moves or rotates an "L" shaped piece to the left into two adjacent clear positions.  
• Preconditions:  
  - positions positionD and positionE must both be clear.  
  - pieceL currently occupies positions positionA, positionB, and positionC.  
  - positions positionD and positionE must be adjacent to the current positions in a way that forms a valid "L" shape.  
• Effects:  
  - positions positionA and positionC become clear.  
  - positions positionD and positionE become occupied by pieceL (no longer clear).  
  - pieceL now occupies positions positionD, positionE, and positionB.  

5) move_l_up  
Example: (move_l_up positionA positionB positionC positionD positionE positionMid pieceL)  
Meaning: Moves or rotates a three-square "L" shaped piece named "pieceL," currently occupying positions positionA, positionB, and positionC, upward, so it occupies positions positionD, positionA, and positionE, costing 3 units.  
• Purpose: Moves or rotates an "L" shaped piece upward into two adjacent clear positions.  
• Preconditions:  
  - positions positionD and positionE must both be clear.  
  - pieceL currently occupies positions positionA, positionB, and positionC.  
  - positions positionD and positionE must be adjacent to the current positions in a way that forms a valid "L" shape.  
• Effects:  
  - positions positionB and positionC become clear.  
  - positions positionD and positionE become occupied by pieceL (no longer clear).  
  - pieceL now occupies positions positionD, positionA, and positionE.  

6) move_l_down  
Example: (move_l_down positionA positionB positionC positionD positionE pieceL)  
Meaning: Moves or rotates a three-square "L" shaped piece named "pieceL," currently occupying positions positionA, positionB, and positionC, downward, so it occupies positions positionB, positionD, and positionE, costing 3 units.  
• Purpose: Moves or rotates an "L" shaped piece downward into two adjacent clear positions.  
• Preconditions:  
  - positions positionD and positionE must both be clear.  
  - pieceL currently occupies positions positionA, positionB, and positionC.  
  - positions positionD and positionE must be adjacent to the current positions in a way that forms a valid "L" shape.  
• Effects:  
  - positions positionA and positionC become clear.  
  - positions positionD and positionE become occupied by pieceL (no longer clear).  
  - pieceL now occupies positions positionB, positionD, and positionE.  

Summary:  
The Tetris domain allows moving and rotating three types of Tetris pieces (one-square, two-square straight, and three-square "L" shaped) around a grid of positions. Each move requires the destination positions to be clear and adjacent to the current positions. After each move, previously occupied positions become clear, and newly occupied positions become non-clear. Each action has an associated cost (1 for single-square moves, 2 for two-square moves, and 3 for "L" piece moves).