
? s: ? defended_by_s: ? attacked_by_s: 

    //One useful notion is the set of nodes that are **attacked by S**

    ( ! B: in_node(B) =>( attacked_by_s(B) <=> ( ? A: in_attack(A,B) & s(A) ) ) ) &

    // GRINGO:    -s(A) | attacked_by_s(B) :- in_node(B), in_attack(A,B)
    // GRINGO:    s(A): in_attack(A,B) | - attacked_by_s(B) :- in_node(B)

     //Similarly, we define the set of nodes that are **defended by S**

    ( ! B: in_node(B) =>( defended_by_s(B) <=> ( ! A: in_attack(A,B) => attacked_by_s(A) ) ) ) &

    // GRINGO:    defended_by_s(B) | -attacked_by_s(A):in_attack(A,B) :- in_node(B)
    // GRINGO:    -defended_by_s(B) | attacked_by_s(A) :- in_node(B), in_attack(A,B)





    //fixpoint:
    ( !B: in_node(B) => ( s(B) <=> defended_by_s(B)))  &
    //Least fixpoint: there is no s'
    ~ ( ? s': ? defended_by_s': ? attacked_by_s': 
      //Smaller than S
      ( !B: in_node(B) => (s'(B) => s(B)) ) &
      //Not equal to S
      ( ? B: in_node(B) & s(B) & ~s'(B) ) &
      //Also a fixpoint
      ( !B: in_node(B) => ( s'(B) <=> defended_by_s'(B)) ) &
      
      //Copy of previous definitions:
      ( ! B: in_node(B) =>( defended_by_s'(B) <=> (! A: in_attack(A,B) => attacked_by_s'(A)) ) ) &
      ( ! B: in_node(B) =>( attacked_by_s'(B) <=> (? A: in_attack(A,B) & s'(A)) ) )
    ).
    
  
// GRINGO:    //Fixpoint:
// GRINGO:    s(B) | -defended_by_s(B):- in_node(B)
// GRINGO:    -s(B) | defended_by_s(B):- in_node(B)
// GRINGO:    //Least fixpoint: there is no s'
// GRINGO:    //TODO SOMEHOW WRITE THIS: ~? s': 
// GRINGO:     //Smaller than S
// GRINGO:      -s'(B) | s(B):- in_node(B)
// GRINGO:      //Also a fixpoint
// GRINGO:      s'(B) | -defended_by_s'(B):- in_node(B)
// GRINGO:      -s'(B) | defended_by_s'(B):- in_node(B)
// GRINGO:      
// GRINGO:      
// GRINGO:      //Copy of previous definitions:
// GRINGO:      defended_by_s'(B) | -attacked_by_s'(A):in_attack(A,B) :- in_node(B)
// GRINGO:      -defended_by_s'(B) | attacked_by_s'(A) :- in_node(B), in_attack(A,B)
// GRINGO:      -s'(A) | attacked_by_s'(B) :- in_node(B), in_attack(A,B)
// GRINGO:      s'(A): in_attack(A,B) | attacked_by_s'(B) :- in_node(B)  
  

