// File: eryxcc[P]lois/src/solvers.cpp
// Function: lois::SolverIncremental::isNotInSMTLogic(lois::rbool)
bool isNotInSMTLogic(rbool phi) {
    featurelist fl;
    phi->listFeatures(fl);

//  for(auto d: fl.domains) std::cout << d->name << " ";
//  for(auto r: fl.relations) std::cout << r->getName() << " "; std::cout << std::endl;
    
    if(fl.domains.size() != 1) {
      std::cout << "SMT cannot use multiple domains yet" << std::endl;
      return true;
      }
    for(auto r: fl.relations) if(!r->worksWith(SMT_INC)) {
      std::cout << "SMT cannot use " << r->getName() << std::endl;
      return true;
      }
    
    // only one order allowed
    RelOrder *order = NULL;
    for(auto r: fl.relations) {
      RelOrder *o = dynamic_cast<RelOrder*> (r);
      if(o) {
        if(order && o != order) {
          std::cout << "Only one order relation allowed for " << smtLogic << std::endl;
          return true;
          }
        if(o) order = o;
        }
      }

    if(smtsort() == "Int") for(auto r: fl.relations) {
      RelReal *o = dynamic_cast<RelReal*> (r);
      if(o) {
        std::cout << smtLogic << " does not support RelReal" << std::endl;
        return true;
        }
      }
    
    if(smtsort() == "Real") for(auto r: fl.relations) {
      RelInt *o = dynamic_cast<RelInt*> (r);
      if(o) {
        std::cout << smtLogic << " does not support RelInt" << std::endl;
        return true;
        }
      }
    
    return false;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x230, %rsp            # imm = 0x230
movq %rsi, -0x198(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
leaq -0x78(%rbp), %rdi
movq %rdi, -0x190(%rbp)
callq 0x5b6c0
movq -0x198(%rbp), %rdi
callq 0x3ece0
movq -0x190(%rbp), %rsi
movq %rax, %rdi
movq (%rdi), %rax
movq 0x40(%rax), %rax
callq *%rax
jmp 0x62c7b
leaq -0x78(%rbp), %rdi
callq 0x63680
cmpq $0x1, %rax
je 0x62ce2
movq 0x42347(%rip), %rdi     # 0xa4fd8
leaq 0x10a91(%rip), %rsi     # 0x73729
callq 0x82b0
movq %rax, -0x1a0(%rbp)
jmp 0x62ca6
movq -0x1a0(%rbp), %rdi
movq 0x422fc(%rip), %rsi     # 0xa4fb0
callq 0x8300
jmp 0x62cbb
movb $0x1, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
jmp 0x632ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x632c3
leaq -0x78(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rdi
callq 0x5b6f0
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rdi
callq 0x5b720
movq %rax, -0xa0(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x5b750
testb $0x1, %al
jne 0x62d33
jmp 0x62e2e
leaq -0x98(%rbp), %rdi
callq 0x5b780
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
movl $0x6, %esi
callq *%rax
movb %al, -0x1a1(%rbp)
jmp 0x62d66
movb -0x1a1(%rbp), %al
testb $0x1, %al
jne 0x62e1b
jmp 0x62d76
movq 0x4225b(%rip), %rdi     # 0xa4fd8
leaq 0x109c9(%rip), %rsi     # 0x7374d
callq 0x82b0
movq %rax, -0x1b0(%rbp)
jmp 0x62d92
movq -0xa8(%rbp), %rsi
movq (%rsi), %rax
movq 0x38(%rax), %rax
leaq -0xc8(%rbp), %rdi
callq *%rax
jmp 0x62dab
movq -0x1b0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x8280
movq %rax, -0x1b8(%rbp)
jmp 0x62dc7
movq -0x1b8(%rbp), %rdi
movq 0x421db(%rip), %rsi     # 0xa4fb0
callq 0x8300
jmp 0x62ddc
leaq -0xc8(%rbp), %rdi
callq 0x8578
movb $0x1, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
jmp 0x632ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x8578
jmp 0x632c3
jmp 0x62e1d
leaq -0x98(%rbp), %rdi
callq 0x5b7b0
jmp 0x62d17
movq $0x0, -0xd0(%rbp)
leaq -0x78(%rbp), %rax
addq $0x30, %rax
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rdi
callq 0x5b6f0
movq %rax, -0xe0(%rbp)
movq -0xd8(%rbp), %rdi
callq 0x5b720
movq %rax, -0xe8(%rbp)
leaq -0xe0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x5b750
testb $0x1, %al
jne 0x62e8a
jmp 0x62fa9
leaq -0xe0(%rbp), %rdi
callq 0x5b780
movq (%rax), %rax
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x1c0(%rbp)
cmpq $0x0, %rax
je 0x62edb
movq -0x1c0(%rbp), %rdi
leaq 0x40566(%rip), %rsi     # 0xa3428
leaq 0x41187(%rip), %rdx     # 0xa4050
xorl %eax, %eax
movl %eax, %ecx
callq 0x8350
movq %rax, -0x1c8(%rbp)
jmp 0x62ee6
xorl %eax, %eax
movq %rax, -0x1c8(%rbp)
jmp 0x62ee6
movq -0x1c8(%rbp), %rax
movq %rax, -0xf8(%rbp)
cmpq $0x0, -0xf8(%rbp)
je 0x62f96
cmpq $0x0, -0xd0(%rbp)
je 0x62f7c
movq -0xf8(%rbp), %rax
cmpq -0xd0(%rbp), %rax
je 0x62f7c
movq 0x420b5(%rip), %rdi     # 0xa4fd8
leaq 0x10833(%rip), %rsi     # 0x7375d
callq 0x82b0
movq %rax, -0x1d0(%rbp)
jmp 0x62f38
movq -0x1d0(%rbp), %rdi
leaq 0x429ba(%rip), %rsi     # 0xa5900
callq 0x8280
movq %rax, -0x1d8(%rbp)
jmp 0x62f54
movq -0x1d8(%rbp), %rdi
movq 0x4204e(%rip), %rsi     # 0xa4fb0
callq 0x8300
jmp 0x62f69
movb $0x1, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
jmp 0x632ac
cmpq $0x0, -0xf8(%rbp)
je 0x62f94
movq -0xf8(%rbp), %rax
movq %rax, -0xd0(%rbp)
jmp 0x62f96
jmp 0x62f98
leaq -0xe0(%rbp), %rdi
callq 0x5b7b0
jmp 0x62e6e
leaq -0x118(%rbp), %rdi
callq 0x5aae0
jmp 0x62fb7
leaq -0x118(%rbp), %rdi
leaq 0x107ec(%rip), %rsi     # 0x737b1
callq 0x50ce0
movb %al, -0x1d9(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x8578
movb -0x1d9(%rbp), %al
testb $0x1, %al
jne 0x62feb
jmp 0x63125
leaq -0x78(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rdi
callq 0x5b6f0
movq %rax, -0x128(%rbp)
movq -0x120(%rbp), %rdi
callq 0x5b720
movq %rax, -0x130(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x5b750
testb $0x1, %al
jne 0x6303c
jmp 0x63123
leaq -0x128(%rbp), %rdi
callq 0x5b780
movq (%rax), %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x1e8(%rbp)
cmpq $0x0, %rax
je 0x6308d
movq -0x1e8(%rbp), %rdi
leaq 0x403b4(%rip), %rsi     # 0xa3428
leaq 0x418a5(%rip), %rdx     # 0xa4920
xorl %eax, %eax
movl %eax, %ecx
callq 0x8350
movq %rax, -0x1f0(%rbp)
jmp 0x63098
xorl %eax, %eax
movq %rax, -0x1f0(%rbp)
jmp 0x63098
movq -0x1f0(%rbp), %rax
movq %rax, -0x140(%rbp)
cmpq $0x0, -0x140(%rbp)
je 0x63110
movq 0x41f21(%rip), %rdi     # 0xa4fd8
leaq 0x42842(%rip), %rsi     # 0xa5900
callq 0x8280
movq %rax, -0x1f8(%rbp)
jmp 0x630cc
movq -0x1f8(%rbp), %rdi
leaq 0x106a8(%rip), %rsi     # 0x73782
callq 0x82b0
movq %rax, -0x200(%rbp)
jmp 0x630e8
movq -0x200(%rbp), %rdi
movq 0x41eba(%rip), %rsi     # 0xa4fb0
callq 0x8300
jmp 0x630fd
movb $0x1, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
jmp 0x632ac
jmp 0x63112
leaq -0x128(%rbp), %rdi
callq 0x5b7b0
jmp 0x63020
jmp 0x63125
leaq -0x160(%rbp), %rdi
callq 0x5aae0
jmp 0x63133
leaq -0x160(%rbp), %rdi
leaq 0x10656(%rip), %rsi     # 0x73797
callq 0x50ce0
movb %al, -0x201(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x8578
movb -0x201(%rbp), %al
testb $0x1, %al
jne 0x63167
jmp 0x6329e
leaq -0x78(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rdi
callq 0x5b6f0
movq %rax, -0x170(%rbp)
movq -0x168(%rbp), %rdi
callq 0x5b720
movq %rax, -0x178(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x5b750
testb $0x1, %al
jne 0x631b8
jmp 0x6329c
leaq -0x170(%rbp), %rdi
callq 0x5b780
movq (%rax), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0x210(%rbp)
cmpq $0x0, %rax
je 0x63209
movq -0x210(%rbp), %rdi
leaq 0x40238(%rip), %rsi     # 0xa3428
leaq 0x41741(%rip), %rdx     # 0xa4938
xorl %eax, %eax
movl %eax, %ecx
callq 0x8350
movq %rax, -0x218(%rbp)
jmp 0x63214
xorl %eax, %eax
movq %rax, -0x218(%rbp)
jmp 0x63214
movq -0x218(%rbp), %rax
movq %rax, -0x188(%rbp)
cmpq $0x0, -0x188(%rbp)
je 0x63289
movq 0x41da5(%rip), %rdi     # 0xa4fd8
leaq 0x426c6(%rip), %rsi     # 0xa5900
callq 0x8280
movq %rax, -0x220(%rbp)
jmp 0x63248
movq -0x220(%rbp), %rdi
leaq 0x10546(%rip), %rsi     # 0x7379c
callq 0x82b0
movq %rax, -0x228(%rbp)
jmp 0x63264
movq -0x228(%rbp), %rdi
movq 0x41d3e(%rip), %rsi     # 0xa4fb0
callq 0x8300
jmp 0x63279
movb $0x1, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
jmp 0x632ac
jmp 0x6328b
leaq -0x170(%rbp), %rdi
callq 0x5b7b0
jmp 0x6319c
jmp 0x6329e
movb $0x0, -0x1(%rbp)
movl $0x1, -0x88(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x5b7e0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x230, %rsp            # imm = 0x230
popq %rbp
retq
leaq -0x78(%rbp), %rdi
callq 0x5b7e0
movq -0x80(%rbp), %rdi
callq 0x84d0
nopw %cs:(%rax,%rax)
nop