fact: Definition check_diseqs ty dist diseq := let t := amap (fun t => if Lit.is_pos t then None else match get_form (Lit.blit t) with | Fatom a => match get_atom a with | Atom.Abop (Atom.BO_eq A) h1 h2 => if (Typ.eqb ty A) && (negb (h1 =? h2)) && (check_in h1 dist) && (check_in h2 dist) then Some (h1,h2) else None | _ => None end | _ => None end ) diseq in aforallbi (fun _ x => match x with | None => false | _ => true end) t && check_diseqs_complete dist t.
imports: List PArray Bool Int63 ZMicromega Misc State SMT_terms